공식문서 : https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config
Route Segment 옵션은 Page, Layout 또는 Route Handler의 동작을 구성할 수 있도록 다음 변수들을 직접 내보내는 것을 허용합니다.
Option | Type | Default |
---|---|---|
dynamic | 'auto' or 'force-'dynamic' or 'error' or 'force-static' |
'auto' |
dynamicParams | boolean |
true |
revalidate | false or 'force-cache' or 0 or number |
false |
fetchCache | 'auto' or 'daefault-cache' or 'only-cache' or 'force-cache' or 'force-no-store' or 'default-no-store' or 'only-no-store' |
'auto' |
runtime | 'nodejs' or 'edge' |
nodejs |
preferredRegion | 'auto' or 'global' or 'home' or string or string[] |
'auto' |
//layout.js/page.js/route.js
export const dynamic = 'auto';
export const dynamicParams = true;
export const revalidate = false;
export const fetchCache = 'auto';
export const runtime = 'nodejs';
export const preferredRegion = 'all';
export default function MyComponent() {}
현재 구성 옵션의 값은 정적으로(statically) 분석 가능해야 합니다. 예를 들어 **revalidate = 600
**은 유효하지만 revalidate = 60 * 10
은 유효하지 않습니다.
dynamic
레이아웃이나 페이지의 동적 동작(dynamic behavior)을 완전히 정적(static)이나 완전히 동적(dynamic) 으로 변경할 수 있습니다.
//layout.js OR page.js OR route.js
export const dynamic = 'auto';
//'auto' | 'force-dynamic' | 'error' | 'force-static'
참고 : App
디렉토리의 새 모델은 pages
디렉토리의 getServerSideProps
및 getStaticProps
의 이진(all-or-nothing) 모델보다는 fetch
요청 수준에서 세밀한 캐싱 제어를 선호합니다. dynamic
옵션은 편의성을 위해 이전 모델로 다시 돌아갈 수 있는 방법이며, 더 간단한 마이그레이션 경로를 제공합니다.
마이그레이션(migration)은 기존 시스템이나 소프트웨어에서 새로운 시스템이나 소프트웨어로의 전환을 의미합니다. 일반적으로 이전 버전에서 새로운 버전으로의 업그레이드, 데이터 이전, 코드 변경 등을 포함합니다. 마이그레이션은 기존 시스템을 더 효율적이거나 현대적인 기술에 맞게 업데이트하는 과정이며, 주로 호환성 문제를 해결하고 기능 개선을 위해 수행됩니다.
-
‘auto’
(default) : 기본 옵션은 가능한 한 많은 캐싱(cache)을 수행하면서도 모든 컴포넌트가 동적 동작을 선택할 수 있도록 방지하지 않는 것입니다. -
‘force-dynamic’
: 모든 fetch 요청의 캐싱을 비활성화하고 항상 다시 유효성을 검사하여 레이아웃이나 페이지의 동적 렌더링과 동적 데이터 가져오기를 강제로 실행합니다. 이 옵션은 다음과 동일합니다. :- pages 디렉토리 안의
getStaticProps()
- 레이아옷이나 페이지의 모든 fetch() 요청의 옵션을 { cache: ‘force-cache’ } 로 설정
- segment 구성을
fetchCache = ‘only-cache’
,dynamicParams=false
로 설정
- pages 디렉토리 안의
-
‘error’
: 동적 함수나 동적 데이터 가져오기를 사용하는 컴포넌트가 있을 경우 오류를 발생시켜 레이아웃이나 페이지의 정적 렌더링 및 정적 데이터 가져오기를 강제로 수행합니다. 이 옵션은 다음과 동일합니다.pages
디렉토리의getStaticProps()
메서드 사용- 레이아웃이나 페이지 내의 모든
fetch()
요청의 옵션을{cache: 'force-cache'}
로 설정. - 세그먼트 설정을
fetchCache = 'only-cache', dynamicParams = false.
- 참고 :
dynamic = ‘error’
는dynamicParmas
의 기본 값을true
에서false
로 변화 시킨다.generateStaticParmas
에서 생성되지 않은 동적 매개변수(dynamic params)에 대해 동적 랜더링을 다시 사용하려면dynamicParams = true
로 수동으로 설정할 수 있습니다.
-
‘force-static’
*: 레이아웃(layout)이나 페이지의 정적 렌더링(static rendering)과 정적 데이터 가져오기(static data fetching)를 강제로 수행하기 위해 cookies() , headers(), useSearchParams() 함수가 빈 값을 반환하도록 만드는 옵션입니다.
getServerSideProps
와 getStaticProps
에서 dynamic : ‘force-dynamic’
과 dynamic: ‘error’
로 ‘마이그레이션 하는 방법’에서 찾을 수 있습니다.
dynamic segment가 방문 했을 때 무슨 일이 있는지 컨트롤 하는 것은 generateStaticParmas에 구성되어 있지 않다.
//layout.js/page.js/route.js
export const dynamicParmas = true; // true | false
- true (default) :
generateStaticParams
를 포함하지 않는 Dynamic segments는 요구에 구성되어 있습니다. - false :
generateStaticParams
를 포함하지 않는 Dynamic segements 는 404를 반환합니다.
- 해당 옵션은
pages
디렉토리의getStaticPaths
의fallback:true | false | blocking
옵션을 대체합니다. dynamicParams = true
일 때, 해당 segment는 Streaming Server Rendering 을 사용합니다.- 만약
dynamic = ‘error’
와dynamic = ‘force-static’
을 사용한다면 이는dynamicParams
의 기본 값을false
로 변경합니다.
레이아웃 페이지의 기본 재검증 시간을 설정합니다. 이 옵션은 개별 fetch 요청에서 설정된 재검증 값을 덮어쓰지 않습니다.
//layout.js/page.js/route.js
export const revalidate = false;
//false | 'force-cache' | 0 | number
-
false : (default)
‘force-cache’
로cache
옵션을 설정한 모든fetch
요청 또는 동적 함수 사용 전에 발견된 요청을 캐시하는 기본적인 휴리스틱을 사용합니다.revalidate: Infinity
와 의미적으로 동일하며, 이는 해당 리소스가 무기한으로 cache 되어야 함을 의미합니다. 개별fetch
요청에서cache: ‘no-store’
또는revalidae: 0
을 사용하여 캐시를 피하고 해당 경로(route)를 동적으로 랜더링 되도록 할 수 있습니다. 또는revalidate
를 route의 기본 값보다 작은 양수로 설정하여 route의 재검증 빈도를 높일 수 있습니다. -
0 : 동적 함수나 동적 데이터 가져오기(data fetches)가 발견되지 않더라도 항상 레이아웃 (layout) 또는 페이지를 동적으로 렌더링하도록 보장합니다. 이 옵션은 캐시 옵션을 설정하지 않은
fetch
요청의 기본값을'no-store’
로 변경합니다만,‘force-cache’
로 설정되거나 양수재유효성(revalidate)
을 사용하는fetch
요청은 그대로 유지됩니다. -
number : (초 단위) 레이아웃이나 페이지의 기본 재검증 주를
n
초로 설정합니다.
- 동일한 경로 패턴을 가진 각 레이아웃과 페이지의 가장 낮은
revalidate
이 전체 경로(route)의 재 검증 주기를 결정합니다. 이는 자식 페이지도 부모 레이아웃과 동일한 빈도로 재 검증되도록 보장합니다. - 개별
fetch
요청은 route의 기본revalidate
보다 낮은 revalidate 를 설정하여 전체 경로의 재 검증 빈도를 높일 수 있습니다. 이를 통해 특정 기준에 따라 특정 route에 대해 더 자주 재 검증을 선택적으로 수행할 수 있습니다.
-
(아래 내용) 기본 동작을 특정하게 override 해야 할 경우에만 사용되는 advanced option 입니다.
기본적으로 Next.js는 동적 함수가 사용되기 전에 도달 가능한 모든
fetch( )
요청을 캐시하고, 동적 함수가 사용된 후에 발견된 fetch 요청을 캐시하지 않습니다.fetchCache
를 사용하면 레이아웃이나 페이지에서 모든 fetch요청의 기본 캐시 옵션을 재정의할 수 있습니다.//layout.js/page/js/route.js export const fetchCache = 'auto' //'auto' | 'default-cache' | 'only-cache' // 'force-cache' | 'force-no-store' | 'default-no-store'
auto
(default) : 동적 함수 이전에fetch
요청을 캐시하고, 동적 함수 이후의 fetch 요청은 제공하는 캐시옵션에 따라 캐시하지 않습니다.default-cache
: fetch에 임의의 캐시 옵션을 전달 할 수 있지만, 옵션이 제공되지 않으면 캐시 옵션을force-cach
로 설정합니다. 이는 동적 함수 이후의 fetch요청도 정적으로 간주됩니다.only-cache
모든 fetch요청이 캐싱을 사용하도록 하기 위해 기본값을cache : 'force-cache'
로 변경하며, fetch 요청 중cache: "no-store"
를 사용하는 경우 오류를 발생시킵니다.force-cache
: 모든fetch
요청이 캐싱을 하도록 하기 위해 모든 fetch요청의 캐시 옵션을force-cache
로 설정합니다.default-no-store
: fetch에 임의의 캐시 옵션을 전달 할 수 있지만, 옵션이 제공되지 않으면 캐시 옵션을no-store
로 설정합니다. 이는 동적 함수 이전의 fetch요청도 동적으로 간주됩니다.only-no-store
: 모든 fetch요청이 캐싱을 사용하지 않도록 하기 위해 기본값을cache: "no-store"
로 변경하며, fetch요청 중cache: "force-cache"
를 사용하는 경우 오류를 발생시킵니다.force-no-store
: 모든 fetch요청이 캐싱을 사용하지 않도록 하기 위해 모둔 fetch 요청의 캐시 옵션을no-store
로 설정합니다. 이는force-cache
옵션을 제공하더라도 모든 fetch요청이 매 요청마다 다시 가져와야 합니다.
- 단일 경로의 각 레이아웃과 페이지에서 설정된 옵션은 서로 호환되어야 합니다.
only-cache
와force-cache
가 모두 제공되는 경우,force-cache
가 우선합니다.only-no-store
와force-no-store
가 모두 제공되는 경우,force-no-store
가 우선합니다. force 옵션은 경로 전체의 동작을 변경하므로force-*
를 사용하는 단일 세그먼트는only-*
에 의해 발생하는 오류를 방지합니다.- 이러한 옵션의 목적은 경로 전체가 정적이거나 전적으로 동적임을 보장하는 것 입니다.
- 단일 경로(single route)에서
only-cache
와only-no-store
의 조합은 허용되지 않습니다. - 단일 경로(single route)에서
force-cache
와force-no-store
의 조합은 허용되지 않습니다.
- 단일 경로(single route)에서
- 부모가
default-no-store
를 제공하고 자식이auto
또는*-cache
를 제공하는 것은 동일한 fetch 가 다른 동작을 가질 수 있기 때문에 허용되지 않습니다.
- 공유되는 부모 레이아웃을
auto
로 유지하고 자식 세그먼트에서 동작이 분기되는 곳에서 옵션을 사용자 정의하는 것이 일반적으로 권장됩니다.
//layout.js/page.js/route.js
export const runtime = 'node.js'
//'edge' | 'node.js'
- nodejs (default)
- edge
Edge 와 Node.js 런타임에서 더 자세히 알아보세요.
//layout.js/page.js/route.js
export const preferredRegion = 'auto';
//'auto' | 'global' | 'homne' | ['iad1', 'sfo1']
preferredRegion
및 지원되는 regions 은 배포 플랫폼에 따라 달라집니다.
- preferredRegion 이 지정되지 않았다면 이는 가장 가까운 부모 레이아웃의 옵션을 상속받습니다.
- root layout 은 모든 지역(region)을 기본 값으로 갖습니다.
generateStaticParams
함수는 동적 경로 세그먼트와 함께 사용하여, 요청 시간이 아닌 빌드 시간에 정적으로 생성될 라우트 세그먼트 매개변수 목록을 정의하는데 사용될 수 있습니다.
더 자세한 내용은 API 참조에서 확인하세요.