OPEN HYPER STEP
← 목록으로 (stack-analysis)
STACK-ANALYSIS · 94 / 120
stack-analysis
CHAPTER 94 / 120
읽기 약 2
FUNCTION

렌더링 전략: SSR vs SSG vs ISR vs CSR 선택


핵심 개념

4가지 전략 비교·결정 트리·Next.js App Router — 페이지별 최적 전략.

본문

4가지 전략

📋 코드 (22줄)
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 결정

TSX📋 코드 (30줄)
// 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} />;
}

페이지별 결정 매트릭스

📋 코드 (8줄)
랜딩 페이지     → SSG (빌드 타임 + CDN)
블로그 글       → SSG + ISR (작성 후 자동 갱신)
상품 목록       → ISR (60초 revalidate)
상품 상세       → ISR (3600초 revalidate)
카트           → SSR (사용자별 + 실시간)
체크아웃        → SSR + CSR 혼합
대시보드        → CSR (인증 + 인터랙션)
관리자 페이지    → CSR (백오피스)

동적 vs 정적 자동 판단 (Next.js)

TSX📋 코드 (11줄)
// 정적 (빌드 타임 prerender)
- fetch 캐시 가능
- cookies/headers 호출 X
- searchParams 사용 X
- generateStaticParams 정적

// 동적 (요청마다 SSR)
- cookies() / headers() 호출
- searchParams 동적 사용
- fetch with cache: 'no-store'
- 동적 라우트 파라미터 검증

SSG + 클라이언트 데이터 (Hydration)

TSX📋 코드 (14줄)
// 정적 페이지 + 동적 부분
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 구현 (정확)

TSX📋 코드 (20줄)
// 빌드 타임 정적 + 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 — 대규모 페이지

TSX📋 코드 (26줄)
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가지

📋 코드 (8줄)
랜딩 페이지 (대중에게 보여지는):
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