브라우저에 google.com을 치면 무슨일이 일어날까?

오늘은 브라우저에 www.google.com 을 입력하면 어떤 과정이 일어나는지 알아보겠습니다.

도메인의 해당 IP 주소를 찾기 위해 캐시에서 DNS를 탐색

유저가 브라우저에 www.google.com을 입력하면 브라우저는 www.google.com(도메인)IP 주소로 변환해야합니다.
💡
모든 URL에는 고유한 IP 주소가 할당되어 있습니다. 접속하고 싶은 사이트의 IP 주소를 입력하여 접속하는 것은 어렵기 때문에 도메인 이름으로 검색을 하게 되고, 이 때 DNS가 도메인과 매칭되는 IP 주소를 찾아주는 역할을 합니다.
 

캐싱된 DNS 기록 확인

검색창에 www.google.com을 입력했을 때, 브라우저는 유저가 이전에 google에 방문한 적은 없었는지 내부적으로 여러 단계에 걸쳐 DNS 캐시를 찾기 시작합니다.
  1. 브라우저 캐시 를 확인합니다. 브라우저는 로컬 컴퓨터에 저장되는 캐싱 방식으로 유저가 이전에 방문한 웹사이트의 DNS 기록을 일정 기간 저장하고 있습니다.
  1. OS 캐시 를 확인합니다. OS 캐시는 운영체제 안에 있는 캐시로 systemcall을 통해 그 내용에 접근할 수 있습니다. 즉 유저의 사용중인 운영체제 안에 저장되어 있는 DNS 기록을 찾아본다는 의미입니다.
  1. 라우터 캐시 를 확인합니다. 만약 유저의 컴퓨터 (브라우저, OS)에도 www.google.com에 대한 DNS 기록이 없다면, 라우터 캐시를 찾아봅니다. 라우터란 집에서 사용하는 공유기라고 생각하면 됩니다.
  1. ISP 캐시 를 확인합니다. 위의 단계에서 DNS 기록을 찾지 못했다면, ISP에서 DNS 기록을 찾게 됩니다. ISP는 SKT, KT 등 한국에서 인터넷 서비스를 공급하는 회사를 의미합니다.
 

캐시를 찾지 못했다면, ISP의 DNS 서버가 DNS 쿼리를 통해 IP 주소 검색

ISP 캐시 확인 단계에서까지 www.google.com에 해당하는 IP 주소를 찾지 못했다면 ISP는 DNS 서버에 DNS 쿼리를 보내기 시작합니다. 이 과정은 IP 주소를 찾거나 찾을 수 없다는 오류 응답을 받을 때까지 반복합니다. 이 과정은 ISP의 DNS recursor가 담당하게 됩니다.
 
notion image
  1. DNS recursor가 DNS 쿼리를 Root domain에 전송
  1. Top-level domains인 .com DNS 서버에 전송
  1. Second-level domains인 google.com 으로 전송
  1. 마지막으로 www 까지 갖춰지게 되면 www.google.com 의 IP 주소를 찾게된다
 

TCP/IP 프로토콜을 사용해 서버와 연결

브라우저가 올바른 IP 주소를 받게되면 IP 주소와 일치하는 서버와 연결해 정보를 전송합니다. 브라우저는 인터넷 프로토콜(IP)을 사용하여 연결을 구축하게 되는데, 사용할 수 있는 여러가지 인터넷 프로토콜이 있지만, 일반적으로 HTTP 요청에서는 TCP 전송 제어 프로토콜을 사용합니다.
 
TCP/IP three-way handshake 라는 프로세스를 통해 클라이언트와 서버간 connection이 이루어지게 됩니다. 여기서 HTTPS를 사용하는 경우 데이터의 암호화를 위한 TLS(Transport Layer Security) 핸드셰이크라는 추가 과정을 수행합니다.
 
notion image
  1. 클라이언트가 SYN(synchronize: 연결 요청) 신호를 서버쪽으로 보내며 포트를 열어달라고 물어봅니다.
  1. 서버가 SYNACK를 클라이언트에게 보내게 됩니다.
  1. 클라이언트는 서버에서 받은 SYN와 ACK를 통해 첫 번째 단계에서 보낸 정보가 맞는지 확인 후 다시ACK(승인)를 보냅니다.
이렇게 되면 서로 안전하게 정보를 교환할 수 있는 포트가 열리게 됩니다.
 

클라이언트와 서버가 통신할 때의 안전장치

TCP 연결을 하는 도중 누군가 유저의 정보를 엿보려고 하거나 해커가 무자비한 서비스 트래픽을 보내는 경우를 대비하는 두 가지 방법이 있습니다. 바로 FirewallHTTPS/SSL 인데요.
  • Firewall 은 불이 났을 때 공기를 차단하는 벽처럼 해커가 무자비하게 트래픽을 보내는 경우를 대비해 특정 IP 주소나 어떤 지역에서 접근해오는 신호를 차단할 수 있습니다.
  • HTTPS/SSL 은 클라이언트와 서버가 정보를 주고 받을 때 중간에 정보를 가로챌 수 있기때문에 정보를 암호화해서 정보가 새는걸 차단합니다.
 

브라우저가 웹서버에 HTTP 요청

TCP 연결이 되면 데이터를 전송합니다. 클라이언트는 GET 요청을 통해 서버에 www.google.com 의 웹사이트 데이터를 요구합니다.
 

서버가 HTTP Response를 응답

클라이언트에서 보낸 request를 서버가 처리하게 됩니다. 그리고 response를 생성해서 보내주게 되는데요.
서버의 response에는 특정한 포맷 (JSON, XML) 등으로 작성되고 웹 페이지와 함께 상태 코드 (status code), 압축 유형 (Content-Encoding), 페이지 캐싱 방법 (Cache Control), 설정할 쿠키 등이 포함되어 있습니다.
 

HTML content 노출

브라우저는 서버로부터 받은 reponse 데이터에 들어있는 HTML을 화면에 단계별로 표시하게 됩니다.
  1. HTML 골격 렌더링
  1. HTML 태그 확인 후 이미지, CSS 스타일 시트, 자바스크립트 파일 등과 같은 웹 페이지의 추가 요소에 대한 GET 요청
  1. 페이지가 브라우저에 노출
 
이렇게 브라우저 검색창에 특정 주소를 쳤을 때 어떤 일이 일어나는지 알아보았습니다. 이러한 과정을 알아보면서 평소 코드를 작성하고 실행할 때에도 어떻게 동작되는지 알고 있어야 문제의 원인 파악과 해결이 되겠구나를 느끼게 되었던 것 같습니다.