사용자가 웹사이트에 접속하면 브라우저에서는 무슨일이 일어날까?
브라우저 구조 (Browser architecture)
figma로 그려본 브라우저 아키텍쳐
- User interface(사용자 인터페이스): 사용자가 웹브라우저를 탐색하고 상호작용할수 있도록 만들어진 모든 요소.
(e.g 주소창, 검색버튼, 북마크바, 테마 및 스킨, etc)
- Browser Engine (브라우저 엔진): 사용자 인터페이스와 렌더링 엔진간 브릿지 역할. 버튼 클릭, URL 파싱, 웹 콘텐츠 처리 등 상호작용 관리.
- Rendering Engine (렌더링 엔진): HTML, CSS, JavaScript를 해석하여 웹 콘텐츠를 display함.
- Networking (네트워크): HTTP요청을 통해 웹서버와 통신해 웹페이지 리소스를 불러옴.
- JavaScript Interpreter(자바스크립트 엔진): JS 코드 실행, DOM 요소 조작, 브라우저 객체와 상호작용.
- Data (데이터 저장소): 사용자 환경설정, 검색 히스토리, 비밀번호 및 캐시 데이터 저장.
- UI Backend: 사용자 인터페이스 내 동적 및 인터렉티브 기능 제공. 브라우저 최적화와 user input 효율적으로 다룸.
브라우저 동작
1. 탐색( Navigation) -> 요청 (Request) ->응답 (Response)
- 사용자가 웹사이트에 접속하면, 브라우저는 사용자가 입력한 Domain의 IP주소를 DNS에게 요청한다.
- 첫 방문하는 경우 DNS조회를 요청하고, 후에는 캐시에 저장된 IP주소를 사용한다.
- TCP/ 3way-handshake: 브라우저(클라이언트) -> 서버 -> 브라우저 -> 서버로 브라우저와 웹서버 연결을 설정한다.
- HTTP request: 브라우저가 서버에게 데이터 요청한다.
- HTTP response: 서버가 브라우저에게 데이터 전송한다.
2. 구문 분석 (Parsing)
<script>태그를 만나면 JavaScript 엔진에 제어 권한 넘긴다. (DOM 생성중단)
defer나 async 속성을 사용하면 DOM의 생성이 중단되지 않음.
<script>를 바디 맨 아래에 넣는 이유.
- JS 엔진은 js 스크립트를 parsing해 AST(abstract syntax tree: 추상 구문 트리)를 만들고 실행한다.
- 이후 DOM 생성을 계속한다.
3. 렌더 (Render)
-
Construction: 브라우저는 DOM tree와 CSSOM tree를 합쳐 Render tree를 만든다. (웹사이트 최종 설계도) 시각적으로 표시되지 않는 노드들은 제외시키고 포함하지 않는다. (e.g display: none;)
-
렌더링 엔진 작업: Render tree를 기반으로 렌더링 엔진은 Layout > Paint > Composition 과정을 거친다.
- Layout: 노드의 위치와 크기를 계산하여 화면에 배치.
- Paint: UI backend가 렌더트리의 노드를 돌면서 화면에 UI를 그림.
- Composition: 노드들의 레이어를 z-index 순서대로 구성.
모든 과정이 완료 되면 사용자가 볼 수 있는 웹페이지가 화면에 표시된다.
Reference
MDN: Populating the page: how browser work
GeekforGeeks: Browser Architecture
웹 브라우저는 어떻게 동작할까
DOM과 CSSOM, 렌더링 과정