stack-analysis
CHAPTER 94 / 120
읽기 약 2분
FUNCTION
렌더링 전략: SSR vs SSG vs ISR vs CSR 선택
핵심 개념
4가지 전략 비교·결정 트리·Next.js App Router — 페이지별 최적 전략.
본문
4가지 전략
SSR (Server-Side Rendering)
- 매 요청마다 서버에서 HTML 생성
- 항상 최신 데이터
- 서버 부하 큼
- 적합: 자주 변경 + 사용자별 데이터
SSG (Static Site Generation)
- 빌드 타임에 HTML 생성
- CDN에서 즉시 응답
- 매우 빠름
- 적합: 마케팅·블로그·문서
ISR (Incremental Static Regeneration)
- SSG + 주기적 재생성
- 빠름 + 최신성 보장
- 적합: 이커머스·뉴스
CSR (Client-Side Rendering)
- 브라우저에서 렌더
- HTML 빈 껍데기 + JS로 채움
- SEO 약함
- 적합: 대시보드·앱Next.js App Router 결정
// 1. 정적 (SSG) — 기본
export default function AboutPage() {
return <h1>About</h1>;
}
// 2. fetch + revalidate (ISR)
async function getPosts() {
const res = await fetch('https://api.example.com/posts', {
next: { revalidate: 3600 }, // 1시간
});
return res.json();
}
// 3. 동적 (SSR) — cache: 'no-store'
async function getCart(userId: string) {
const res = await fetch(`https://api/cart/${userId}`, {
cache: 'no-store',
});
return res.json();
}
// 4. 클라이언트 (CSR)
'use client';
function Dashboard() {
const { data } = useQuery({ queryKey: ['stats'], queryFn: fetchStats });
return <Chart data={data} />;
}페이지별 결정 매트릭스
랜딩 페이지 → SSG (빌드 타임 + CDN)
블로그 글 → SSG + ISR (작성 후 자동 갱신)
상품 목록 → ISR (60초 revalidate)
상품 상세 → ISR (3600초 revalidate)
카트 → SSR (사용자별 + 실시간)
체크아웃 → SSR + CSR 혼합
대시보드 → CSR (인증 + 인터랙션)
관리자 페이지 → CSR (백오피스)동적 vs 정적 자동 판단 (Next.js)
// 정적 (빌드 타임 prerender)
- fetch 캐시 가능
- cookies/headers 호출 X
- searchParams 사용 X
- generateStaticParams 정적
// 동적 (요청마다 SSR)
- cookies() / headers() 호출
- searchParams 동적 사용
- fetch with cache: 'no-store'
- 동적 라우트 파라미터 검증SSG + 클라이언트 데이터 (Hydration)
// 정적 페이지 + 동적 부분
import { headers } from 'next/headers';
export default async function ProductPage({ params }: { params: { id: string } }) {
// SSG — 정적 데이터
const product = await getProduct(params.id);
return (
<div>
<ProductInfo product={product} /> {/* SSG */}
<ClientCart productId={params.id} /> {/* 'use client' — 사용자별 */}
</div>
);
}ISR 구현 (정확)
// 빌드 타임 정적 + 1시간마다 재생성
async function getPost(slug: string) {
const res = await fetch(`https://api/posts/${slug}`, {
next: {
revalidate: 3600,
tags: [`post:${slug}`],
},
});
return res.json();
}
// On-demand revalidation
'use server';
import { revalidateTag } from 'next/cache';
export async function updatePost(slug: string, data: any) {
await db.post.update({ where: { slug }, data });
revalidateTag(`post:${slug}`); // 즉시 무효화
}Streaming SSR — 대규모 페이지
import { Suspense } from 'react';
export default function DashboardPage() {
return (
<div>
<h1>대시보드</h1> {/* 즉시 응답 */}
<Suspense fallback={<HeaderSkeleton />}>
<Header /> {/* 빠른 컴포넌트 */}
</Suspense>
<Suspense fallback={<ChartSkeleton />}>
<SlowChart /> {/* 느린 컴포넌트 (3s) */}
</Suspense>
<Suspense fallback={<TableSkeleton />}>
<SlowTable /> {/* 5s */}
</Suspense>
</div>
);
}
// → TTFB 즉시
// → 빠른 부분 먼저 렌더
// → 느린 부분 스트리밍비교 — 같은 페이지 4가지
랜딩 페이지 (대중에게 보여지는):
SSG: TTFB 50ms, FCP 200ms, LCP 800ms
ISR: TTFB 50ms, FCP 200ms, LCP 800ms (캐시 hit)
SSR: TTFB 500ms, FCP 700ms, LCP 1500ms
CSR: TTFB 200ms, FCP 1500ms, LCP 3000ms (JS 로드 후)
→ 마케팅 페이지는 SSG/ISR 압도적다음 챕터
CH.95 "캐싱 전략: HTTP Cache + CDN + Redis + SWR".
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 코드의 렌더링 전략 부분을 분석해서 실전 분석 + 개선 우선순위를 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
렌더링 전략 관련 베스트 프랙티스 5가지를 비교 분석해서 패턴 추출를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 프로젝트 전체에서 렌더링 전략 최적화 가능 위치를 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 시장의 렌더링 전략 트렌드를 솔직히 알려줘.
⭐ 이것만 기억하세요
렌더링 전략: SSR vs SSG vs ISR vs CSR 선택은 이 3가지만 확실히 잡으세요
1.SSG/ISR 우선 — SSR/CSR은 사용자별·인터랙티브 페이지만
2.Next.js는 fetch 옵션으로 자동 결정 — revalidate, cache 옵션
3.Streaming SSR + Suspense = TTFB 빠름 + 점진 렌더
공유하기
진행도 94 / 120