Web
웹 최적화 기법
2025년 10월 23일
목차
💡 웹사이트의 성능은 사용자 경험(UX) 과 검색엔진 최적화(SEO) 모두에 직접적인 영향을 준다.
불필요한 리소스를 줄이고 렌더링을 효율화하면, 더 빠르고 쾌적한 웹을 만들 수 있다.
🧱 1. 전송 최적화 (Network & Bundle Optimization)
⚙️ 코드 스플리팅 (Code Splitting)
- 사용자가 필요한 페이지의 코드만 로드하도록 분리.
next/dynamic또는React.lazy()를 사용해 불필요한 JS 전송 방지.
⚙️ 트리 셰이킹 (Tree Shaking)
- 사용하지 않는 모듈을 번들에서 제거.
- ESModule(
import/export) 기반에서 자동으로 적용됨.
⚙️ 압축 및 프로토콜
- Gzip / Brotli 압축 활성화 → 전송 크기 절감.
- HTTP/2, HTTP/3 사용 시 다중 요청 처리 속도 개선.
⚙️ CDN (Content Delivery Network)
- 정적 자산(JS, CSS, 이미지 등)을 전 세계 서버에 분산.
- 사용자의 지리적 위치에 따라 가장 가까운 서버에서 빠르게 응답.
🖼️ 2. 이미지 최적화 (Image Optimization)
📏 포맷 최적화
- WebP / AVIF 포맷 사용 → 기존 JPG, PNG보다 30~80% 가벼움.
- 호환성 이슈 대비를 위해 fallback 이미지 준비.
🧩 반응형 이미지 (Responsive Image)
next/image컴포넌트로 기기별 크기 자동 조절.- 고해상도(레티나) 대응 및 lazy-loading 자동 적용.
💤 Lazy Loading
- 화면에 노출되는 시점에만 이미지를 로드.
- 초기 렌더링 부하를 크게 줄임.
🔤 3. 폰트 최적화 (Font Optimization)
✂️ 폰트 서브셋 만들기
- 실제 사용하는 글자만 포함한 subset 폰트 생성.
- 용량 절감 및 로딩 시간 단축.
⏱️ font-display 속성
-
swap설정으로 보이지 않는 텍스트(FOIT) 문제 방지.→ 시스템 폰트로 먼저 보여주고 나중에 교체.
🏠 Self Hosting
- Google Fonts CDN 대신 직접 호스팅.
- 네트워크 지연과 차단 이슈 줄이고 안정적 성능 확보.
🔄 4. 데이터 패칭 최적화 (Data Fetching Optimization)
⚙️ SSR / SSG / ISR 전략
- SSG: 정적 데이터 → 빌드 시 미리 생성
- SSR: 요청 시 서버에서 생성
- ISR: 일정 주기마다 자동 갱신
fetch("https://api.example.com/data", { next: { revalidate: 60 } });🧠 캐싱 활용 (React Query / SWR)
- 데이터 캐싱 + 자동 재검증으로 불필요한 API 호출 방지.
- background revalidation으로 신선한 데이터 유지.
🛰️ Prefetching
- 사용자가 링크에 hover할 때 미리 데이터 패칭.
- 실제 클릭 시 즉시 페이지 표시.
🪄 5. 사전 렌더링 (Pre-rendering)
🧊 Static Rendering
- 빌드 시점에 HTML을 미리 생성 → 첫 화면이 즉시 표시됨.
🔥 Dynamic Rendering
- 요청마다 새 HTML 생성 → 최신 데이터를 항상 표시.
♻️ ISR (Incremental Static Regeneration)
- 정적 + 동적 혼합 형태. 일정 주기마다 자동으로 HTML 갱신.
💧 Streaming Rendering
- 서버에서 HTML을 순차적으로 전송.
- 사용자에게 첫 부분을 빠르게 보여줌.
🧠 6. 캐싱 전략 (Caching Strategy)
📦 HTTP 캐시
Cache-Control,ETag헤더 설정으로 정적 자산 재사용.immutable옵션 사용 시 변경 없는 리소스는 완전히 캐싱.
🪶 Service Worker (PWA)
- 네트워크 요청 없이 로컬에서 캐싱된 데이터 제공.
- 오프라인 접근 및 반복 방문 시 빠른 응답.
⚡ 7. 렌더링 최적화 (Rendering Optimization)
🧩 Critical Rendering Path 단축
- 불필요한 CSS/JS 제거, 렌더 차단 리소스 최소화.
⏳ Lazy Hydration
- 유저 상호작용이 필요한 컴포넌트만 나중에 Hydration.
💧 Suspense + Streaming
- React 18의 Concurrent Rendering으로 체감 속도 향상