캐시

okkyung·2026년 3월 17일

nextjs

목록 보기
1/13

업데이트: 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

0개의 댓글