면접 좀 다녀봤으면 한번씩 들어봤을 것이다.
결국 우리가 만든 결과물들은 웹에서 동작하기에 가장 기본적인 질문이지만, 사실상 모든 것을 내포한 질문이다.
라떼는 이거 외워다가 "osi 7계층에서...어쩌고 DNS가 어쩌고"하고 대충 대답했는데
지금 생각하면 다 의미없었다.(그리고 내용도 다 까먹었다)
질문을 막상 까보면은
네트워크: 요청이랑 응답이랑 어떻게 이뤄짐?
보안: HTTPS, 암호화 어떻게 처리됨?
인프라: 웹 서버 어케 구동됨? 트래픽 어케 관리함?
백엔드: (구성따라 다르겠지만) WAS 동적 요청 어케 처리함?, 데이터베이스 어케 처리함?
프론트엔드: 웹 브라우저에 어케 그려줌?
즉 어떤 분야로 정의하느냐에 따라 답변 방향성이 달라진다.
고로 이번시간에는 네트워크 관점에서 알아보자
네트워크
맨날 듣고 까먹는 거부터 시작하자
OSI 7계층과 TCP/IP 4계층
분류에 따라 계층이 있다.

<출처: 나무위키>
웹 요청은 계층을 위에서 아래로 가냐(요청), 아래에서 위로 가냐(응답)로 순차적인 동작 구조를 가진다.
계층 정보 있고 중간에 U자 그려서 위에서 아래로~ 아래에서~ 위로 설명한 자료 한번쯤 봤으면 기억날 것이다.
아무튼 우리는 요청이니 위에서부터 시작해보자.
맨위 L7 이라고도 불리는 응용 계층(Applications)에 보면 익숙한게 있다
바로 DNS다.
DNS
아마 다들 알텐데 "www.google.com 줄게, 아이피 다오~" 하는거다.
조회 과정 보자면 전세계 모든 도메인 정보를 서버가 다 가지고 있지는 않으니, 하나씩 발품 팔아서 넓게 퍼진다.
요청하는 브라우저
- 일단 나부터 자기 캐시 확인하고, 없으면 OS 캐시(hosts 파일) 확인
Recursive Query(Local DNS에 위임)
자기가 찾아도 뭐 없으면, 설정된 Local DNS 서버(Local이 내 로컬이 아니라, 지역적인 Local)에 IP 주소좀 찾아달라고 재귀적 요청을 보낸다.
이 Local DNS 서버는 우리가 가입한 KT나 SKT 같은 통신사 기지국 같은거다.
Iterative Query (Local DNS의 작업)
Local DNS 서버는 재귀적 요청이니 이제 반복적(Iterative)으로 IP 주소를 찾아 나선다.
Root DNS(.): 최상위 루트라서
.처리다. 만약 애가 모르면? 조금 더 좁은 범위로 간다. =>.com을 관리하는 TLD DNS로 가자TLD(Top Level Domain) DNS(.com): 최상위 도메인을 처리한다. 애가 모르면? 더 좁은 범위 =>
google.com을 관리하는 Authoritative DNS로 가자Authoritative DNS(google.com): 실제 개인 도메인과 IP 주소의 관계가 기록되는 서버다. 호스팅 업체에 네임 서버 같은거다. =>
www.google.com은142.250.194.68임
이제 연결해야겠지?
자 지인의 집주소를 알았으면 뭘 해야한다?
쳐들어가서 문 뚜들기고 부셔서 들어간다.
초인종 누르고 계시냐고 여쭤본다.
사회인이라면 기본적인 예의 프로토콜을 따르자.
인터넷 세상도 절차적인 예의가 있다.
상호 신뢰로 유지되는 세상이기 때문이다.
아무튼 우리는 웹 요청을 한다.
즉 크고 복잡한 데이터를 신뢰성 있게 유실이나 순서 바뀜 없이 교환해야한다는 것이다.
이 역할을 TCP(전송 제어 프로토콜이 담당한다)
OSI 모델 보면 TCP가 어디에 위치했냐 L4 전송 계층에 위치해있다.
L6, L5 = 표현 계층, 세션 계층 설명 어디갔냐 싶은데,
L6는 데이터 표현 방식을 결정하는데 암호화 관련 내용이 있어서 나중에 보안쪽에서 다루고
L5는 통신 관리하는 계층이라 TCP/IP 세션 자체를 만들고 없애는 역할이다.
아무튼 TCP는 데이터 보내기전 통신의 신뢰성을 위해 3-Way Handshake 라는 3단계 인사를 통해 확인하고 연결을 수립한다.
[SYN] Client -> Server: 대화 가능?
[SYN-ACK] Server -> Client: ㅇㅇ 가능. 내 말 들림?
[ACK] Client -> Server: ㅇㅇ 잘 들림 본론 들어감
SYN, ACK 이라는 이상한 키워드가 들어가는데 플래그 비트라고 데이터 목적이 뭔지 설명하는 용도다.
통신할때 당연히 중요한건 헤더에 담고, 데이터는 본문에 담고 할텐데 헤더에 9개 비트를 차지하고 각 비트 영역마다 서로 신호가 다르다.
목적에 따라서 해당하는 위치의 비트는 1로 키는 것이다.
SYN: 연결 요청
ACK: 데이터 확인 완료
이 과정이 끝나고 나면 양측은 ESTABLISHED(연결 확정) 상태가 되고,
데이터가 순서대로 빠짐없이 전달될 것을 보장하는 통로가 열리는 것이다.
참고로 실제로 요청(SYN) 보낸 시점부터 OSI 계층 작업은 완료가 되어있다.
결국 요청이란것은 L7->L1 과정까지 캡슐화 되면서 데이터가 쌓이고
인터넷 거쳐서 출발한 시점부터 다시 L1->L7 과정으로 디 캡슐화 되면서 데이터가 하나씩 해석되고 처리되기 때문이다.
L3 네트워크 계층에서 서로 다른 네트워크 간에 데이터 목적지 주소 지정하고
L2 데이터 링크 계층에서 같은 네트워크 내에서 데이터 전송을 담당하고
L1 물리 계층에서 케이블 같은 물리적인 매체로 전송하고
근데 대략적으로 설명해서 이렇지 실제로는 각자 하는 일이 되게 세부화 되어있다.
나도 보고 익히고 다 설명하기에는 한계가 있어서 웹 요청 관점에서 이야기를 진행하겠다.
HTTP/HTTPS: 웹 요청으로 대화하기
신뢰할 수 있는 통로가 열렸으니 통로로 데이터를 교환한다.
이때 교환도 규칙이 필요한데 웹 요청에서는 HTTP가 규칙이다.
HTTP에는 요청과 응답의 형식을 정의한다.
요청 메세지는 한번쯤 본적이 있을 것이다.
GET /search?q=hello HTTP/1.1
Host: www.google.com
User-Agent: Chrome/...
Accept: text/html
어떤 요청을 하는지(GET) 경로(/search)와 버전을 담는다.
그리고 서로 이해에 필요한 부가적인 정보를 담는다.
서버는 클라이언트에 응답을 한다.
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 34500
<!DOCTYPE html>
<html>...</html>
요청 응답 받았으면 통신생활 끝나냐?
내가 지인이랑 전화 때리는데 스토커가 듣고있다 생각하면 소름이 돋는다.
그리고 들을 수 있다. 우리는 데이터를 평문으로 보냈기 때문이다.
그렇다면? 암호화가 필요하고 보안에 특화된 HTTP에 특수 버전 HTTPS를 사용 할 시간이다.
그리고 이것은 보안의 영역이라...나중에 작성하겠다.
글 쓰는데 시간이 살살 녹아요