렌더링(Rendering)이란?
렌더링은 데이터(코드, 상태, 콘텐츠)를 시각적인 출력(UI)으로 변환하는 과정을 의미합니다.
웹 개발에서는 주로 HTML/CSS/JavaScript를 브라우저가 해석해 화면에 그리는 과정을 말하며, 프론트엔드 프레임워크(React, Vue 등)에서는 가상 DOM과 결합해 효율적으로 화면을 업데이트하는 기술을 포함합니다.
1. 웹에서의 렌더링 유형
(1) 서버 사이드 렌더링 (SSR, Server-Side Rendering)
- 서버에서 HTML을 생성해 클라이언트에 전달합니다.
- 장점: 초기 로딩 빠름, SEO 친화적.
- 예: Next.js, Nuxt.js, 전통적인 PHP/JSP 웹사이트.
sequenceDiagram
Client->>Server: 페이지 요청
Server->>Database: 데이터 조회
Server->>Client: 완성된 HTML 전송
Client->>Browser: 화면 표시
(2) 클라이언트 사이드 렌더링 (CSR, Client-Side Rendering)
- 브라우저(클라이언트)에서 JavaScript로 동적 UI 생성합니다.
- 장점: 인터랙션 후 화면 전환 빠름.
- 단점: 초기 로딩 느림, SEO 문제 가능성.
- 예: React, Vue, SPA(Single Page Application).
sequenceDiagram
Client->>Server: 최소한의 HTML 요청
Server->>Client: 빈 HTML + JS 번들 전송
Client->>Browser: JS 실행 후 DOM 동적 생성
(3) 정적 사이트 생성 (SSG, Static Site Generation)
- 빌드 시점에 미리 HTML 생성합니다.
- 예: Gatsby, Hugo, 블로그/문서 사이트.
2. 렌더링 프로세스 (브라우저 기준)
- HTML 파싱 → DOM 트리 생성.
- CSS 파싱 → CSSOM 트리 생성.
- DOM + CSSOM 결합 → 렌더 트리(Render Tree) 생성.
- 레이아웃 계산 (Reflow): 요소의 크기/위치 결정.
- 페인팅 (Repaint): 픽셀 단위로 화면에 그리기.
graph TD
A[HTML] --> B(DOM 트리)
C[CSS] --> D(CSSOM 트리)
B --> E(렌더 트리)
D --> E
E --> F[레이아웃]
F --> G[페인팅]
3. 프론트엔드 프레임워크와 렌더링
- React/Vue: 가상 DOM을 사용해 실제 DOM 조작을 최소화합니다.
- 변경된 부분만 비교(Diffing 알고리즘) 후 효율적으로 업데이트합니다.
- 최적화 기술:
- Memoization:
React.memo,useMemo. - Lazy Loading: 동적 임포트로 초기 로딩 시간 감소.
- Memoization:
4. 렌더링 관련 핵심 용어
- 리플로우(Reflow): 레이아웃 재계산 (예: 창 크기 변경).
- 리페인트(Repaint): 시각적 스타일 변경 (예: 색상 수정).
- 하이드레이션(Hydration): SSR된 HTML에 JavaScript 이벤트/상태를 연결하는 과정.
5. 렌더링 최적화 팁
- CSS:
transform,opacity는 리플로우 없이 변경 가능. - JavaScript:
requestAnimationFrame으로 애니메이션 최적화. - React: 불필요한 리렌더링 방지 (
key적절히 사용).
⚡ 요약
- 렌더링은 "코드 → 화면" 변환 과정입니다.
- SSR vs CSR vs SSG는 목적에 따라 선택합니다.
- 가상 DOM은 성능을 위해 변경 사항만 실제 DOM에 반영합니다.
- "60fps 유지"가 렌더링 최적화의 핵심 목표입니다.
💡 "렌더링은 웹의 마지막 마일을 책임지는 과정입니다."
브라우저와 프레임워크는 이 과정을 효율적으로 만들기 위해 끊임없이 진화 중입니다. 🚀
'프로그래머로의 여정' 카테고리의 다른 글
| 라우팅(Routing)과 리스너(Listener) (0) | 2025.08.05 |
|---|---|
| ipcRenderer.on(channel, listener)에서 channel (0) | 2025.08.05 |
| GitHub에서 효과적인 이슈(Issues)를 작성하는 방법 (1) | 2025.06.14 |
| XSS(Cross-Site Scripting) 공격 (1) | 2025.06.14 |
| DOM 프로퍼티(Property)의 의미와 역할 (1) | 2025.06.09 |