www.google.com을 접속할 때 웹 브라우저 요청 흐름을 설명해주세요.
웹 브라우저 주소창에 URL을 입력하여 원하는 웹페이지가 화면에 뜨기까지의 과정은 단순해 보이지만, 실제로는 네트워크 통신(DNS, TCP, HTTP)과 브라우저의 렌더링 엔진이 유기적으로 mesh되어 작동하는 복합적인 프로세스다. CS 면접에서 이 질문은 각 계층별 핵심 개념(IP 변환, 연결 수립, 데이터 송수신, 화면 그리기)을 시간순으로 매끄럽게 연결하여 설명할 수 있는지를 평가하는 대표적인 질문이다. 사용자가 을 입력하면 브라우저는 가장 먼저 목적지 서버의 실제 IP 주소를 찾는다. - 캐시 확인: 브라우저 캐시, OS 캐시, 라우터 캐시, ISP DNS 캐시 순으로 요청한 도메인에 매핑된 IP 주소가 있는지 확인한다. - DNS 질의 (DNS Query): 캐시에 정보가 없다면 Local DNS 서버를 시작으로 Root DNS, TLD(.com) DNS, Authoritative DNS 서버를 거치는 재귀적/반복적 질의를 수행하여 최종 IP 주소를 획득한다. 획득한 IP 주소를 바탕으로 클라이언트(브라우저)와 구글 서버 간의 신뢰성 있는 전송 통로를 개설한다. - SYN: 클라이언트가 서버에 연결 요청 패킷(SYN)을 보낸다. - SYN + ACK: 서버가 요청을 수락하며 확인 응답(ACK)과 함께 연결 요청(SYN)을 보낸다. - ACK: 클라이언트가 최종 확인 응답(ACK)을 보내며 TCP 연결을 완료한다. (HTTPS 접속 시 이 단계 직후 TLS/SSL Handshake가 추가로 진행되어 암호화 키를 교환한다.) TCP 연결이 확립되면 실제 데이터를 주고받는 통신을 진행한다. - HTTP 요청 전송: 브라우저는 GET 메서드, 요청 헤더(User-Agent, Accept 등), 쿠키 등을 포함한 HTTP Request 패킷을 생성하여 서버로 보낸다. - 서버 처리 및 응답: 구글 서버는 요청을 처리한 뒤 상태 코드(예: )와 응답 헤더, 그리고 요청한 HTML 데이터(Body)를 담아 HTTP Response를 반환한다. 응답받은 데이터를 기반으로 브라우저 엔진이 화면을 구성한다. 1. 파싱 (Parsing): 수신한 HTML을 파싱하여 DOM 트리를 생성하고, CSS를 파싱하여 CSSOM 트리를 생성한다. 2. 렌더 트리 구축 (Render Tree Construction): DOM과 CSSOM을 결합하여 실제 화면에 표시될 요소들로 구성된 Render Tree를 만든다. 3. 레이아웃 (Layout / Reflow): 각 노드의 정확한 위치와 크기를 계산한다. 4. 페인트 (Paint / Repaint): 계산된 레이아웃을 바탕으로 화면에 실제 피셀을 그린다. 5. 자바스크립트 실행: HTML 파싱 중 태그를 만나면 파싱을 중단하고 JS 엔진에 제어권을 넘겨 스크립트를 실행한 뒤 파싱을 재개한다. 데이터 전송 및 렌더링이 완료되고 통신을 종료해야 하는 시점이 되면 4-Way Handshake ( $\rightarrow$ $\rightarrow$ $\rightarrow$ ) 과정을 거쳐 TCP 연결을 안전하게 해제한다. (단, HTTP Keep-Alive 설정에 따라 연결을 유지하고 재사용할 수도 있다.) 이처럼 웹 브라우저 요청 흐름은 단순한 데이터 조회가 아니라 [DNS를 통한 IP 확보] $\rightarrow$ [TCP/TLS를 통한 안전한 통신 통로 개설] $\rightarrow$ [HTTP를 통한 데이터 교환] $\rightarrow$ [렌더링 파이프라인을 통한 화면 시각화]라는 일련의 구조화된 과정으로 구성된다. 면접 답변 시 단순 단결성 요약에 그치지 않고, 캐시의 사용 여부, 핸드셰이크를 통한 연결 생애주기, 브라우저 렌더링 엔진의 구체적인 단계까지 파이프라인 형태로 연결 지어 설명하는 것이 높은 평가를 받는 핵심 포인트다. 웹 동작 원리는 네트워크 기초와 브라우저 파싱 원리가 종합적으로 다뤄지는 영역이다. 기본 흐름을 파악한 후에는 계층별 세부 동작(TLS 암호화 과정, Repaint/Reflow 차이, Keep-Alive 메커니즘 등)으로 확장하여 심도 있게 대비하는 것을 추천한다.
2026년 8월 6일