웹 브라우저가 원본 HTML 문서를 읽어들인 후, 스타일을 입히고 대화형 페이지로 만들어 뷰포트(Viewport)에 표시하기까지의 전체 과정을 의미합니다.
HTML 문서 → 파싱 → DOM 트리 → CSSOM 트리 → 렌더 트리 → 레이아웃 → 페인트
브라우저의 렌더링 엔진이 서버로부터 받은 HTML, CSS 파일을 해석하는 과정입니다.
브라우저의 렌더링 엔진은 HTML 문서를 파싱하여 DOM 트리를 만듭니다.
💡 DOM(Document Object Model)
HTML 요소의 구조화된 표현을 제공하며, 문서 상호작용을 돕는 방법을 제공합니다.
<!-- HTML 코드 예시 -->
<html>
<body>
<div>
<p>Hello World!</p>
</div>
</body>
</html>
Document
└── <html>
└── <body>
└── <div>
└── <p>
└── Text: "Hello World!"
브라우저의 렌더링 엔진이 <style> 태그를 만나면:
💡 CSSOM(Cascading Style Sheets Object Model)
HTML 요소들과 연관된 스타일 정보의 구조화된 표현을 제공합니다.
HTML 파싱 중 <script> 태그나 외부 스크립트 참조를 만나면:
⚠️ 주의: 이 과정은 DOM 트리 구성 중간에 일어날 수 있습니다!
DOM 트리 + CSSOM 트리 = 렌더 트리 🌳
렌더 트리는:
display: none인 요소는 제외)렌더 트리가 형성되면:
마지막 단계! 렌더링 엔진이 페인트 이벤트를 발생시킵니다:
컴퓨터 과학에서 특정 형식으로 구성된 데이터를 분석하고 그 의미를 이해하는 과정입니다.
브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 과정
파싱된 결과는 보통 노드 트리(Node Tree) 형식으로 구성됩니다.
(파싱 트리, 문법 트리 등으로도 불림)
브라우저가 HTML 문서를 받아 DOM 트리를 생성하는 과정
<div>
<p>Hello</p>
</div>
⬇️ 파싱 후
Document
└── <html>
└── <body>
└── <div>
└── <p>
└── Text: "Hello"
브라우저가 자바스크립트 코드를 다음으로 변환:
자바스크립트 엔진(V8, SpiderMonkey 등)이 이 파싱 과정을 통해 코드를 실행합니다.
파싱이 완료되어야:
Abstract Syntax Tree(추상 구문 트리)는 컴퓨터 프로그램의 소스 코드를 구문 분석하여 계층적 트리 구조로 표현한 것입니다.
| 문제 | 해결 |
|---|---|
| 자바스크립트 코드는 사람이 읽기 쉽게 작성됨 | 컴퓨터가 이해하고 실행하려면 구조 파악 필요 |
| 구문적 구조가 명확하지 않음 | AST로 계층적 표현 → 엔진이 쉽게 분석 |
| 최적화가 어려움 | AST 기반으로 다양한 최적화 수행 가능 |
{} 같은 구문적 요소는 제외 가능각 노드는 특정한 구문 요소를 나타냅니다:
| 구성요소 | 설명 | 예시 |
|---|---|---|
| Node(노드) | 프로그램의 각 구성요소 | 변수, 연산자, 함수 호출 등 |
| Edge(엣지) | 노드들 간의 관계 | 부모-자식 관계로 연결 |
a = b + 1;
AssignmentExpression
├── Identifier: a
└── BinaryExpression
├── Identifier: b
└── Literal: 1
각 요소의 의미:
a, 오른쪽: b + 1)ab1AST는 다양한 컴파일러와 인터프리터에서 핵심 역할을 합니다:
| 활용 분야 | 설명 |
|---|---|
| 구문 분석 | 소스 코드를 구문적으로 분석하여 구조화 |
| 코드 변환 | 소스 코드를 다른 형식으로 변환하거나 최적화 |
| 코드 분석 | 프로그램의 구조와 동작을 이해하고 분석 |
| 코드 생성 | 새로운 소스 코드나 바이트코드를 생성 |
AST를 기반으로 자바스크립트 엔진이 수행하는 최적화:
| 개념 | 설명 |
|---|---|
| CRP | 브라우저가 HTML을 화면에 렌더링하는 전체 과정 (7단계) |
| 파싱 | 코드를 브라우저가 이해할 수 있는 구조로 변환 |
| DOM/CSSOM | HTML과 CSS의 구조화된 표현 |
| AST | 자바스크립트 코드의 계층적 트리 구조 |
| 렌더 트리 | 화면에 표시될 요소들의 최종 트리 |