Route Segment Config
Route Segment 옵션을 사용하면 Page, Layout 또는 Route Handler의 동작을 직접 내보내는 다음 변수를 통해 구성할 수 있습니다:
| Option | Type | Default |
|---|---|---|
experimental_ppr | 'true' | 'false' | |
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 0 | number | false |
fetchCache | 'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store' | 'auto' |
runtime | 'nodejs' | 'edge' | 'nodejs' |
preferredRegion | 'auto' | 'global' | 'home' | string | string[] | 'auto' |
maxDuration | number | Set by deployment platform |
Options
experimental_ppr
레이아웃이나 페이지에 대해 Partial Prerendering (PPR)을 활성화합니다.
export const experimental_ppr = true
// true | falseexport const experimental_ppr = true
// true | falsedynamic
레이아웃이나 페이지의 동적 동작을 완전한 정적 또는 완전한 동적으로 변경합니다.
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'알아두면 좋은 점:
app디렉터리의 새로운 모델은pages디렉터리에서 페이지 수준의getServerSideProps및getStaticProps의 이진 전부 또는 전무 모델보다fetch요청 수준에서 세밀한 캐싱 제어를 선호합니다.dynamic옵션은 이전 모델로 다시 선택할 수 있는 편리한 방법을 제공하며, 더 간단한 마이그레이션 경로를 제공합니다.
-
'auto'(기본값): 가능한 한 많이 캐시하여 어떤 컴포넌트도 동적 동작을 선택하지 못하게 합니다. -
'force-dynamic': 동적 렌더링을 강제하여 각 사용자 요청 시 라우트를 렌더링합니다. 이 옵션은 다음과 같습니다:pages디렉터리의getServerSideProps().- 레이아웃이나 페이지의 모든
fetch()요청에{ cache: 'no-store', next: { revalidate: 0 } }를 설정합니다. - 세그먼트 구성을
export const fetchCache = 'force-no-store'로 설정합니다.
-
'error': 동적 함수나 캐시되지 않은 데이터를 사용하는 컴포넌트가 있으면 오류를 발생시켜 레이아웃이나 페이지를 정적 렌더링하고 데이터를 캐시합니다. 이 옵션은 다음과 같습니다:pages디렉터리의getStaticProps().- 레이아웃이나 페이지의 모든
fetch()요청에{ cache: 'force-cache' }를 설정합니다. - 세그먼트 구성을
fetchCache = 'only-cache', dynamicParams = false로 설정합니다. dynamic = 'error'는dynamicParams의 기본값을true에서false로 변경합니다.generateStaticParams에 의해 생성되지 않은 동적 매개변수에 대해 동적 렌더링 페이지로 다시 선택하려면dynamicParams = true를 수동으로 설정할 수 있습니다.
-
'force-static':cookies(),headers()및useSearchParams()가 빈 값을 반환하도록 강제하여 레이아웃이나 페이지를 정적 렌더링하고 데이터를 캐시합니다.
알아두면 좋은 점:
dynamicParams
generateStaticParams으로 생성되지 않은 동적 세그먼트가 방문될 때의 동작을 제어합니다.
export const dynamicParams = true // true | false,export const dynamicParams = true // true | false,true(기본값):generateStaticParams에 포함되지 않은 동적 세그먼트가 필요에 따라 생성됩니다.false:generateStaticParams에 포함되지 않은 동적 세그먼트는 404를 반환합니다.
알아두면 좋은 점:
- 이 옵션은
pages디렉터리의getStaticPaths의fallback: true | false | blocking옵션을 대체합니다.- 처음 방문할 때 모든 경로를 정적으로 렌더링하려면
generateStaticParams에서 빈 배열을 반환하거나export const dynamic = 'force-static'을 사용해야 합니다.dynamicParams = true일 때, 세그먼트는 Streaming Server Rendering을 사용합니다.dynamic = 'error'및dynamic = 'force-static'이 사용되면,dynamicParams의 기본값이false로 변경됩니다.
revalidate
레이아웃이나 페이지의 기본 재검증 시간을 설정합니다. 이 옵션은 개별 fetch 요청에서 설정된 revalidate 값을 덮어쓰지 않습니다.
export const revalidate = false
// false | 0 | numberexport const revalidate = false
// false | 0 | numberfalse(기본값): 동적 함수가 사용되기 전에cache옵션을force-cache로 설정하거나 발견된fetch요청을 캐시하려는 기본적인 판단입니다. 이는revalidate: Infinity와 의미적으로 동일하여 리소스를 무기한 캐시해야 함을 의미합니다. 개별fetch요청은 여전히cache: 'no-store'또는revalidate: 0을 사용하여 캐시를 피하고 라우트를 동적으로 렌더링할 수 있습니다. 또는revalidate를 기본값보다 낮은 양수로 설정하여 라우트의 재검증 빈도를 높일 수 있습니다.0: 동적 함수나 캐시되지 않은 데이터 페치가 발견되지 않더라도 레이아웃이나 페이지가 항상 동적으로 렌더링되도록 합니다. 이 옵션은cache옵션을 설정하지 않은fetch요청의 기본값을'no-store'로 변경하지만,'force-cache'를 선택하거나 양수revalidate를 사용하는fetch요청은 그대로 둡니다.number: (초 단위) 레이아웃이나 페이지의 기본 재검증 빈
도를 n 초로 설정합니다.
알아두면 좋은 점:
- 재검증 값은 정적으로 분석할 수 있어야 합니다. 예를 들어
revalidate = 600은 유효하지만revalidate = 60 * 10은 유효하지 않습니다.runtime = 'edge'를 사용하는 경우 재검증 값을 사용할 수 없습니다.
Revalidation Frequency
- 단일 라우트의 각 레이아웃 및 페이지에 대한 가장 낮은
revalidate가 전체 라우트의 재검증 빈도를 결정합니다. 이는 자식 페이지가 부모 레이아웃만큼 자주 재검증되도록 보장합니다. - 개별
fetch요청은 라우트의 기본revalidate보다 낮은revalidate를 설정하여 전체 라우트의 재검증 빈도를 높일 수 있습니다. 이를 통해 특정 라우트에 대해 일부 기준에 따라 더 자주 재검증할 수 있도록 동적으로 선택할 수 있습니다.
fetchCache
이 옵션은 기본 동작을 무시해야 할 경우에만 사용해야 하는 고급 옵션입니다.
기본적으로 Next.js는 동적 함수가 사용되기 전에 도달 가능한 모든 fetch() 요청을 캐시하며, 동적 함수가 사용된 후 발견된 fetch 요청은 캐시하지 않습니다.
fetchCache를 사용하면 레이아웃이나 페이지의 모든 fetch 요청의 기본 cache 옵션을 재정의할 수 있습니다.
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store''auto'(기본값): 동적 함수 이전의fetch요청을 해당cache옵션으로 캐시하고, 동적 함수 이후의fetch요청을 캐시하지 않는 기본 옵션입니다.'default-cache': 모든cache옵션을fetch에 전달할 수 있도록 하지만, 옵션이 제공되지 않은 경우cache옵션을'force-cache'로 설정합니다. 이는 동적 함수 이후의fetch요청도 정적으로 간주합니다.'only-cache': 모든fetch요청이 캐싱을 선택하도록 보장하며, 옵션이 제공되지 않은 경우 기본값을cache: 'force-cache'로 변경하고,cache: 'no-store'를 사용하는 모든fetch요청에 대해 오류를 발생시킵니다.'force-cache': 모든fetch요청이 캐싱을 선택하도록 보장하며, 모든fetch요청의cache옵션을'force-cache'로 설정합니다.'default-no-store': 모든cache옵션을fetch에 전달할 수 있도록 하지만, 옵션이 제공되지 않은 경우cache옵션을'no-store'로 설정합니다. 이는 동적 함수 이전의fetch요청도 동적으로 간주합니다.'only-no-store': 모든fetch요청이 캐시되지 않도록 보장하며, 옵션이 제공되지 않은 경우 기본값을cache: 'no-store'로 변경하고,cache: 'force-cache'를 사용하는 모든fetch요청에 대해 오류를 발생시킵니다.'force-no-store': 모든fetch요청이 캐시되지 않도록 보장하며, 모든fetch요청의cache옵션을'no-store'로 설정합니다. 이는 모든fetch요청을 요청 시마다 다시 페치하게 합니다, 비록force-cache옵션을 제공하더라도.
Cross-route segment behavior
- 단일 라우트의 각 레이아웃 및 페이지에 설정된 모든 옵션은 서로 호환되어야 합니다.
'only-cache'와'force-cache'가 모두 제공된 경우,'force-cache'가 우선합니다.'only-no-store'와'force-no-store'가 모두 제공된 경우,'force-no-store'가 우선합니다. force 옵션은 라우트 전체의 동작을 변경하므로 단일 세그먼트에'force-*'가 있으면'only-*'로 인해 발생하는 오류를 방지합니다.'only-*'및'force-*'옵션의 의도는 전체 라우트가 완전히 정적이거나 완전히 동적이 되도록 보장하는 것입니다. 이는 다음을 의미합니다:- 단일 라우트에서
'only-cache'와'only-no-store'의 조합은 허용되지 않습니다. - 단일 라우트에서
'force-cache'와'force-no-store'의 조합은 허용되지 않습니다.
- 단일 라우트에서
- 자식 세그먼트가
'auto'또는'*--cache'를 제공하는 경우, 부모는'default-no-store'를 제공할 수 없습니다. 이는 동일한 fetch가 다른 동작을 하게 만들 수 있기 때문입니다.
- 일반적으로 공유 부모 레이아웃을
'auto'로 두고 자식 세그먼트가 다르게 설정되는 경우 옵션을 사용자 정의하는 것이 좋습니다.
runtime
애플리케이션을 렌더링할 때 Node.js 런타임을 사용하는 것을 권장하며, 미들웨어에는 Edge 런타임을 사용하는 것이 유일한 지원 옵션입니다.
export const runtime = 'nodejs'
// 'nodejs' | 'edge'export const runtime = 'nodejs'
// 'nodejs' | 'edge''nodejs'(기본값)'edge'
다양한 런타임에 대한 자세한 내용은 여기에서 확인하세요.
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']preferredRegion의 지원 여부와 지원되는 지역은 배포 플랫폼에 따라 다릅니다.
알아두면 좋은 점:
preferredRegion이 지정되지 않은 경우, 가장 가까운 부모 레이아웃의 옵션을 상속합니다.- 루트 레이아웃의 기본값은
all지역입니다.
maxDuration
기본적으로 Next.js는 서버 측 로직(페이지 렌더링 또는 API 처리)의 실행을 제한하지 않습니다.
배포 플랫폼은 Next.js 빌드 출력의 maxDuration을 사용하여 특정 실행 제한을 추가할 수 있습니다.
예: Vercel (opens in a new tab).
참고: 이 설정은 Next.js 13.4.10 이상이 필요합니다.
export const maxDuration = 5export const maxDuration = 5알아두면 좋은 점:
- Server Actions를 사용하는 경우, 페이지 수준에서
maxDuration을 설정하여 페이지에서 사용하는 모든 Server Actions의 기본 시간 초과를 변경합니다.
generateStaticParams
generateStaticParams 함수는 동적 라우트 세그먼트와 결합하여 요청 시점이 아닌 빌드 시점에 정적으로 생성될 라우트 세그먼트 매개변수 목록을 정의하는 데 사용할 수 있습니다.
자세한 내용은 API 참조를 참조하세요.