우리가 사용하는 chrome, firefox, safari 등의 웹 브라우저는 어떻게 동작할까? 본 시리즈에서는 URL을 타이핑하는 것에서 시작해서 웹 페이지가 표시되기까지 일어나는 일들을 단계적으로 살펴볼 것이다.
시작하기에 앞서 우선 웹 브라우저의 구성요소부터 살펴보자. 이는 이스라엘의 개발자 Tali Garsiel이 2011년에 작성한 자료(링크)의 내용이며, 지금까지도 웹 브라우저의 구성요소를 찾아보면 가장 많이 볼 수 있는 자료이다.
웹 브라우저의 주요 구성 요소는 다음과 같다.
1) User Interface: 요청한 페이지가 표시되는 부분을 제외한 주소 창, 새로 고침 버튼, 북마크, 이전 버튼과 다음 버튼 등
2) Browser Engine: User Interface와 rendering engine을 연결해주는 부분.
3) Rendering Engine: 요청한 내용을 브라우저 창에 표시하는 역할을 한다. HTML, CSS와 같은 문서를 파싱한 다음 레이아웃을 형성해 렌더링한다.
4) Networking: HTTP 요청과 같은 네트워크 호출 외에도 통신, 보안과 같은 역할을 담당한다.
5) Javascript Interpreter: 자바스크립트 코드를 해석하고 실행하는 역할을 한다. 실행 결과는 rendering engine으로 보내져 화면에 표시된다.
6) UI Backend: Select box, input box, check box와 같은 위젯을 디스플레이하는 역할을 한다.
7) Data Persistence/Storage: 브라우저가 설치될 때 사용자의 컴퓨터에 생성되는 데이터베이스로, 캐시, 쿠키, 북마크 등이 저장된다. 그 외에도 브라우저는 localStorage나 WebSQL과 같은 저장 매커니즘을 제공한다.
10년도 더 전인 2011년 자료이기에 좀 더 업데이트 된 자료가 없을까 찾아보다가, chrome 브라우저의 동작을 정리한 글을 찾을 수 있었다(링크1, 링크2). 자료가 잘 정리되어 있어서 이를 번역하여 아래 글을 작성했고, 설명이 불충분한 부분은 참고 자료에 명시한 자료들을 통해 보충했다.
❗ 따라서… 시작하기에 앞서 참조한 자료가 chrome 브라우저를 바탕으로 작성되었으며, 참조한 자료가 2018년도에 작성된 자료임을 알려드립니다.
chrome 브라우저는 다음과 같은 여러 process들로 구성이 되어 있다.
❗ 2019년에는 network thread가 별도의 프로세스(network process)로 분리되었다고 한다.
우리가 주소 창에 다음과 같이 URL을 입력하는 순간부터 navigation 과정이 시작된다.
Browser thread의 network thread가 DNS Lookup을 개시하여 IP 주소를 받는다.
🤔 DNS란?
도메인 이름 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환한다. (참고 링크)
서버와 TCP three-way handshake를 통해 연결을 생성한다.
더욱 안전한 연결을 위해 TLS negotiation을 생성한다.
서버와의 안전한 연결이 생성되었다면 서버에게 HTTP GET request를 보낸다.
서버에서는 받은 요청을 처리하여 응답을 보낸다.
Network thread가 응답의 헤더를 파싱한다. 정상적인 응답인지, 안전한 사이트인지 확인되었다면 navigation을 지속하고 문서를 다운로드한다.
Network thread가 UI thread에게 데이터가 준비되었다고 알려주면, UI thread가 renderer process를 찾아서 시작한다. 요청을 보내고 응답을 받기까지 시간이 걸리기 때문에 그 전에 미리 renderer process를 준비(standby)시키기도 한다.
Browser process에서 renderer process로 IPC가 보내지고, renderer process가 계속 HTML 데이터를 받을 수 있도록 data stream도 함께 전달된다.
Styling
display:none
과 같은 속성이 있는 노드는 제외)만 포함되고, 각 노드에는 노드의 내용과 CSS 스타일 정보가 포함된다.Layout
Paint
지금까지 요청을 보내고, 응답을 받고, 파싱해서 화면에 표시하는 과정까지 알아보았다. 그 외 compositing과 관련한 내용은 별도의 포스트를 통해 정리해보려고 한다.
본 포스팅은 참고 자료에 표기한 자료들을 번역하여 정리해둔 것입니다. 틀린 부분이 있을 수 있으니, 정정이 필요한 부분이 있다면 댓글로 남겨주시면 감사하겠습니다.
참고 자료
Behind the Browser, Part 1: The Basics - DZone Web Dev
How browser works (part I) - process and thread
How does browser work in 2019 (part II) - navigation
웹페이지를 표시한다는 것: 브라우저는 어떻게 동작하는가 - Web Performance | MDN
Inside look at modern web browser (part 3) - Chrome Developers