브라우저 렌더링 메커니즘
브라우저 렌더링 메커니즘과 성능 최적화의 원리
브라우저의 동작 원리를 깊이 이해하고, 성능에 직접적으로 영향을 미치는 렌더링 단계와 프레임워크 렌더링 전략의 차이를 기술한다.
DOM이란?
- HTML 파싱 → 트리 형태의 Document Object Model 생성
- Tree의 구조적 특성과 접근 비용
DOM 조작의 비용
- DOM API 호출이 layout/reflow/paint에 어떻게 영향을 주는지
Virtual DOM의 개념
- React를 중심으로 설명
- 실제 DOM과 분리된 메모리상의 가상 트리
- diffing algorithm과 reconciliation 방식
Virtual DOM 최적화 전략
- Keyed diff vs Unkeyed diff
- Batching / Fiber Architecture (React 기준)
=======================================================================
Reflow, Repaint, Layout Thrashing의 본질
Reflow와 Repaint 정의
-
Reflow: 레이아웃 변경 (geometry 계산)
-
Repaint: 스타일 변경 (색상, 배경 등) → GPU와 연관
Reflow가 발생하는 조건
- DOM 구조 변경, 스타일 변경, 창 크기 조정 등
Layout Thrashing
-
연속적으로 style/layout 정보를 읽고 다시 쓰는 패턴
-
예시:
for (let el of list) {
el.style.height = el.offsetHeight + "px"; // 읽기 → 쓰기 → 읽기...
}
성능 최적화 전략
- Style 변경은 batch로 처리
- requestAnimationFrame, getBoundingClientRect 최소화
- CSS Containment 사용 (contain: layout)
브라우저의 렌더링 과정: Critical Rendering Path
전체 렌더링 플로우 요약
-
HTML 파싱 → DOM 생성
-
CSS 파싱 → CSSOM 생성
-
DOM + CSSOM → Render Tree
-
Layout (Reflow)
-
Paint
-
Composite → GPU
CRP 최적화를 위한 주요 포인트
-
Render-blocking 리소스 최소화
-
Lazy loading (이미지, 폰트)
-
preload, prefetch, dns-prefetch 태그
Frame Budget 개념
-
60FPS 기준: 16.66ms 안에 모든 연산이 끝나야 함
-
Long Task, Dropped Frame 원인 분석
Hydration과 렌더링 전략 비교 (SSR vs CSR vs SSG)
CSR (Client Side Rendering)
-
JS 다운로드 후 동적 DOM 생성
-
초기 TTI(Time to Interactive)가 늦음
SSR (Server Side Rendering)
-
HTML 사전 생성 → JS Hydration
-
초기 퍼포먼스 좋지만 Hydration 비용이 큼
SSG (Static Site Generation)
-
빌드 타임에 HTML 생성
-
정적 콘텐츠에 최적 (Next.js의 getStaticProps 등)
Hydration이란?
-
HTML은 미리 있지만, 인터랙티브 기능은 client에서 attach
-
React의 Partial Hydration / Streaming SSR 등의 진화 방향
렌더링 전략 선택 기준
기준 | CSR | SSR | SSG |
---|---|---|---|
초기 로딩속도 | 느림 | 빠름 | 매우 빠름 |
SEO | 낮음 | 높음 | 매우 높음 |
콘텐츠 실시간성 | 높음 | 화면 | 낮음 |
부록: Lighthouse와 Chrome DevTools를 활용한 성능 측정 지표
-
TTFB, FCP, LCP, TTI, CLS 정의
-
Layout Shift와 Paint Blocking Time 분석