Skip to content

Commit 6924bd2

Browse files
committed
docs: 브라우저 렌더링 과정 문서 수정
1 parent a425e21 commit 6924bd2

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

_posts/2025-02-13-browser-rendering-process.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,32 @@ comments: true
3434

3535
브라우저는 다운로드한 HTML 문서를 파싱하여 `DOM 트리`를 생성합니다. 이때, HTML 태그를 노드로 변환하고, 노드 간의 계층 관계를 형성합니다. 이 과정은 HTML 문서의 위에서 아래 방향으로 이루어집니다.
3636

37-
만약 HTML 파싱 중에 `async``defer` 같은 설정이 되어있지 않은 `<script>` 태그를 만나는 경우 HTML 파싱을 일시 중단하고 자바스크립트를 실행하게 됩니다. 또한 외부 CSS 파일은 만나는 경우 `CSSOM` 생성 전까지 렌더링이 지연됩니다.
37+
만약 HTML 파싱 중에 `async``defer` 같은 설정이 되어있지 않은 `<script>` 태그를 만나는 경우 HTML 파싱을 일시 중단하고 자바스크립트를 실행하게 됩니다. 또한 외부 CSS 파일을 만나는 경우 `CSSOM` 생성 전까지 렌더링이 지연됩니다.
3838

3939
<blockquote class="prompt-info"><p><strong><u>Info.</u></strong><br>
4040
DOM은 <b>Document Object Model</b>으로 XML이나 HTML 문서에 접근하기 위한 인터페이스입니다. DOM은 자바스크립트로 접근하여 수정될 수 있습니다. <br />
41+
<br />
4142
<b>defer</b>: defer 속성을 사용하면 HTML 파싱이 완료된 후 자바스크립트를 실행합니다. <br />
4243
<b>async</b>: async 속성을 사용하면 자바스크립트를 비동기적으로 로드하여 실행합니다.</p></blockquote>
4344

4445
### Step 3 - CSS 파싱 및 CSSOM 트리 생성
4546

46-
HTML 파싱과 `DOM 트리` 생성이 완료되면, 브라우저는 `CSSOM(CSS Object Model) 트리`를 생성합니다. 브라우저는 다운로드한 CSS 파일을 파싱하여 `CSSOM 트리`를 생성합니다. 이때, CSS 속성을 노드로 변환하고, 노드 간의 계층 관계를 형성합니다. 이 과정에서 브라우저는 CSS의 cascading 규칙에 따라 최종 스타일을 결정합니다.
47+
HTML 파싱과 `DOM 트리` 생성이 완료되면, 브라우저는 다운로드한 CSS 파일을 파싱하여 `CSSOM(CSS Object Model) 트리`를 생성합니다. 이때, CSS 속성을 노드로 변환하고 노드 간의 계층 관계를 형성합니다. 이 과정에서 브라우저는 CSS의 cascading 규칙에 따라 최종 스타일을 결정합니다.
4748

4849
<blockquote class="prompt-info"><p><strong><u>Info.</u></strong><br>
4950
<b>CSSOM(CSS Object Model)</b>은 CSS 객체 모델로 자바스크립트가 CSS를 동적으로 조작할 수 있게 해줍니다. HTML 대신 CSS가 대상인 DOM이라고 할 수 있습니다.</p></blockquote>
5051

5152
### Step 4 - 렌더 트리 생성
5253

53-
`DOM 트리``CSSOM 트리`를 결합하여 `렌더 트리`를 생성합니다. 이때, 실제 화면에 표시될 요소만을 선택하여 `렌더 트리`를 형성합니다. 즉, `display: none` 속성이 적용된 요소는 `렌더 트리`에 포함되지 않습니다. 반면에 `visibility: hidden` 속성이 적용된 요소는 공간을 차지합니다.
54+
`DOM 트리``CSSOM 트리`를 결합하여 `렌더 트리`를 생성합니다. 이때, 실제 화면에 표시될 요소만을 선택하여 `렌더 트리`를 형성합니다. 즉, `display: none` 속성이 적용된 요소는 `렌더 트리`에 포함되지 않습니다. 반면에 `visibility: hidden` 속성이 적용된 요소는 공간을 차지하므로 `렌더 트리`에 포함됩니다.
5455

5556
### Step 5 - 레이아웃/리플로우(Layout/Reflow)
5657

5758
`렌더 트리`가 생성되면 각 노드의 정확한 위치와 크기를 계산하는 레이아웃(또는 리플로우) 단계가 시작됩니다. 이 과정에서 `상대적 단위(%, em, rem 등)`를 실제 px 단위로 변환하며, 요소의 박스 모델(margin, padding, border 등)을 고려하여 최종 배치가 결정됩니다.
5859

5960
### Step 6 - 페인팅(Painting)
6061

61-
계산된 레이아웃 정보를 바탕으로 브라우저는 각 요소를 px 단위로 변환하며, 실제 화면에 그리는 페인팅 단계를 실행합니다. 이 때, 각 요소의 배경, 테두리, 글자 등을 그리게 됩니다. 이 과정에서 브라우저는 성능 최적화를 위해 요소를 독립적인 레이어(Layer)로 분리하여 렌더링합니다. 이는 성능 저하를 초래할 수 있는 `레이아웃 스래싱(Layout Thrashing)`을 방지하기 위함입니다.
62+
브라우저는 계산된 레이아웃 정보를 바탕으로 각 요소를 실제 화면에 그리는 페인팅 단계를 실행합니다. 이 때, 각 요소의 배경, 테두리, 글자 등을 그리게 됩니다. 이 과정에서 브라우저는 성능 최적화를 위해 요소를 독립적인 `레이어(Layer)`로 분리하여 렌더링합니다. 이는 성능 저하를 초래할 수 있는 `레이아웃 스래싱(Layout Thrashing)`을 방지하기 위함입니다.
6263

6364
<blockquote class="prompt-info"><p><strong><u>Info.</u></strong><br>
6465
<b>레이아웃 스레싱(Layout Thrashing)</b>이란 웹 페이지에서 JavaScript가 <b>반복적으로 DOM을 읽고 쓰는 작업을 수행</b>할 때, 브라우저가 불필요하게 <b>레이아웃 계산을 여러 번 강제로 실행</b>하며 성능이 급격히 저하되는 현상을 말합니다.</p></blockquote>

0 commit comments

Comments
 (0)