stale while revalidate

ISR은 빠른 캐시 응답 뒤에서 정적 페이지를 다시 만든다

사용자는 캐시된 페이지를 즉시 받고, 재검증 시간이 지난 요청은 백그라운드 재생성을 촉발한다. 다음 요청부터 새 HTML이 제공된다.

01

fresh cache

유효 시간 안이면 정적 결과를 즉시 제공한다.

02

stale cache

시간이 지나도 사용자는 기존 페이지를 먼저 받는다.

03

background build

서버가 새 데이터를 읽고 HTML을 다시 만든다.

04

fresh again

업데이트된 캐시가 이후 요청의 기준이 된다.

요청 기준 타임라인

no blocking refresh
build

초기 생성

빌드 시점에 중요한 경로를 SSG로 만든다.

hit

첫 요청

캐시된 HTML을 빠르게 응답한다.

time

주기 만료

revalidate 기준을 넘으면 stale 상태가 된다.

refresh

뒤에서 재생성

사용자 응답을 막지 않고 캐시를 갱신한다.

next

다음 요청

새 정적 결과를 받는다.

설정
동작
적합한 경우
revalidate: 60

60초마다 오래된 캐시를 새로 만든다.

상품, 게시글, 공개 목록처럼 적당한 최신성이 필요한 화면

revalidate: 0

캐시를 쓰지 않아 SSR처럼 동작한다.

항상 최신이어야 하는 데이터, 캐시 위험이 큰 화면

tag/path 재검증

데이터 변경 이벤트로 캐시를 무효화한다.

관리자 수정, CMS 발행, 특정 경로 갱신

latency

응답을 막지 않는다

stale 페이지를 먼저 주므로 빈 화면과 긴 대기를 피한다.

freshness

즉시 최신은 아니다

재검증 주기 안에서는 이전 데이터가 보일 수 있다.

scale

대규모 경로에 맞다

모든 페이지를 매번 빌드하지 않아도 된다.

implementation

확인할 코드 위치

경로 목록

generateStaticParams에서 초기 생성 대상을 정한다.

데이터 요청

fetchnext.revalidate 값을 확인한다.

운영 기준

정적 성능과 데이터 최신성의 허용 범위를 먼저 정한다.