빌드 시점에 정적 페이지를 생성하는 SSG(Static Site Generation)의 장점을 유지하면서, 일정 시간마다 페이지를 백그라운드에서 새롭게 생성하는 기술. 전체 사이트를 다시 빌드하지 않고도 특정 페이지만 업데이트할 수 있어 매우 효율적.
기본 문법
getStaticProps 함수 내부에 revalidate 속성을 초 단위로 설정.
JavaScript
export async function getStaticProps() {
const data = await fetchData();
return {
props: { data },
revalidate: 60, // 60초마다 페이지 재생성 여부 확인
};
}
localStorage나 쿠키 등에 접근 불가.기본 ISR은 설정한 '시간'이 지나야만 갱신되지만, On-Demand ISR은 '데이터가 변경된 바로 그 순간' 개발자가 직접 갱신을 요청하는 방식. 시간 기반의 불확실성을 제거하고 즉각적인 데이터 일관성 보장.
API Route를 생성하여 res.revalidate() 메서드 실행.
// pages/api/revalidate.js
export default async function handler(req, res) {
// 특정 경로(예: /posts/1)를 강제로 다시 생성
await res.revalidate('/posts/1');
return res.json({ revalidated: true });
}
핵심 요약
- ISR: 정해진 시간 간격에 따라 백그라운드에서 정적 페이지를 자동으로 갱신하는 방식.
- On-Demand ISR: 특정 이벤트 발생 시 API 호출을 통해 즉각적으로 페이지를 재생성하는 방식.
- 최적의 선택: 데이터 변경 주기가 일정하면 ISR, 즉각 반영이 중요하면 On-Demand ISR 사용 권장.
출처: 한 입 크기로 잘라먹는 Next.js(v15)