ISR Cache Lifecycle
요청은 자동으로 발생하지 않으며 직접 보냅니다. 만료 뒤 첫 요청은 기존 버전을 0ms에 받고, 동시에 백그라운드 재생성을 시작합니다. 이 인과 관계를 화살표로 보여줍니다. export const revalidate 기준의 이전 모델이며, cacheComponents에서는 cacheLife가 그 역할을 합니다.
최근 요청 5건 — 항목에 마우스를 올리면 트랙 위 해당 마커가 강조됩니다.
- 시간이 지나도 저절로 재생성되지 않는다incremental-static-regeneration.md:100-101,583 · cacheLife.md:92,112
만료(revalidate)는 "이제 낡았다"는 표시일 뿐이다. 다음 요청이 도착해야 그 요청이 ① 구버전을 0ms에 받고 ② 동시에 백그라운드 재생성을 시작시킨다. 문서도 그 요청을 triggering request라고 부른다. 트래픽이 전혀 없으면 그 페이지는 옛날 버전 그대로 남는다.
- 이전 모델 — cacheComponents 미사용route-segment-config/index.md:19
export const revalidate = 10 기준의 화면이다. 동작 서술은 Next 16에서도 그대로 유효하지만, next.config에 cacheComponents: true를 켜면 revalidate·dynamic·dynamicParams·fetchCache 세그먼트 옵션은 16.0.0에서 제거된다. Cache Components에서는 use cache + cacheLife가 같은 역할을 맡고, 갱신은 revalidateTag/updateTag로 한다.
- expire를 넘기면 그 요청은 기다린다cacheLife.md:93,127
cacheLife는 stale · revalidate · expire 세 값을 갖는다. revalidate만 넘긴 상태에서는 구버전을 주고 뒤에서 갱신하지만, 트래픽이 없어 expire까지 넘기면 다음 요청은 동기 재생성을 기다린다. 이 데모가 그리는 "구버전 즉시 응답"은 revalidate ~ expire 구간의 이야기다.
같은 그룹의 다른 시각화
RSC Streaming Waterfall
Next.js · Streaming서버 청크의 도착 시점과 브라우저 화면이 채워지는 과정을 연결합니다.
App Router Render Tree
Next.js · RoutingURL 세그먼트와 중첩 레이아웃, 렌더 순서를 연결합니다.
Metadata Resolution
Next.js · SEOmetadata 평가 순서와 얕은 병합이 최종 head에 미치는 영향을 확인합니다.
Render Strategy Boundary
Next.js 16 · RenderingSSG·SSR·CSR과 정적 셸·동적 영역의 실행 위치를 비교합니다.