💡 http://www.google.com 을 주소창에 쳤을 때 화면이 나오기까지의 과정을 설명해주세요.
수많은 동아리, 기업, 전과 면접으로 나오는 질문이다. 아마 해당 질문을 통해서 지원자가 웹 전반적인 프로세스에 대해 어느정도 이해하고 있는 지를 파악하고, 네트워크에 대한 기본 지식이나 본인의 포지션(FE, BE) 관점에서 어떻게 풀어나갈 수 있을지에 대해 물어보기 좋아서 단골 질문으로 사용이 되는 것 같다.
오늘은 해당 질문에 답을 써보며 위 질문 답변에 필요한 네트워크 지식 및 웹 동작의 프로세스를 정리해보고자 한다.
우선 사용자가 주소창에 URL을 입력하고 웹페이지가 로드되기까지의 과정을 간단한 과정으로 표현하자면 다음과 같다 :
웹 페이지의 로딩 과정에 대해 간략히 알아보았으니 이제 www.google.com 로딩 과정을 세부적으로 들여다보기 위해 필요한 주요 네트워크 지식들을 알아보자.
TCP/IP는 인터넷에서 사용하는 프로토콜 그룹을 지칭한다.
TCP/IP 4계층에서 시작한 네트워크 표준이 꾸준히 갱신되면서 하위 레이어가 다시 세분화되어 (Network Interface Layer를 Data link Layer와 Physical Layer로 나뉨) TCP/IP 5계층 모델이 되었다.
따라서 TCP/IP는 Application layer(응용계층), Transport layer(전송계층), Network layer, Data link layer, Physical layer로 5개의 계층으로 나뉜다. OSI 7계층 (표준화된 네트워크 통신 보델) 과 유사하게 각 계층은 하위 계층의 기능을 이용하고, 상위 계층에게 기능을 제공한다. 즉, HTTP는 TCP와 IP를 이용해서 작동한다는 의미가 된다.
그 중에서 전송 계층 (Transport layer)은 응용 계층으로부터 메시지를 받아 전송 계층 패킷으로 캡슐화하여 전송한다. 전송계층의 주된 프로토콜은 TCP (Transmission Control Protocol), UDP(User Diagram Protocol)이다. TCP는 연결형, 신뢰성 전송 프로토콜로 TCP로 전송하는 패킷을 segment라고 부른다. 연결 지향적 서비스를 제공하기 위해 데이터를 전송하기 전에 3-way handshaking이라는 두 호스트 전송 계층 사이의 논리적 연결을 설립한다. 또한 신뢰성 있는 서비스를 제공하기 위해 오류 제어, 흐름 제어, 혼잡 제어 등을 실행한다. TCP는 이러한 신뢰성을 보장하기 위해 header가 더 크고 속도가 비교적 느리다는 단점이 있다.
이에 반해 UDP는 비연결형, 비신뢰송 전송 프로토콜로 UDP로 전송하는 패킷을 datagram이라고 한다. 다시 말해 비연결형 프로토콜로 3-way handshake 등의 세션 수립 과정이 존재하지 않는다. 이러한 단순성 덕분에 적은 양의 오버헤드를 가지며 수신여부를 확인하지 않아서 속도가 빠르다.
정리하자면 TCP는 신뢰성이 중요한 통신(HTTP 등)에 쓰이고, UDP는 실시간성이 중요한 통신(스트리밍 등)에 주로 사용된다.
DNS(Domain Name System) 룩업은 인터넷에서 도메인 이름을 해당 IP 주소로 변환하는 과정을 의미한다. 인터넷에 연결된 모든 장치는 IP 주소를 가지고 있으며, 이 주소를 통해 서로 식별하고 통신한다. DNS는 인터넷의 전화번호부와 같은 역할을 하며, 사용자가 사람이 읽을 수 있는 도메인 이름을 사용할 수 있도록 해준다. 예를 들어, 사용자가 www.google.com
과 같은 이름을 입력했을 때, DNS는 이를 172.217.0.46
과 같은 IP 주소로 변환한다.
브라우저 캐시 확인
www.google.com
을 입력하면, 브라우저는 먼저 자신의 캐시를 확인하여 이전에 방문한 적이 있는지 확인한다. 만약 캐시에 www.google.com
의 IP 주소가 있다면, 이 주소를 사용하여 서버에 접속한다.시스템 캐시 확인
로컬 DNS 서버 요청
재귀적 및 반복적 조회
재귀적 조회: 로컬 DNS 서버가 캐시에 www.google.com
의 IP 주소를 가지고 있지 않다면, 이 서버는 다른 DNS 서버들로부터 필요한 정보를 얻기 위해 자동으로 요청을 연속적으로 전송한다.
반복적 조회: 로컬 DNS 서버가 다른 서버에 요청을 전달하지 않고, 대신 클라이언트에게 다음 조회를 위한 서버의 주소를 알려준다.
루트 DNS 서버
.com
의 서버를 가리킨다.TLD(Top Level Domain) 서버
.com
도메인의 TLD 서버 주소를 로컬 DNS 서버에 알려주며, 로컬 DNS 서버는 이 주소로 질의를 계속한다.권한 있는 네임 서버
google.com
도메인의 권한 있는 네임 서버 주소를 로컬 DNS 서버에 제공한다. 로컬 DNS 서버는 이 네임 서버에 www.google.com
의 IP 주소를 요청한다.응답 저장 및 전송
www.google.com
의 IP 주소를 로컬 DNS 서버에 보낸다. 로컬 DNS 서버는 이 IP 주소를 캐시에 저장하고, 사용자의 시스템으로 응답을 전송한다. 사용자의 브라우저는 이제 이 IP 주소를 사용하여 Google 서버에 접속하고 웹 페이지를 로드할 수 있다.이러한 과정을 통해 DNS는 뒷단에서 인터넷의 기능적인 부분에서 매우 핵심적인 역할을 하며, 사용자가 IP 주소를 직접 기억할 필요 없이 웹 사이트에 접속할 수 있게 해 준다.
HTTP는 HyperText Transfer Protocol의 약자로 웹 상에서 정보를 전송하기 위한 통신 프로토콜로서 HTML과 같은 문서를 전송하는 것에 사용된다.
클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 다시 클라이언트에게 보내는 구조이다.
클라이언트가 서버로 보내는 request message는 start line(method, path, HTTP version), headers, body로 이루어져 있다.
서버가 클라이언트로 보내는 response message는 status line(HTTP version, status code, status message), header, body로 이루어져 있다.
HTTP는 서버 연결 후 request에 대한 response를 받으면 연결을 끊어버리는 Connectionless의 특성을 갖는다. 이는 많은 사람들이 사용할 수 있는 웹에서 특정 웹의 동시 접속을 최소화하여 더 많은 유저의 요청을 처리할 수 있다.
하지만 위와 같이 연결이 끊긴 경우, 클라이언트의 이전 상태 (로그인 유무 등)을 알 수가 없다는 Stateless 특성을 가지게 된다. 이러한 HTTP의 단점을 해결하기 위해 cookie, session, jwt 등이 도입되었다.
위 개념들을 가지고 초반에 간단하게 봤던 www.google.com
의 동작과정을 다시한번 생각해보자.
사용자가 브라우저에 URL 입력 및 HTTP 요청 생성
브라우저는 DNS를 통해 IP 주소 조회
IP 주소로의 요청 전송 (client에서 HTTP request로 server 전송)
서버 처리 및 응답 (server에서 HTTP response로 client 전송)
웹 브라우저에 의해 콘텐츠 렌더링
TCP
http
기출로 대비하는 CS 전공면접
How does DNS work
DNS 조회 과정에서 발생할 수 있는 문제점이 있을까요??