23 lines
3.6 KiB
Markdown
23 lines
3.6 KiB
Markdown
# [[중요 렌더링 경로 (Critical Rendering Path)|중요 렌더링 경로 (Critical Rendering Path]]
|
|
|
|
## 📌 Brief Summary
|
|
중요 렌더링 경로(Critical Rendering Path, CRP)는 브라우저가 HTML, CSS, [[JavaScript|JavaScript]] 코드를 수신하여 화면의 픽셀로 변환하기까지 거치는 일련의 필수 단계를 의미합니다 [1, 2]. 이 경로는 문서 객체 모델(DOM), CSS 객체 모델([[CSSOM|CSSOM]]) 생성부터 렌더 트리 구축, 레이아웃, 그리고 페인트 단계까지 포함합니다 [2]. 중요 렌더링 경로의 과정을 최적화하면 웹 페이지의 첫 렌더링 시간(Time to First Render)을 단축하고 사용자 상호작용의 지연을 막을 수 있습니다 [1, 3].
|
|
|
|
## 📖 Core Content
|
|
브라우저는 웹 페이지를 화면에 렌더링하기 위해 다음의 순차적인 단계들을 실행합니다:
|
|
|
|
* **[[DOM (Document Object Model)|DOM(Document Object Model]] 트리 구축**: 브라우저가 서버로부터 HTML 응답을 받으면 데이터를 바이트에서 문자, 토큰, 노드로 변환하며 점진적으로 DOM 트리를 구축합니다 [1, 4, 5]. DOM은 문서의 구조와 콘텐츠 전체를 담고 있습니다 [6, 7].
|
|
* **[[CSSOM(CSS Object Model)|CSSOM(CSS Object Model]] 트리 구축**: DOM과 유사하게 CSS 규칙들을 파싱하여 CSSOM을 만듭니다 [6, 7]. 다만 CSSOM은 후속 규칙이 이전 스타일을 덮어쓸 수 있기 때문에 점진적으로 구축될 수 없으며, 처리가 완료될 때까지 화면 렌더링을 차단(Render-[[Blocking|Blocking]])합니다 [7, 8].
|
|
* **렌더 트리([[Render Tree|Render Tree]]) 결합**: 브라우저는 DOM과 CSSOM을 결합하여 실제로 화면에 렌더링될 요소들만을 포함하는 렌더 트리를 만듭니다 [9, 10]. 이 단계에서 `<head>` 태그나 `display: none` 속성이 적용된 비가시적 요소는 렌더 트리에서 제외됩니다 [10, 11].
|
|
* **레이아웃(Layout) 또는 리플로우(Reflow)**: 렌더 트리가 준비되면 뷰포트(Viewport) 크기를 기준으로 각 요소의 정확한 위치와 기하학적 크기(너비, 높이 등)를 계산합니다 [12-14]. 화면 크기가 변하거나 DOM 노드가 추가/수정될 때마다 레이아웃이 다시 발생할 수 있습니다 [15, 16].
|
|
* **페인트(Paint) 및 합성(Compositing)**: 레이아웃 계산을 마치면 브라우저는 요소의 텍스트, 색상, 그림자 등을 화면의 실제 픽셀로 그리는 페인트 단계를 거칩니다 [17-19]. 페이지 구성 요소가 여러 레이어로 나뉘어 있는 경우, 이를 GPU 등을 활용해 올바른 순서로 화면에 병합하는 합성(Compositing) 작업이 수행됩니다 [17, 20].
|
|
|
|
웹 성능을 최적화하기 위해서는 이 경로상에 있는 차단 리소스(예: 렌더링 차단 CSS나 파서 차단 동기식 JavaScript)의 수와 크기를 최소화하고, 로드 순서를 제어해야 합니다 [21-24].
|
|
|
|
## 🔗 Knowledge Connections
|
|
- **Related Topics:** [[DOM (Document Object Model)|DOM(Document Object Model]], CSSOM(CSS Object Model), 리플로우 및 리페인트([[Reflow and Repaint|Reflow and Repaint]]
|
|
- **Projects/Contexts:** [[웹 성능 최적화(Web Performance Optimization)|웹 성능 최적화(Web Performance Optimization]]
|
|
- **Contradictions/Notes:** CSS는 기본적으로 페이지 렌더링을 차단하는 리소스이지만, `<link>` 요소의 `media` 속성을 통해 현재 뷰포트 조건과 일치하지 않는 CSS를 설정함으로써 렌더링 차단 리소스에서 제외시킬 수 있습니다 [25, 26].
|
|
|
|
---
|
|
*Last updated: 2026-04-25* |