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

ISR + 온디맨드 재검증: 캐시 전략


핵심 개념

fetch revalidate·revalidateTag·on-demand revalidation — 블로그·이커머스 캐시.

본문

fetch + revalidate

TSX📋 코드 (12줄)
// app/posts/[slug]/page.tsx — 서버 컴포넌트
async function getPost(slug: string) {
  const res = await fetch(`https://api.example.com/posts/${slug}`, {
    next: { revalidate: 3600 },  // 1시간마다 재생성
  });
  return res.json();
}

export default async function Page({ params }: { params: { slug: string } }) {
  const post = await getPost(params.slug);
  return <article>{post.content}</article>;
}

tags + revalidateTag (정밀 무효화)

TSX📋 코드 (28줄)
// 데이터 페칭에 태그 부착
async function getPosts() {
  const res = await fetch('https://api.example.com/posts', {
    next: { tags: ['posts'], revalidate: 3600 },
  });
  return res.json();
}

async function getPost(slug: string) {
  const res = await fetch(`https://api.example.com/posts/${slug}`, {
    next: { tags: ['posts', `post-${slug}`] },
  });
  return res.json();
}


// 글 수정 시 — 해당 글만 무효화
'use server';
import { revalidateTag } from 'next/cache';

export async function updatePost(slug: string, data: any) {
  await fetch(`https://api.example.com/posts/${slug}`, {
    method: 'PATCH',
    body: JSON.stringify(data),
  });
  revalidateTag(`post-${slug}`);  // 이 글만
  // 또는 revalidateTag('posts'); — 모든 글 목록 재생성
}

On-Demand Revalidation API

TSX📋 코드 (19줄)
// app/api/revalidate/route.ts — 외부 CMS에서 호출
import { revalidateTag } from 'next/cache';
import { NextRequest, NextResponse } from 'next/server';

export async function POST(req: NextRequest) {
  const secret = req.headers.get('x-secret');
  if (secret !== process.env.REVALIDATE_SECRET) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
  }

  const { tag } = await req.json();
  revalidateTag(tag);

  return NextResponse.json({ revalidated: true, tag });
}


// CMS webhook → POST /api/revalidate { tag: 'posts' }
// → 즉시 캐시 무효화 + 다음 요청에서 새 데이터

캐시 전략 결정 트리

📋 코드 (9줄)
데이터가 자주 바뀌는가?
├─ 거의 안 바뀜 (회사 소개, 약관)
│   → 빌드 타임 + force-static
├─ 시간당 1~2회 (블로그, 뉴스)
│   → revalidate: 3600
├─ 자주 (이커머스 가격, 재고)
│   → revalidate: 60 + on-demand revalidation
└─ 실시간 (채팅, 알림)
    → cache: 'no-store' 또는 streaming

다음 챕터

CH.16 "미들웨어 실전" — 인증 + 지역화 + A/B 테스트.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 코드의 ISR 캐시 전략 부분을 분석해서
실전 분석 + 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

ISR 캐시 전략 관련 인기 라이브러리/패턴 5개를
비교 분석해서 패턴 추출를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 프로젝트 전체에서 ISR 캐시 전략
최적화 가능 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 프론트엔드 시장의
ISR 캐시 전략 트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
ISR + 온디맨드 재검증: 캐시 전략 이 3가지만 확실히 잡으세요
1.fetch revalidate로 ISR — 빌드 후 자동 재생성
2.tags + revalidateTag = 정밀 무효화 — 변경된 콘텐츠만
3.On-Demand API로 외부 CMS와 통합 — 즉시 반영


공유하기
진행도 15 / 90