우리가 URL을 입력하면 브라우저는 마법처럼 화려한 웹 페이지를 보여준다. 하지만 그 과정은 생각보다 훨씬 복잡하다. HTML, CSS, JavaScript라는 텍스트 파일이 어떻게 우리 눈에 보이는 픽셀로 변환되는지, 그 과정을 하나씩 뜯어보자.
브라우저가 화면을 그리는 과정은 크게 5단계로 나뉜다. 이 과정을 **렌더링 파이프라인(Rendering Pipeline)**이라고 부른다.

전체 흐름:
서버 요청 → 파싱(Parsing) → 렌더 트리 구축(Render Tree) → 레이아웃(Layout) → 페인트(Paint) → 컴포지팅(Composite) → 화면 표시
마치 건물을 짓는 것과 비슷하다고 생각하면 쉽다. 설계도를 보고(파싱), 어떤 재료가 필요한지 정리하고(렌더 트리), 각 방의 위치와 크기를 결정하고(레이아웃), 벽에 페인트를 칠하고(페인트), 마지막으로 여러 층을 쌓아 올려(컴포지팅) 완성된 건물을 보는 것이다.
브라우저가 가장 먼저 하는 일은 서버로부터 받은 HTML과 CSS 파일을 "읽어내는" 것이다. 하지만 브라우저는 우리처럼 텍스트를 바로 이해하지 못한다. 텍스트를 브라우저가 이해할 수 있는 자료구조로 변환해야 하는데, 이 과정을 **파싱(Parsing)**이라고 한다.
HTML 파싱: DOM(Document Object Model) 트리 생성
브라우저는 HTML을 한 줄씩 읽어내려가며 DOM이라는 트리 구조를 만든다.
HTML 원시 바이트 → 문자 변환 → 토큰화 → 노드 생성 → DOM 트리 구축
예를 들어 이런 HTML이 있다고 해보자:
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<h1>Hello</h1>
<p>World</p>
</body>
</html>
브라우저는 이걸 트리 구조로 변환한다:
Document
└─ html
├─ head
│ └─ title
│ └─ "My Page"
└─ body
├─ h1
│ └─ "Hello"
└─ p
└─ "World"
DOM은 단순히 HTML을 표현하는 것이 아니라 JavaScript가 HTML 요소를 조작할 수 있도록 하는 인터페이스 역할을 한다. document.querySelector() 같은 메서드가 바로 DOM API다.