블로그

감자

컴퓨터 공학(CS)이 중요할까요?

저는 학부 시절에 전공수업을 들으면서 항상 답답한 마음이 있었어요.논리회로, 컴퓨터 구조, 자료구조, 알고리즘, 운영체제, 네트워크 등 컴퓨터 공학에서 꼭 배우는 과목을 들을 때마다 너무 막연한 기분이었죠.분명히 한 과목을 들을 땐 해당 내용에 대해서 자세히 배우지만 너무 이론적인 것만 배우는 느낌이 들었고,"왜 지금 당장 결과가 보이는 내용으로 공부하지 않을까?"라는 질문을 했었죠.🧐CPU가 어떤 구조이고 어떻게 동작하는지 이론적으로는 배우지만 정작 CPU가 어떻게 생겼는지는 아무도 알려주지도 않고 스스로 찾아본 적도 없었어요.CPU뿐만 아니라 RAM, 하드디스크 등 주변장치가 어떻게 생긴 줄도 몰랐죠.다른 과 친구들은 "너 컴퓨터 잘 아니까 부품도 잘 알고 조립도 잘하겠네?"라고 종종 물어보지만 그렇지 않았죠.네트워크 수업 때는 모뎀, 허브, 라우터 등 전부 이론적으로, 기껏해야 그림으로 된 예시로 보니까 현실 세계랑 매칭이 잘되지 않았어요.교수님들은 학교에서 배우는 전공이 중요하다고 말씀하실 때 항상 따라붙는 말이 있었어요.컴퓨터 공학은 매우 복잡하므로 Divide and Conquer(분할 정복)로 접근해 하나씩 자세히 알아보는 것이 중요하다, 하지만 이렇게 하나씩 배운 개념을 조합해 전체적으로 볼 줄도 알아야 한다.당시엔 전체적으로 볼 줄 알아야 한다는 말이 크게 와닿지 않았었는데요. 첫 직장에서 백엔드 개발자로 일하는 순간부터 느꼈어요.회사에서 사용하는 기술 스택들은 처음 접해보는 것들이었고 말로만 듣던 AWS도 직접 만져봐야 했죠.이때 많은 기술 스택과 AWS에서 사용하는 용어들은 굉장히 혼란스러웠죠.하지만 용어만 다를 뿐 전공에서 배운 개념들은 그대로였어요.제가 고생했던 것은 "실제로" 이것들이 어떻게 연결되어 동작하는지가 머리에 잘 정리되어 있지 않았던 것이었죠.회사에서도 공부할 시간을 줘서 얼마 되지 않아서 정리할 수 있었어요.그때 교수님들의 말씀이 다시 생각났어요."하나씩 배운 개념을 조합하는 게 이래서 중요하구나~"라고요.회사에 적응하고 개발할 때도 학과에서 배운 내용이 직/간접적으로 도움 된 적이 많아서 그때마다 교수님들을 떠올렸죠.한 번은 사용자의 특정 요청 중 일부가 아주 가끔 중복돼서 들어오는 경우가 있었어요.똑같은 환경에서 테스트해봐도 확인해볼 수도 없었고 하루에 하나가 있을까 말까 했죠.저희 팀에선 이 문제가 한 달 넘게 해결하지 못하고 있었던 상황이었어요.저도 이 문제가 왜 발생하는지 골치 아팠었죠.🧟그러던 어느 날 문득 원인이 예측됐어요. 운영체제에서 배웠던 개념에서 떠올릴 수 있었어요.그래서 예측한 원인을 해결할 방법을 찾아 코드를 수정했고 지켜봤어요!똑같은 문제는 다시는 발생하지 않았죠. 👏 이렇게 실무에서 컴퓨터 공학(CS)의 중요성을 알게 되어 기본기가 탄탄해야 한다는 말에 극공감하게 됐어요.하지만 CS를 배우는 건 어렵고 지루해서 금방 포기하게 되죠.그래서 저는 수업에서 들었던 궁금증, 그때 알았으면 좋았을 것들을 그림과 예시를 들어가며 직접 만들기로 했어요.현재 준비하고 있는 강의는 네트워크인데요.이론적인 내용뿐만 아니라 우리가 일상에서 볼 수 있는 기기가 네트워크에서 어떤 용어로 쓰이고 어떤 역할을 하는지,큰 그림을 맞춰볼 거예요. 만약 CPU의 동작 방식을 배웠다면 위의 그림처럼 CPU가 실제로 어떻게 생겼는지도 알아야 헷갈리지 않겠죠?네트워크는 하드웨어와 소프트웨어가 공존하기 때문에 이렇게 하드웨어까지 알아가며 퍼즐을 맞춰갈 겁니다.이만 다음 강의인 "그림으로 쉽게 배우는 네트워크"를 준비하러 가보겠습니다.😊

개발 · 프로그래밍 기타CS전공자비전공자컴퓨터공학그림으로쉽게배우는네트워크

코드캠프

채용시장에서 유리한 주니어? [1탄 - 주니어의 기본기 : 프론트엔드 편]

상향 평준화 된 요즘의 채용시장, 주니어 또는 신입 개발자들은 끊임없는 딜레마에 빠집니다.공고에 맞는 스택을 갖췄는데 이직에 실패하거나 취업이 힘든 경험이 있는 주니어 개발자.대체 어느 부분때문에 이직,취업이 어려운 걸까요?더 많은 기술스택이 있는 사람을 채용하는 걸까요? 이에 코드캠프는 채용에 대한 원초적인 질문을 던져 보기로 했습니다.❓ 채용시장에서 조금 더 유리한 주니어 개발자의 역량은 어느 정도일까?❓ 점점 상향 평준화 되어가는 채용 시장, 주니어는 어떤 경쟁력을 갖추고 있어야 할까?주니어 개발자를 양성하는 코드캠프에서 위의 질문은 핫토픽이자, 커리큘럼 개편에 가장 중요하게 반영되는 요소입니다.그만큼 위 질문에서 만큼은 진지하게 고민하고, 다른 기업 CTO분들과 얘기도 많이 나눠보고 여러가지 의견을 반영하는 편입니다.오늘은 위 질문에 대한 코드캠프의 의견을 공유해볼까 합니다!주니어 개발자를 꿈꾸시는 분들께 많은 도움이 되었으면 좋겠습니다. 💡 그래서 뭣이 중헌디[ for. 주니어 ][ ❗️ 아래 내용은 프론트엔드 개발자를 기준으로 한 글 입니다. ] 다수의 기업 CTO분들께서 공통적으로 입을 모아 말씀하셨던 부분은 단연코 ' 주니어의 기본기 ' 였습니다." 부트캠프를 수료하고 만드는 방법을 배워 나오는 주니어는 많은데, 본인 언어나 프레임워크를 깊이 있게 아는 사람이 얼마 없어요.그럼 기업 입장에서는 만드는 방법만 배워 나왔나 싶은거죠. "- 모 기업 CTO분의 말씀 이런 말을 들은 코드캠프는 '주니어의 기본기란 무엇에 대한 그리고 어느 정도 깊이까지를 말하는 걸까?'를 고민해봤고, 그 결과 아래와 같은 답을 도출해보았습니다.웹에대한 이해본인 언어에 대한 이해본인이 사용 중인 프레임워크(혹은 라이브러리)에 대한 이해위의 세가지는 선택이 아니라 '필수'일 정도로 너무 너무 중요한 부분입니다.코드캠프는 저 셋 중에서도 많은 분들이 공부하기 까다롭다, 어렵다 하시는 웹에 대해 간단히 다뤄볼까 합니다.그럼 웹은 어느 정도 깊이로 알고 있어야 할까요? 💡웹, 어느 정도 알아야 해요?프론트엔드 개발자가 웹을 알아야 하는 이유는 굉장히 많습니다.하지만 간단히 요약하자면성능 최적화를 위해디테일한 통신/에러 핸들링을 위해프론트엔드 개발자는 다양한 브라우저를 다루기 때문위와 같이 추려 볼 수 있습니다.그럼 프론트엔드는 웹 중에서도 어떤 부분을 중점으로 먼저 봐야 할까요?물론 다 알면 좋지만, 공부하는데 있어 우선순위는 있습니다!프론트엔드 개발자는 웹의 거시적인 구조와 웹 중에서도 브라우저와 네트워크를 알고 있는게 좋습니다.1️⃣ 웹의 거시적인 구조웹의 거시적인 구조는 우리가 흔히 통신하는 구조를 통틀어 웹 구조라고 합니다.웹 구조에 관련된 그림을 하나 볼까요?거시적인 웹의 구조는 생각보다 별거 없습니다.클라이언트와 서버, 그리고 그 둘을 이어주는 네트워크 이 세 개를 묶어서 거시적인 웹구조로 보시면 됩니다.쉽게 말해 통신 과정이 웹의 구조인 셈이죠.주니어 프론트엔드 개발자는 저 웹 구조 중에서도 브라우저와 네트워크에 관련된 기본기가 상당히 중요합니다. 2️⃣ 브라우저와 네트워크의 이해► 여기서 언급하는 개념은 반드시 따로 블로깅 내용 이외에도 따로 더 깊이 공부해야 하는 개념입니다. ◀︎🔴 브라우저의 기본브라우저를 다루는 프론트엔드 개발자가 브라우저에 대한 이해가 없다면, 프로젝트를 만들 수는 있지만 성능을 고려해 제대로 만들기가 어렵습니다.❓브라우저에서 뭘 공부해야 해요?- 렌더링 과정과 , 성능 최적화에 관련된 공부를 하셔야 합니다.렌더링 과정여러분들은 브라우저가 서버로부터 응답 받은 HTML을 어떤 과정을 거쳐 파싱해주는지 알고 계신가요?위의 과정을 Critical Rendering Path(CRP)라고 합니다.CRP는 여러분들이 작성한 코드를 브라우저에 그려주는 과정을 설명한 개념이기 때문에 반드시 알아야 합니다.그 과정에서 브라우저와 관련된 많은 개념을 배울 수 있습니다.성능 최적화브라우저의 역할이 렌더링이 끝일까요?당연히 그렇지 않습니다.데이터를 요청하는 네트워크(HTTP통신)통신도 하며, 이렇게 받아온 데이터를 캐싱을 도와주는 일도 합니다.받아온 데이터를 캐시에 넣어두면 같은 데이터라면 데이터 요청을 하지 않아도 되기 때문에 화면에 렌더 되는게 빨라집니다.이런 디테일한 부분들이 사용자 경험을 향상 시키고, 사용자 경험은 곧 기업의 매출과도 연결되기 때문에 사소한 부분이라도 최적화는 중요합니다.그럼 어떤 부분의 성능을 최적화해야 하나요?[ HTTP 요청 수 줄이기, 이미지 데이터 최적화, 스크립트 파일 최적화, 캐시 최적화 ]가 최적화의 기본이라고 보시면 됩니다.그럼 여러분들은 해당 부분을 공부하시면 좋겠죠?브라우저에서는 이정도를 기본으로 알고 있는 것이 좋습니다.🔴 네트워크의 기본적인 이해우리가 하고 있는 데이터 통신이 바로 네트워크 통신인 건 모두가 알고 있을 것 입니다.그럼 네트워크에 대한 이해는 너무나도 당연하겠죠?네트워크 부분은 상당한 CS적 지식을 요구하고 양도 굉장히 많은 파트 입니다.따라서 네트워크를 정말 깊게 알게 된다면 정교한 데이터 통신 핸들링도 가능한 시니어 정도의 수준을 갖추게 됩니다.하지만 우리는 주니어에게 필요한 수준이 궁금하니까 주니어 수준에 맞춰 공부해야 할 것들을 알려드리도록 하겠습니다.❓네트워크에서는 뭘 공부해야 하나요?- 네트워크 패킷, HTTP/HTTPS 통신 , HTTP 버전에 따른 지원기능, 네트워크 계층 모델네트워크 패킷브라우저의 주소창에 https://codebootcamp.co.kr/ 을 입력하고 엔터를 누르게 되면 어떤 일이 일어나는지 알고 계신가요?주소창에 위의 주소를 입력하고 엔터를 치게 되면 네트워크 통신이 일어나는데요, 네트워크 통신 과정에서 정보를 담아 왔다갔다 하는 친구가 바로 패킷 입니다.즉, 네트워크 통신의 가장 기초가 네트워크 패킷이 되는 것이죠.따라서 네트워크를 공부한다면 가장 먼저 공부해야 하는 개념입니다.네트워크 계층 모델네트워크 통신이 일어나면 패킷이 왔다갔다 한다고 위에서 말씀을 드렸는데요, 이 패킷이 왔다갔다하는 곳이 바로 계층 모델 입니다.옛날에는 OSI라고 해서 7계층이었지만, 현재는 TCP/IP모델이라고 해서 4계층 모델을 사용하고 있습니다.가장 기초인 패킷이 왔다갔다하는 곳이 바로 이 계층 모델이니 이 또한 반드시 공부해야겠죠?HTTP/HTTPS 통신데이터를 주고받는 과정은 HTTP 통신을 통해 이루어 지는데, HTTP 통신의 결과로 어떤 유형의 데이터를 받을 수 있는지 모두 알고 계신가요?우리가 흔히 봐온 JSON데이터 이외에도 받아올 수 있는 데이터가 있습니다.또한 HTTP header에 넣을 수 있는 데이터 종류는 뭐가 있을까요?위의 질문들은 통신에서 가장 중요한 요청과 응답 관련 개념이기 때문에 반드시 알고 있어야 합니다.요청과 응답 관련 내용을 이해한 상태에서 통신 과정을 공부하시면 가장 좋습니다.HTTP 버전에 따른 지원기능여러분들은 HTTP에도 버전이 있다는 점, 알고 계신가요?현재 지원하는 버전은 1.1, 2, 3 버전이 있는데요, 버전에 따라 지원기능이 다른걸 왜 알아야 하냐!2014년도의 HTTP 버전에서의 GET메소드는 바디가 들어갈 수 없었지만, 1.1 버전 부터는 GET메소드에서도 바디를 지원합니다.이 말은 지원하는 기능에 따라 보내줄 수 있는 데이터의 양과,방법이 달라진다는 것 입니다.  오늘은 주니어라면 이정도는 기본기로 알고 있는 것이 좋다! 하는 개념에 관련해서 블로깅을 해보았는데요.어떠셨나요?어떤 분은 너무 쉬운데? 라고 생각하실 수 있지만, 여기에 적힌 개념은 정말 몰라서는 안된다 하는 내용입니다.따라서 더 많이 공부를 해주셔야 합니다.다음 블로깅에서는 주니어의 기본기에 대해 조금 더 자세히, 개념에 대해 다뤄볼 예정입니다.코캠과 함께 공부 할 싸람~!(없으면 저 혼자 앞질러 갑니다. 오히려 좋아)그럼 우리는 다음 글에서 브라우저에 관한 내용으로 만나요!

웹 개발브라우저네트워크클라이언트서버통신최적화캐시웹구조

감자

컴퓨터 네트워크 강의를 준비중입니다.

안녕하세요 "그림으로 쉽게 배우는 컴퓨터공학" 커리큘럼을 만들고 있는 감자입니다!지금까지 제가 만들어 온 모든 강의에서는 여러분의 이해를 돕기 위해 그림을 이용해 설명해 드렸습니다.그런데, 지금 제가 준비하고 있는 강의는 네트워크 강의로 물리적인 장치의 이해까지 필요합니다.보통 전공 수업에선 이론적인 내용 위주로 설명하므로 여러분의 컴퓨터에서 데이터가 실제로 어떻게 이동하는지 직관적으로 알기는 어렵습니다.따라서 네트워크의 이론적인 내용과 물리적인 흐름을 모두 쉽게 이해할 수 있도록 강의 방식을 업그레이드 해보려 합니다.저로서도 새로운 도전이니 여러분들이 많이 응원해주시고 피드백 주시면 좋겠습니다. 😄(가정집 내에 있는 통신단자함 내부)저는 여러분이 인터넷을 사용할 때에 여러분의 집에 있는 통신단자함부터 건물의 통신실, 통신사, 서버까지로 데이터가 어떻게 이동하는지 시각화해 직관적으로 보여드리고 싶었습니다.하지만 기존의 강의 방식으로는 이러한 흐름을 보여드리기에 한계가 있었습니다.(사진과 그림만으로 이러한 것들을 설명하려니 만족스럽지 않았습니다)그래서 저는 여러분에게 직관적으로 전달할 수 있는 가장 좋은 방법이 뭘까 이리저리 고민하다가 3D 모델을 이용해 보기로 했습니다.(서울에는 내 빌딩이 없지만 3D세상에서는 구글빌딩이 내꺼🤗)3D 모델링을 하면서 굉장히 재밌게 준비했습니다.여러분들에게 가장 효율적으로 설명해 드릴 수 있다는 생각에 두근거리기도 해요!이제 준비한 내용으로 네트워크 강의를 열심히 만들어보겠습니다.많이 기대해주세요 😀 (시중에서 팔지 않는 제품도 3D 모델링이면 자세하게 소개할 수 있습니다)

개발 · 프로그래밍 기타네트워크3D모델링그림으로쉽게배우는컴퓨터공학CS컴퓨터공학

왜 CS 전공지식은 ‘개발자 기본기’로 꼽힐까?

컴퓨터 구조, 자료구조, 알고리즘, 운영체제, 네트워크, 데이터베이스 등은 컴퓨터공학 및 컴퓨터과학, 소프트웨어공학 등의 전공에서 반드시 배우는 주제로 꼽힙니다. 학교나 학과마다 커리큘럼에 차이는 있더라도 내용 자체는 모두 동일한 개념을 배우게 되는데요.이러한 CS 전공 지식은 컴퓨터 관련 학과에서의 전공 이해를 좌우할 뿐만 아니라, 개발자 채용을 위한 기술 면접 과정에서 주로 검증하는 핵심 개념이기도 합니다. 가령 서비스 개발자라면 비즈니스 로직을 구축하는 등, 프로그램의 구조를 만들고 문제를 해결하는 바탕이 되기 때문입니다. 이미 실무에 진출한 개발자들조차도 CS 전공 지식을 강조하는 이유가 여기에 있죠.다시 말해 CS 전공 지식은 개발자로서 필요한 문제 해결 역량을 결정하는 기본기 역할을 합니다. 대학생, 취업 준비생, 주니어 개발자 등을 막론하고 실력 있는 프로그래머가 되기 위한 든든한 뿌리가 필요하다면 CS 전공 지식에 주목해야 합니다.•••기술 면접 전, 실무 프로젝트 전 빠르게 기초를 정리하고 싶으신가요?지금 인프런 프리즘 [CS 전공 지식 로드맵]을 통해 학습해보세요. https://www.inflearn.com/roadmaps/643•••인프런 프리즘 브랜드 스토리 읽어보기 >>

개발 · 프로그래밍 기타CS전공지식컴퓨터구조알고리즘자료구조운영체제네트워크데이터베이스컴퓨터공학인프런프리즘InflearnPrism

Jason

(구체적으로) 웹 사이트에 접속하기까지 무슨일이 일어날까?

안내:단순하게 dns에서 도메인을 ip로 변환하여 그 ip를 이용해 웹 사이트에 접속한다 식의 간단한 설명이 아닙니다.이해를 돕기 위해 실제 상황과는 다른 요소가 있을 수 있습니다.(데이터 처리 위치 등) 들어가기 전에 아래 내용을 눈으로 잘 익혀주시면 글을 이해하는 데 큰 도움이 될 수 있습니다.인터넷 네트워크 세상에서는 상대와 1대1로 통신하기 위해서는 2가지 주소(IP & MAC)를 알아야 합니다.IP 주소를 이용해 기기를 찾고자 한다. -> 라우터라는 기기는 해당 IP를 가진 컴퓨터를 찾기 위해 어느 라우터를 향해 가야 하는 지(또는 통해 가야 하는 지) 알고 있다.MAC 주소를 이용해 기기를 찾고자 한다. -> 스위치라는 기기는 자신이 담당하는 해당 MAC을 가진 컴퓨터가 정확히 어디 연결되어 있는 지 알고 있다.1대1로 정확히 통신하기 위해서는 두 컴퓨터가 모두 유효한 두 주소를 가지고 있어야 합니다.    여러분은 inflearn.com에 접속하려 합니다. 먼저 컴퓨터를 켜야겠죠?여러분은 컴퓨터의 전원을 올렸습니다. 저런, 여러분의 컴퓨터는 고정 ip를 가지고 있지 않습니다.~ 통신사가 여러분의 컴퓨터가 필요할 때마다 동적으로 ip 주소를 빌려주는 사설 ip를 사용해야 하는군요.그나마 다행히 mac 주소는 여러분의 컴퓨터를 출고할 때부터 메인보드의 네트워크 카드에 각인되어 있어서 따로 건드릴 것은 없네요. 사설 ip를 사용하기 때문에 방금 막 켜진 컴퓨터는 DHCP.exe를 실행시킵니다.(물론 고정ip를 가지고 있어도, 컴퓨터가 자신과 가장 가까이 있는 라우터 장비를 찾기 위해 실행될 수 있습니다.) DHCP.exe의 목적은 자신과 연결되어 있는 라우터라는 장비의 정보와, 도메인을 ip 주소로 변환해주는 dns 서버의 정보를 보내주며, 유동ip를 사용해야 하는 컴퓨터에게 ip를 할당해주는 서버와 통신하고 그 정보를 컴퓨터에 저장하는 역할입니다.그래서 DHCP.exe는 DHCP 서버를 찾아야 합니다.근데 우리의 컴퓨터는 현재 ip 및 DHCP, 라우터 정보가 아무것도 없습니다. 이럴 때에는 무식한 방법만이 해결책이 될 수 있습니다.  아무 기기에게나 '당신이 DHCP 서버입니까?'라고 물어봅니다. 진짜로 이렇게 물어봅니다. 상황별, 네트워크 기기별로 약간씩 다르지만 DHCP 과정이 일어날 때는 여러분의 컴퓨터가 인터넷을 이용하기에는 아직 미성숙(?)한 상태이기 때문에 해당 과정과 관련된 모든 요청과 응답은 LAN 전체에 전파되도록 되어있습니다.물론 LAN 영역 전체에 요청과 응답을 할 때는 다음 제약 사항이 있긴 합니다.같은 Lan 영역 안에서만 물어봅니다. 다른 LAN 영역 친구들은 무슨 일이 일어나는 지 모릅니다. 보통의 경우 dhcp 서버는 같은 lan 영역 안에서 무조건 찾을 수 있습니다.물어볼 때 형식을 지켜 물어봅니다. 아래 가로 줄은 그 형식의 구체적인 부분을 이야기하고 있기 때문에 건너뛰어도 좋습니다.요청을 보내기 위해 작성하는 형식은 일종의 택배 상자와 같습니다. 보내는 사람, 받는 사람, 택배 무게 등이 택배 상자에 적혀있죠. DHCP 서버를 찾는 상황에서는 3번의 포장 과정을 거치게 됩니다. 이 포장 과정을 마쳐야 전송할 수 있게 됩니다.가장 먼저 실행되는 UDP.exe는 DHCP 요청이라는 문서를 포장합니다.초록색은 택배 내용물, 나머지는 택배 송장이라고 생각하시면 됩니다.여기에서 포트라는 생소한 개념이 등장합니다.포트는 UDP.exe 파일이 구체적으로 무얼 해야 하는 지 알려주는 역할입니다.DHCP 서버는 67번(이 상황에서는 받는 컴퓨터의 포트에 들어가겠지요),여러분의 컴퓨터는 68번(이 상황에서는 보내는 컴퓨터의 포트에 들어가겠지요)을 적어넣어주시면 됩니다.67, 68번 포트처럼 미리 지정되어 있는 경우도 있고, 간혹 비어 있는 포트는 사용자 지정 작업을 수행하게 구성할 수 있습니다. 그다음 IP.exe가 실행됩니다.ip 주소를 이용해 앞에서 포장한 udp 택배를 포장합니다.앞서 포장한 택배를 물류 센터에서 처리할 수 있게끔 다시 포장합니다.여기서 앞서 나온 UDP 택배와 크게 다른 점은, 택배가 분리될 수 있다는 겁니다.인터넷 세계에서는 택배가 너무 커서 다른 택배들이 처리되는 것을 방해하는 것을 경계합니다.네트워크마다 받아들일 수 있는 택배 크기가 다르다면, 택배가 분리됩니다.그리고 ip 택배는 송장에 내용물을 처리하기 위해 어떤 exe를 실행시켜야 되는가도 적습니다. 우리의 UDP를 처리하기 위해서는 17을 적어주면 됩니다. 17이 적힌 택배가 오면 UDP.exe를 실행시키라는 뜻입니다.마지막으로 보내는 쪽 ip와 받는 쪽 ip를 적습니다. 현재 여러분의 컴퓨터는 ip 주소가 없는 상태이기 때문에 0.0.0.0을 적고, DHCP의 ip 주소를 모르기 때문에 lan 영역 전체로 택배를 보내는 255.255.255.255를 받는 컴퓨터의 ip 주소로 적습니다.마지막에는 아까 포장해둔 UDP 택배를 잘 넣어둡니다. 그다음 이더넷.exe가 실행됩니다.이더넷 택배로  ip 택배를 포장합니다. 이더넷 택배는 구체적으로(몇 동 몇 호) 어디로 가야하는 지 알려줍니다.택배 송장에 제일 먼저 이것은 이더넷 택배이므로 이더넷.exe가 처리해야 한다는 것을 알려줍니다.그다음에는 받는 컴퓨터와 보내는 컴퓨터의 MAC 주소를 적어줍니다. 스위치라는, 여러분 집 어딘가 거실 또는 지하에 묻혀있을 수 있는 네트워크 장비는, MAC 주소를 통해 정확하게 지정된 컴퓨터로 택배를 보내줍니다.보내는 컴퓨터의 MAC 주소에는 여러분 컴퓨터 MAC 주소를 넣어줍니다.받는 컴퓨터의 MAC 주소에는 LAN 전체에 보내라는 FF:FF:FF:FF:FF:FF를 넣어줍니다.그다음 송장에 적힌 내용은 이더넷 택배를 열고 어떤 exe를 실행시켜야 되는가 입니다. ip.exe를 실행시키기 위해서는 0x0800을 적어두면 됩니다.마찬가지로 마지막에는 아까 포장해둔 UDP를 포장해둔 IP를 잘 넣어줍니다.  아무에게나 막 요청을 뿌리고 다닌 끝에 응답이 돌아왔습니다.DHCP 서버는 응답으로 여러분의 컴퓨터가 사용할 수 있는 IP 주소를 제시해줍니다.(물론 이 과정에서도 응답을 보내는 DHCP 서버는 열심히 택배 포장을 합니다) 여러분의 컴퓨터는 이 DHCP 서버에게 '당신이 보내준 제안을 받아들이겠다'라는 택배를 보냅니다.그리고 DHCP 서버는 마지막으로 정보를 업데이트(컴퓨터에게 제시한 IP를 컴퓨터가 승인하여 사용 중)하고 처리를 끝내게 됩니다. 마지막 요청에서 기본 게이트웨이(라우터)의 IP 주소와 DNS 서버의 IP 주소 등 네트워크를 본격적으로 이용하기 위해 필요한 정보를 보내주게 됩니다.바로 DHCP 서버가 해당 IP 주소를 사용하라고 통보하는 방식을 사용할 수 있겠지만, 굳이 두 컴퓨터가 합의의 과정을 거치는 이유는 한 Lan 영역 안에 반드시 하나의 DHCP 서버가 존재한다는 보장이 없기 때문입니다. 물론 우리는 이상적인 상황을 가정하므로 그냥 넘어가겠습니다.이 과정에서 많은 시스템-dhcp서버가 아닌 근처, 즉lan에 있는 다른 컴퓨터-에 필요 없는 요청이 가게 됩니다.   그런데 말입니다.DHCP로부터 할당받은 IP 주소가 10.x.x.x 로 되어 있네요~?해당 주소는 사설IP에 사용되는 주소로, 외부(LAN 밖)와 소통하기 위해서 반드시 거치는 기본 게이트웨이(라우터)가 약간 지능적으로 나와줘야 합니다.한 LAN 영역 안에 있는 기기들은 다른 LAN 영역으로 택배를 보낼 때 라우터의 ip 주소로 대신하여 보내게 됩니다. 물론 lan 안에서 서로 다른 기기들의 요청을 구분하기 위해 라우터가 포트 번호로 구분하여 요청을 보내고, 응답을 나누어 줍니다.복잡하지만, 인류가 사용하기에는 숫자가 너무 적은 ipv4 주소를 아낄 수 있는 좋은 방법이기 때문에 많이 사용됩니다.  DHCP.exe는 최종적으로 종료되었으며, 여러분은 이제 브라우저를 켜게 됩니다.브라우저에 http://inflearn.com을 입력하셨군요.좋아요. 이제 여러분의 화면에 inflearn을 띄우기 위한 여정을 시작해 봅시다. 아마 위에서 보았겠지만, 외부와 통신하기 위해서는 기본 게이트웨이를 거치게 됩니다. 그리고 DNS 서버에게 요청을 보내 inflearn의 ip 주소를 알아올 수 있지요. DHCP 서버는 우리에게 기본 게이트웨이와 dns의 IP 주소를 알려주었고요. 그러나 완전한 통신을 하기 위해서는 ip주소와 mac 주소가 필요합니다.즉, dns와 기본 게이트웨이의 mac 주소를 찾아야 합니다! 이때 사용하는 프로그램은 ARP.exe입니다. 여담 exe들은 각각 자신과 동급인 것들로 나눌 수 있습니다.이렇게 동급인 것들로 나누면 총 7개의 분류가 완성되며, 고급지게 표현하면 이것이 OSI 7계층 모형입니다.7층에서 만들어진 택배를 외부로 보낼려고 하면 6층, 5층, 4층, 3층, 2층, 1층에서 순서대로 포장을 하게 됩니다.7층 exe로 유명한 것이 HTTP입니다.아까 보았던 UDP.exe는 4층입니다. 다른 4층으로는 TCP.exe가 있습니다.IP.exe는 3층이고, 이더넷.exe는 2층입니다.IP 주소는 3층 송장에 적고, MAC 주소는 2층 송장에 적는다는 것을 알 수 있죠.1층은 실제 전선을 따라 이동하는 비트들에 대해 다루므로 여기에서는 다루지 않겠습니다.또한 반이중, 전이중 통신을 담당하는 5층과 인코딩과 디코딩을 다루는 6층 또한 생략하도록 하겠습니다.한편 지금 알아볼 ARP.exe는 2층이냐 3층이냐 논쟁이 있습니다. 서적과 인터넷 문서에서는 작성자의 취향(?)에 따라 2층, 3층 중 하나로 표기하고 있습니다.여기에서는 이 논쟁은 다루지 않도록 하겠습니다.ARP.exe는 택배 포장을 합니다.택배 내용은, 해당 ip 주소를 가지고 있는 컴퓨터는 컴퓨터의 MAC 주소를 나에게(내 컴 MAC 주소로) 보내달라는 의미를 담고 있습니다.당연히 LAN 영역 전체에 보내도록 되어 있습니다.... 열심히 택배를 보낸 끝에 기본 게이트웨이(라우터)가 우리의 요청에 응답하였군요. 이 응답을 통해 우리는 기본 게이트웨이로 완전한 1대 1 통신을 할 수 있게 되었습니다.  이제 DNS 서버와 통신을 하여서, inflearn.com의 IP 주소를 알아와야 합니다.마찬가지로 DNS 서버의 MAC 주소를 알아올려고 합니다.그러나 일반적으로 DNS 서버는 LAN 영역 밖에 있습니다. arp 택배가 유효하게 전송될 수 있는 곳은 여러분의 컴퓨터가 속해 있는 LAN 영역 안인데 어떡해야 할까요?   여러분의 컴퓨터는 이 상황을 신경쓰지 않아도 됩니다.왜냐고요? LAN 외부 영역과의 통신은(택배 주고받기는) 기본 게이트웨이가 해주기 때문입니다.같은 LAN 영역이 아닐 때에는 IP 주소만 제대로 적고, MAC 주소에는 아까 ARP.exe 프로그램을 실행시켜서 알아온 기본 게이트웨이의 mac 주소를 적어주면 됩니다. 기본 게이트웨이가 목적지 MAC 주소로 적혀 있으면 스위치는 택배를 기본 게이트웨이로 전달합니다. 기본 게이트웨이(라우터)는 다음 라우터에게 이 택배를 보낼 때, 마찬가지로 목적지 MAC 주소에는 다음 라우터의 MAC 주소를 적어줍니다. 이러한 과정이 통신하고자 하는 대상이 있는 LAN 영역의 기본 게이트웨이에 도착할 때까지 지속됩니다. 마지막으로 이제 목적지 MAC 주소에 그 대상의 MAC 주소가 들어가게 되고(그쪽 컴퓨터 또는 라우터에서도 ARP.exe가 잘 작동한다면요), 그쪽 영역의 스위치가 최종적으로 택배를 전달해주게 됩니다.  우선 우리의 컴퓨터는 스터브리졸버.exe를 실행시킵니다..스터브리졸버.exe는 UDP.exe를 실행시켜 53번 포트로 설정하고 질의문을 작성합니다.inflearn.com의 주소를 알려주십시오.마찬가지로 UDP 택배는 IP.exe, 이더넷.exe를 실행시켜 순차적으로 포장되고, DHCP 서버가 알려준 DNS 서버의 IP주소를 향해 택배를 보내게 됩니다.  DNS 서버에 택배가 잘 도착하였군요.놀랍게도 이 DNS 서버는 inflearn.com의 IP 주소를 모릅니다.단지 inflearn.com의 IP 주소를 찾는 일을 대행해주는 일을 하는 것뿐입니다. DNS 서버가 이 일을 할 때 사용하는 프로그램을 폴리졸버.exe라고 하겠습니다. 폴리졸버.exe는 ICANN의 루트 서버에게 먼저 질의 요청을 보냅니다. 내용은 스터브리졸버.exe가 DNS 서버에 보낸 것과 동일합니다. ICANN은 국제인터넷주소관리기구로 여러분이 인터넷 세상에서 도메인을 사용하고 싶다면 복종해야 되는 비영리 기관입니다. 다양한 도메인 등록 대행사들은 ICANN의 승인과 검증을 거치게 됩니다. 전세계 각지에 배치되어 있는 ICANN 루트 서버는 폴리졸버.exe가 보낸 요청에 대해 com 도메인을 관리하는 서버의 IP 주소를 알려주고 여기에다가 물어보라고 응답해줍니다. 폴리졸버.exe는 다시 com 도메인 관리 서버에 질의 요청을 보냅니다.com 도메인 관리 서버는 응답으로 inflearn.com을 관리하는 DNS 서버의 IP 주소를 알려줍니다. 마지막으로 폴리졸버.exe는 com 도메인 관리 서버가 알려준 서버에 질의를 하고, 그 결과를 스터브리졸버.exe로 전달을 해줍니다. 이제 우리는 inflearn.com의 IP 주소를 얻어오게 되었습니다! 참고로 폴리졸버.exe는 이제 inflearn.com의 IP 주소를 일정 시간 동안 저장해두면서 다른 곳에서 요청이 왔을 때 바로 응답해주게 됩니다.    이제 외부와의 통신과 관련된 부분은 끝났으니, 이 글의 하이라이트인 http 관련 내용이 시작되겠습니다.👏먼저 TCP.exe가 실행이 됩니다. 앞서 말한 듯이 UDP와 같은 층인 4층 프로그램입니다. TCP 택배는 항상 외부로 나가기 전에 IP와 이더넷으로 포장된다는 것을 잊지 마세요!TCP는 UDP와 달리 안정적인 통신을 우선합니다. 통신을 하는 양쪽이 통신을 완전히 준비하는 것을 확인한 상태에서 통신을 진행하는 것이죠.tcp 택배에서 udp에서 보이지 않았던 부분들이 있습니다.시퀀스 번호는 택배 내용물이 많아 택배가 분리될 때, 분리된 것에 몇 번째인가를 나타내주는 부분입니다. tcp의 경우 tcp 포장 단계에서 미리 택배를 분리하게 됩니다. 택배가 분리될 때에는 분리된 각 택배에 송장이 각각 생기죠. 이때 각 송장에 시퀀스 번호가 순서대로 들어가게 됩니다. 이는 UDP보다 훨씬 더 큰 안정성을 가질 수 있게 해줍니다. 택배의 목적을 통해 tcp.exe가 구체적으로 무엇을 해야 하는 가를 알 수 있습니다. 택배의 목적에는 SYN, ACK, FIN 등이 들어갑니다. 여러분의 컴퓨터의 TCP.exe는 서버와의 통신에서 안정성을 확보하기 위해 다음 과정을 거칩니다.여러분의 컴퓨터에서 택배의 목적에 SYN이 적힌 TCP 택배를 보냅니다. SYN은 연결을 허용해도 되는 가를 물어보는 역할을 합니다. HTTP 연결을 하려면 받는 컴퓨터의 포트는 80으로 넣으면 됩니다.서버는 SYN 요청에 응답하기 위해 택배의 목적에 ACK를 넣어서 보냅니다. 또한 서버는 여러분의 컴퓨터를 향해 SYN 패킷을 보냅니다.여러분의 컴퓨터는 서버가 보낸 SYN에 대한 응답으로 ACK를 보내고, 연결 시작을 완료합니다.이제 처리해야 되는 데이터를 가진 TCP 택배를 자유롭게 보내면 됩니다. 큰 데이터가 분리되어도 다시 합칠 수 있고, 중간에 택배가 손상되어도 택배를 다시 달라고 해서 안정성을 가질 수 있게 됩니다.   이제 여러분은 http 연결을 완료한 겁니다.(정확히는 http 메시지를 주고받을 수 있는 준비가 완료된 것이죠)보안 향상을 위해 사용하는 https의 경우, tcp를 통해 통신 준비를 한 뒤, tls라는 것을 이용해 암호화 준비 과정을 거치게 됩니다. 이 과정은 생략하도록 하겠습니다.이제 여러분의 컴퓨터의 브라우저는 inflearn 서버를 향해 GET 요청을 보내게 됩니다.(택배 포장을 하게 됩니다. http 요청을 tcp 택배 안에 넣고, ip 택배 안에 이 tcp 택배를 넣고, 이더넷 택배에 ip 택배를 넣고,,,,)  http에서 요청 명령을 분리하는 방법은 줄 바꿈 문자를 사용하는 것입니다.GET 요청은 다음과 같은 문자열들을 넣어서 보냅니다. 줄 바꿈 문자를 사용해 각 명령을 구분하지요.GET / HTTP/1.1HOST: inflearn.com 인프런 서버의 응답은 다음과 같을 겁니다.HTTP/1.1 200 OKDATE: 지금 날짜와 시각Server: node.js(Express) 어쩌고Content-Length: 응답 크기(용량)Content-type: text/html<HTML>어쩌고 저쩌고................</HTML> 이 응답을 받은 웹 브라우저는 여러분에 인프런 메인 페이지를 보여 줄 겁니다. 아직 안 끝났습니다. 여러분은 인프런 메인 페이지에서 오랜 시간 아무것도 안하고 그냥 보고 계시는군요. 컴퓨터는 불필요한 TCP 연결 통로를 해지할 겁니다.여러분의 컴퓨터는 택배의 목적에 FIN을 넣어서 보내줍니다. TCP 연결을 종료하겠다는 의미입니다.서버는 종료에 대한 확인의 ACK 택배를 보냅니다. 그리고 서버도 FIN 택배를 보냅니다.마지막으로 여러분의 컴퓨터가 서버의 FIN에 대한 응답으로 ACK를 보내고, 연결을 종료하게 됩니다.  3줄 요약컴터를 키면 LAN 안에 있는 DHCP 서버를 찾아서 네트워크 기본 정보를 받아온다.기본 게이트웨이 라우터의 도움을 받아 DHCP 서버가 알려준 DNS 서버에 도메인의 ip 주소를 물어본다.기본 게이트웨이 라우터의 도움을 받아 DNS 서버가 알려준 ip주소로 tcp 연결을 하여 안정성을 확보하고 http 데이터를 교환한다.   다루고 싶었지만 분량 상의 문제, 전문 지식 부족의 문제로 다루지 못한 것들이 많았습니다. HOP, 서브넷마스크, Time To Live, Tls, BGP, IPv6 등등...또한 실제 운용 환경에서는 생각 이상으로 많은 경우들을 만나야 하기 때문에 단순히 서적을 참고하는 것만으로는 작성하는 데 어려움이 있었던 것 같습니다. 와이어샤크로 시작하는 데이터분석! 이쪽분야 고인물들 보면 참 부럽습니다......실제와 미묘하게 다른 부분이 있음에도 맥락적 이해를 돕고자 실제와 살짝 다르게 작성해놓은 것도 있으니 양해를 구하며, 네트워크 관련 전문 지식을 습득하고자 하시는 분들은 꼭 RFC 문서를 참고하시길 권장드립니다.이 글을 보시는 분들께 조금이라도 도움이 되었다면 감사하겠습니다.어려운 용어들의 최대한 사용을 자제하였지만, 글에서 다룬 내용 중 추가적으로 더 알아보실 분들은 다음 키워드로 찾아보시면 되겠습니다.프로토콜RFC 문서패킷 포맷브로드캐스트, 유니캐스트NAT패킷패킷 헤더권한이 있는 DNS 서버, 권한이 없는 DNS 서버DNS 재귀적 질의, 비재귀적 질의      

네트워크네트워크tcpudpipdnsweb웹서버브라우저arp

빠타박스

면접을 위한 CS전공지식 노트 [ 운영체제와 컴퓨터 ]

1. 운영체제와 컴퓨터3.1.1운영체제의 역할CPU 스케쥴링과 프로세스 관리CPU 소유권을 어떤 프로세스에 할당 할지프로세스의 생성과 삭제자원 할당 및 반환 관리메모리 관리한정된 메모리에 어떤 프로세스를 할당해야 하는지디스크 파일 관리디스크 파일을 어떠한 방법으로 보관 할지I/O 디바이스 관리마우스, 키보드 와 컴퓨터간에 데이터를 주고 받는 것을 관리구조유저 프로그램 < GUI = 시스템 콜 = 커널 = 드라이브 < 하드웨어— GUI, 시스템 콜, 커널, 드라이브 ) 운영체제GUI가 없고 CUI만 있는 리눅스GUI : 사용자가 전자 장치와 상호 작용 하는 사용자 인터페이스의 형태, 단순 명령창이 아닌 아이콘을 마우스로 클릭하는 단순 동작으로 컴퓨터와 상호작용드라이버 : 하드웨어를 제어하기 위한 소프트웨어CUI : 그래픽이 아닌 명령어로 처리하는 인터페이스시스템 콜운영 체제가 커널에 접근하기 위한 인터페이스유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출 할 때 쓴다.유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인 후 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행된다.이 때 유저 모드에서 파일을 읽지 않고 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행한다. - 이 과정을 통해 컴퓨터 자원에 대한 직접접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호할 수 있다.I/O요청 : 입출력 함수, 데이터베이스, 네트워크 파일 접근 등에 관한 일메모리(프로세스, 스레드) ⇒ 시스템 콜 ⇒ 커널 ⇒ OS프로세스나 스레드에서 운영체제로 어떠한 요청을 할 때 시스템콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달 된다.시스템 콜은 하나의 추상화 계층시스템 콜을 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고, 프로그램을 구현할 수 있는 장점이 있다.modebit시스템 콜이 작동될 때 modebit을 참고해서 유저 모드와 커널 모드를 구분한다.I 또는 0의 값을 가지는 플래그 변수카메라, 키보드 등 I/O 디바이스는 운영체제를 통해서만 작동해야 한다.ex) 카메라를 켜는 프로그램 → 만약 유저모두를 기반으로 카메라가 켜진다면, 사용자가 의도하지 않았는데 공격자가 카메라를 갑자기 켤 수 있는 등 나쁜 짓을 하기가 쉽다. 물론 커널 모드를 거쳐 운영체제를 통해 작동한다고 해도 100% 막을 수는 없지만, 운영체제를 통해 작동하게 해야 막기가 쉽다.이를 위한 장치가 modebit이다.modebit의 0은 커널모드 , 1은 유저 모드라고 설정한다.유저 프로그램이 카메라를 이용하려고 할 때 시스템 콜을 호출하고 modebit을 1에서 0으로 바꾸며 커널 모드로 변경한 후 카메라 자원을 이용한 로직을 수행한다. 이후 modebit을 0에서 1로 바꿔서 유저모드로 변경하고 이후 로직을 수행한다.유저 모드 : 유저가 접근할 수 있는 영역, 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드커널 : 운영체제의 핵심, 시스템콜 인터페이스를 제공한다, 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O요청 관리 등 운영체제의 중추적인 역할 수행3.1.2 컴퓨터의 요소컴퓨터CPU, DMA컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져있다.CPU(Central Processing Unit)산술 논리 연산 장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행하는 일꾼관리자 → 커널 → HDD or SSD,(프로그램) → 메모리(RAM) 프로세스 < = > 일꾼관리자 역할을 하는 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 일꾼인 CPU가 이를 처리한다.제어장치 (CU, Control Unit)프로세스 조작을 지시하는 CPU의 한 부품입출력장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다.레지스터CPU안에 있는 매우 빠른 임시기억장치CPU와 직접 연결되어 있으므로 연산 속도가 메모리보다 수십 배에서 수백 배 까지 빠르다.CPU는 자체적으로 데이터를 저장할 방법이 없기에 레지스터를 거쳐 데이터를 전달한다.think. 그럼 레지스터에 저장되고, CPU로 보내기에 이전 데이터도 잠시 머무를 수 있어서 빠르게 불러 올 수도 있고, 저장 장치 이기에, 이미 처리된 데이터가 저장되어서 미리 빠르게 불러 들일 수 있을 것같다.?산술논리연산장치(ALU, Arihmetic Logic Unit)덧셈, 뺄셈, 같은 두 숫자의 산술 연산과 배타적 논리합, 논리곱 같은 논리 연산을 계산 하는 디지털 회로CPU의 연산처리제어장치, 레지스터, 산술논리연산장치를 통해 연산하는 예시제어장치가 메모리에 계산할 값을 로드한다, (레지스터에도 로드한다)제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.제어장치가 계산된 값을 다시 레지스터에서 메모리로 계산한 값을 저장한다.인터럽트어떤 신호가 들어왔을 때 CPU를 잠깐 정지시키는 것발생종류키보드, 마우스, 등 I/O 디바이스로 인한 인터럽트0으로 숫자를 나누는 산술 연산에서의 인터럽트프로세스 오류인터럽트가 발생되면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서인터럽트 핸들러 함수가 실행된다.인터럽트 간에는 우선순위가 있고 우선순위에 따라 실행되며,인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트 로 나뉜다.**하드웨어 인터럽트**키보드를 연결하다거나, 마우스를 연결하는 일 등의 I/O 디바이스에서 발생하는 인터럽트인터럽트 라인이 설계된 이후 순차적인 인터럽트 실행을 중지하고 운영체제에 시스템콜을 요청해서 원하는 디바이스로 향해 디바이스에 있는 작은 로컬 버퍼에 접근하여 일을 수행한다.**소프트웨어 인터럽트**트랩(trap)이라고도 한다,프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발동한다.DMA 컨트롤러I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치CPU에만 너무 많은 인터럽트 요청이 들어오기 때문에 CPU 부하를 막아 주며, CPU의 일을 부담하는 보조 일꾼이라 보면 된다.하나의 작업을 CPU와 DMA컨트롤러가 동시에 하는 것을 방지한다.메모리전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치RAM(Random Access Memory)를 메모리라 한다.CPU는 계산을 담당하고 메모리는 기억을 담당한다.비유 :CPU는 일꾼, 메모리는 작업장, 작업장의 크기가 곧 메모리의 크기작업장이 클수록 창고에서 물건을 많이 가져다 놓고 많은 일을 할 수 있듯이메모리가 크면 클수록 많은 일을 동시에 할 수 있다.타이머몇 초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간제한을 다는 역할시간이 많이 걸리는 프로그램이 작동할 때 제한을 걸기 위해 존재한다.디바이스 컨트롤러(Device Controller)컴퓨터와 연결되어 있는 I/O 디바이스들의 작은 CPU

게임 프로그래밍네트워크운영체제CS코딩게임개발it

코파

웹, 웹 서버 및 WAS, SPA, SSR과 CSR, SSL/TLS

목차애플리케이션웹과 브라우저웹 표준서버와 클라이언트웹 서버와 웹 애플리케이션 서버 (WAS)Static Site GeneratorSingle Page Application (SPA)Server Side Rendering (SSR)와 Client Side Rendering (CSR)SSL(Secure Sockets Layer)과TLS(Transport Layer Security)TLS 핸드셰이크 애플리케이션운영체제(OS, Operating System) 위에 설치되어 운영체제의 도움을 받아 실행되는 응용 소프트웨어 웹과 브라우저웹(Web)World Wide Web의 줄임말인터넷을 통해 전 세계적으로 연결된 문서들의 집합을 의미함.이러한 웹 문서들은 HTML, CSS, JavaScript 등의 웹 기술로 작성되어 있음. 브라우저(Browser)웹을 사용자에게 표시해주는 소프트웨어브라우저는 사용자가 URL을 입력하거나 링크를 클릭하면 해당 웹페이지를 서버에서 가져와서 렌더링하고, 사용자가 읽을 수 있도록 화면에 표시함.사용자가 웹페이지와 상호작용할 수 있도록 링크를 클릭하거나 폼을 작성하는 등의 기능을 제공함.웹 개발자들이 작성한 코드를 서버로부터 받아오고, 그것을해석해서 모두가 이해할 수 있도록 시각화함.예) Google Chrome, Mozilla Firefox, Microsoft Edge, Apple Safari 등이렇게 웹과 브라우저는 매우 밀접한 관련이 있다. 웹 표준웹은 전 세계의 많은 사람들이 이용하기 때문에 사용자의 환경에 구애받지 않고 같은 내용을 보여주는 것이 중요함.이를 위해서 운영체제나 브라우저에 상관없이 웹 페이지의 내용을 일정하게 만들도록 하는 지침인 웹표준을 정해 웹 개발자들이 따르도록 해놓음. 서버와 클라이언트웹을 구성하는 주요 구성 요소 중 하나웹의 초기 형태는 정적인 웹 페이지를 제공하기 위한 서버-클라이언트 구조로 구상되었다.서버 : 웹 페이지를 저장하고, 클라이언트에게 요청에 따라 해당 페이지를 전송하는 역할을 수행클라이언트 : 웹 페이지를 요청하고 받아와서 웹 브라우저를 통해 표시함. 웹 서버와 웹 애플리케이션 서버 (WAS)WAS (Web Application Server) 등장 배경웹 페이지를 단순히 저장하고 제공하는 웹 서버가 개인화된 요구사항에 부합하기 어려운 상황(결제시스템, 쇼핑몰 등)에서, HTML을 동적으로 생성하고 사용자 요구에 따라 페이지를 구성하는 서버가 필요해졌음. 이를 웹 애플리케이션 서버(WAS)라고 함.WAS는 개인화된 요구사항을 충족시키기 위해 동적 콘텐츠 생성 및 제공, 데이터베이스와의 상호작용, 사용자 인증 및 세션 관리 등 다양한 기능을 수행함.이러한 기능 덕분에 WAS는 단순한 웹 서버와 구별되며, 사용자 요구에 맞게 동적으로 웹 페이지를 생성하고 제공할 수 있음.현재 WAS는 더 이상 단순히 웹 서버의 역할만을 수행하지 않고, 웹 서버의 기능까지 통합하여 더욱 효율적인 서비스를 제공함. 웹 서버와 웹 애플리케이션 서버 비교이미지 출처 : https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html 웹 서버와 웹 애플리케이션 서버를 분리해야 하는 이유서버 부하 방지: 웹 애플리케이션 서버(WAS)와 웹 서버를 분리하여 서버 부하를 줄여야 함. WAS는 데이터베이스 조회 및 복잡한 로직 처리와 같은 작업에 집중하고, 간단한 정적 컨텐츠는 웹 서버에서 처리하는 것이 효율적임. WAS가 정적 컨텐츠까지 처리하면 서버 부하가 증가하고 응답 속도가 저하될 수 있음.보안 강화: SSL 암호화 및 복호화 처리를 위해 웹 서버를 활용할 수 있음. 웹 서버를 통해 SSL 인증서를 관리하고 암호화 트래픽을 처리하여 보안을 강화할 수 있음.여러 대의 WAS 연결 가능: 클라이언트의 요청을 여러 WAS로 분산하여 부하를 고르게 분배하고, WAS를 웹 서버로 연결함(로드밸런싱). 여러 대의 WAS를 연결하여 대용량 웹 어플리케이션을 운영하면서 무중단 운영과 장애 극복을 보다 효과적으로 처리할 수 있음.여러 웹 어플리케이션 서비스 가능: 하나의 서버에서 PHP, JAVA 등 다양한 언어의 애플리케이션을 함께 호스팅할 수 있음. 웹 서버를 통해 다양한 웹 어플리케이션을 효율적으로 관리하고 제공할 수 있음.→ 웹 서버를 WAS 앞에 배치하고 필요에 따라 웹 서버에 WAS를 플러그인 형태로 설정함으로써 효율적인 분산 처리를 할 수 있음.Static Site Generator정적인 사이트는 사용자의 요청에 따라 즉시 생성되는 것이 아니라, 미리 만들어진 페이지를 보여줌. 이를 위해 정적 사이트 생성기(static site generator)가 사용됨.정적 사이트 생성기는 웹 사이트의 구성 요소를 미리 만들고, 이를 템플릿화하여 고정된 형태의 페이지로 저장함. 이후에는 사용자의 요청에 따라 이러한 미리 생성된 페이지를 제공함.예: Jekyll (Ruby, GitHub Pages), Hugo (Go), Gatsby (React) 등 Server Side Rendering (SSR)SPA 등장 이전에 사용되던 방식으로, 서버에서 페이지를 요청할 때마다 완성된 페이지를 생성하여 보여주는 형식이를 통해 사용자가 해당 페이지에 접속할 때 완성된 페이지를 즉시 보여줌으로써 검색 엔진에서 사이트의 컨텐츠를 인식하는데 문제가 없음.최근에는 SPA에서도 SEO 문제를 해결하기 위해 SSR 방식을 지원하는 프론트엔드 프레임워크들(React, Vue, Angular 등 )이 등장함. Client Side Rendering (CSR)Ajax 등의 기술(XML HTTP Request), 자바스크립트 프레임워크를 활용하여, 데이터를 받아 자바스크립트로 페이지를 동적으로 만들 수 있게 됨.데이터는 XML, JSON 형태로 클라이언트에 전송. 이미지 출처 : https://velog.io/@namezin/CSR-SSR Single Page Application (SPA)기존에 페이지를 요청할 때마다 서버로부터 새로운 페이지를 받아와 보여주는 방식과는 달리, 페이지의 전체적인 렌더링이 한 번만 이루어지고 이후에는 필요한 데이터만 비동기적으로 요청하여 업데이트하는 방식임.SPA는 모바일 환경과 같이 통신 트래픽이 많고 성능이 낮은 환경에서 최적화되어 있음. 그러나 SPA에는 초기 로딩 시에 모든 페이지를 내려받아야 하기 때문에 초기 로딩 속도가 느린 단점이 있습니다.이를 개선하기 위해 Lazy Loading 방식이 도입됨. Lazy Loading은 SPA의 영역을 나누어 각 영역에 접근할 때 해당 페이지를 구성하도록 분리하는 방식임. 또한, SPA는 페이지 구성을 JavaScript로 동적으로 생성하기 때문에 검색 엔진 최적화(SEO)에 어려움을 겪을 수 있음. 이러한 문제를 해결하기 위해 Server Side Rendering (SSR)이 도입됨.SSR은 웹 사이트의 초기 로딩 시에 서버에서 페이지를 미리 렌더링하여 클라이언트에 전달함으로써 초기 구동 속도를 개선하고 SEO에도 더욱 유리한 환경을 제공함. SSG(Static Site Generation)CSR과 SSR의 단점들을 보완하기 위해 등장한 방식미리 서버에 화면을 저장해 두었다가 필요할 때 꺼내 사용하는 방식으로, 정적인 페이지를 생성하여 서비스함.초기 로딩 속도를 향상시키고 SEO(검색 엔진 최적화)를 개선할 수 있음. SSL과 TLSSSL보안 소켓 계층(Secure Sockets Layer, SSL)웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술데이터를 암호화하여 보안을 강화하는 프로토콜로, 인터넷 통신에서 개인정보 보호와 데이터 무결성을 보장함.웹사이트의 URL에 "HTTPS"가 표시되는 것은 SSL/TLS를 사용하고 있음을 나타냄. TLS전송 계층 보안(Transport Layer Security)SSL의 후속 프로토콜로, SSL의 업데이트로 IETF에서 개발됨.HTTPS 작동의 근간을 이루는 TLS 핸드셰이크는 클라이언트와 서버 간의 인증 및 통신 보안을 담당함.TLS의 다양한 버전(TLS 1.0, 1.2, 1.3 등)은 보안 강화와 호환성을 위해 지속적으로 업데이트되고 있음. SSL/TLS 핸드셰이크TLS 핸드셰이크클라이언트와 서버 간의 통신을 안전하게 하는 인증 프로세스서로의 신원을 확인하고 암호화 알고리즘과 세션 키를 합의함.이를 통해 사용자의 개인 정보가 안전하게 전송되며, 특정 유형의 사이버 공격을 방지할 수 있음. TLS 핸드셰이크는 언제 발생할까?TLS 핸드셰이크는 사용자가 HTTPS를 통해 웹 사이트를 탐색하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리하기 시작할 때마다 발생함.다른 통신이 API 호출 및 HTTPS를 통한 DNS 쿼리를 포함하는 HTTPS를 사용할 때에도 매번 TLS 핸드셰이크가 발생함.TLS 핸드셰이크는 TCP 연결이 TCP 핸드셰이크를 통해 열린 후에 발생함. 요약HTTPS는 HTTP 프로토콜 위에 SSL/TLS를 사용하여 보안을 강화한 것SSL은 데이터 통신을 보호하기 위한 암호화 프로토콜TLS는 SSL의 후속 프로토콜로, 이름이 바뀐 이유는 소유권 변경을 나타내기 위한 것이지 기능적 차이는 크게 없음.즉, HTTPS는 SSL/TLS를 사용하여 안전한 통신을 제공하는 웹 사이트를 지칭하는 용어참고 링크https://aws.amazon.com/ko/compare/the-difference-between-web-server-and-application-server/https://yozm.wishket.com/magazine/detail/1780/https://code-lab1.tistory.com/199https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/https://velog.io/@namezin/CSR-SSRhttps://medium.com/@jayampathiadhikari/ssl-tls-simplified-c3c1f08051b2https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/https://www.digicert.com/kr/what-is-ssl-tls-and-https

웹 개발스터디네트워크

[Back-End] 2. 네트워크 환경 설정 -1

네트워크 환경 설정 이전 포스팅에서는 리눅스 pc 장비를 세팅 하는것 까지 글을 작성하였다. 이번 포스팅에서는 세팅한 pc를 Back-end 환경에서 네트워크 환경을 설정하는 것까지 글을 작성할 것이다. ※ 이번 포스팅은 저의 네트워크 환경설정을 하며 알게 된 지식을 중점으로 포스팅을 함으로 잘 못된 내용이 있을 수 있습니다.   포트포워딩이란? 포트 포워딩이란? 포트포워딩이란 IP주소를 통해 외부에서 원하는 IP주소를 접근하고자 할 때 접근가능한 포트를 열어주는 작업이다. 위의 이미지가 매우 단순화한 포트포워딩을 설명하는 그림이다. 먼저 보라색 네모안의 기기 들이 내부 IP로 공유기에서 할당된 주소들로 인터넷에 접근이 가능토록 하고 공유기에서는 외부IP와의 통신을 통해 각 기기들로 통신을 하도록 하게 해준다. 여기서 특정 기기의 특정 포트로 외부,내부에서 접근이 가능하도록 하게 하는 것이 바로 포트포워딩이다.   포트포워딩 설정하기 먼저 cmd 창의 ipconfig명령어를 통해 기본 게이트웨이를 알 수 있다. 기본게이트웨이가 곧 공유기에 해당 되는 부분이며 chrome에서 해당 ip주소를 입력하면 포트포워딩을 설정할 수 있는 화면이 나온다. 처음 공유기를 설정할 때의 화면이 나오며 로그인을 하고 들어가서  방화벽설정의 포트포워딩(업체마다 다를 수 있음)을 찾아 들어가면 다음과 같은 화면이 나온다. 규칙이름(알기쉽게) IP주소: 포트포워딩을 원하는 기기의 주소 프로토콜: 기본적으로 많이 사용되는 프로토콜, 혹은 사용자가 원하는 포트는 ALL로 하여 직접 입력하면 됨 외부내부: 내부포트 열 시 해당 공유기를 공유하는 기기에서는 내부 IP를 입력하여 접속가능하며 외부 포트를 열 시 외부 IP에서 접속이 가능하다.   여기까지 하면 해당 공유기에서의 포트포워딩은 완료되었고 나머지는 CentOS에서 포트를 열어 주어야 한다. add-port 부분에 ""를 제거하고 숫자를 입력하면 포트가 열린다 firewall-cmd --zone=public --permanent --add-port="이곳에 원하는 포트"/tcp 포트를 개방후 reload를 해주면 정상적으로 작동한다. firewall-cmd --reload  

백엔드포트포워딩네트워크

채널톡 아이콘