업데이트: 2026.03.17
Caching Strategy
동적(Dynamic) 렌더링
동적 렌더링을 사용하면 사용자가 요청하는 시점에 해당 경로(Route)가 렌더링된다. 이는 페이지 내에서 쿠키, 헤더, URL 검색 파라미터와 같이 매 요청마다 달라지는 정보를 참조할 때 발생한다.
다음과 같은 API나 옵션을 사용하는 경로는 자동으로 동적 경로로 전환된다.
- cookies, headers: 사용자 브라우저의 인증이나 설정 정보 참조
- connection: 네트워크 연결 상태 확인
- draftMode: 초안 문서 미리보기 모드 활성 시
- searchParams (props): URL의 쿼리 스트링 사용 시
- unstable_noStore: 캐싱을 명시적으로 거부할 때
- fetch에 { cache: 'no-store' } 옵션을 사용한 경우 (기본값)
동적 경로는 전체 경로(Full Route) 단위로 캐싱되지 않는다. 하지만 페이지 내부에서 발생하는 개별 데이터 요청(Data Request)에 대해서는 여전히 데이터 캐시를 활용해 성능을 최적화할 수 있다.
- 설정 (옵션): 기본값 (또는 cache: 'no-store' 명시)
- 작동 시점: 사용자가 페이지에 접속할 때마다 실시간 생성 (Runtime)
- 성능: 보통 (네트워크 환경 및 외부 API/DB의 응답 속도에 직접적인 영향을 받음)
- 데이터 상태: 매 요청마다 새로 가져오므로 항상 최신 상태를 유지
- 특징: 사용자 맞춤형 정보나 실시간 데이터 변경이 잦은 페이지에 필수적이다.
정적(Static) 렌더링
정적 렌더링을 사용하면 경로는 빌드 시점에 생성되거나, 데이터 재검증(Revalidation)이 일어난 후 백그라운드에서 다시 렌더링된다. 이렇게 생성된 결과는 캐시에 저장되어, 이후 발생하는 모든 요청에서 동일하게 재사용할 수 있다. 특히 정적 경로는 전체 경로 캐시(Full Route Cache)에 완전히 저장되어 매우 빠른 응답 속도를 보장한다.
const res = await fetch(URL, {
cache: 'force-cache',
});
const timeData = await res.json();
- 설정 (옵션): cache: 'force-cache' 사용
- 작동 시점: 배포를 위한 빌드 단계에서 미리 생성 (Build Time)
- 성능: 매우 빠름 (이미 완성된 파일을 CDN에서 즉시 전송하므로 지연 시간이 거의 없음)
- 데이터 상태: 빌드 시점의 데이터로 고정 (다시 빌드하거나 재검증하기 전까지 유지)
nextjs#server-components#dynamic-rendering