generateStaticParams이란
Next.js에서 동적 라우트(Dynamic Routes)를 정적으로 생성할 때 사용하는 함수입니다. 이 함수는 빌드 타임에 실행되어 어떤 동적 경로를 미리 만들지 결정하는 데 사용됩니다.
왜 필요한가요? 🤔
동적 라우트는 URL에 변수(예: [slug], [id])를 포함하는 경로를 의미합니다. 예를 들어, 블로그의 [slug] 페이지는 post-1, post-2 등 다양한 slug 값을 가질 수 있습니다.
generateStaticParams를 사용하면, 서버가 각 요청에 대해 페이지를 동적으로 렌더링하는 대신, 빌드 시점에 모든 가능한 slug 값에 대한 페이지를 미리 생성할 수 있습니다. 이렇게 미리 만들어진 HTML 파일은 CDN에 배포되어 매우 빠르게 사용자에게 전달될 수 있습니다.
작동 방식 ⚙️
- 빌드 타임 실행: generateStaticParams 함수는 next build 명령어가 실행될 때 딱 한 번 실행됩니다.
- 매개변수 배열 반환: 이 함수는 동적 세그먼트에 들어갈 매개변수(params) 객체의 배열을 반환해야 합니다. Next.js는 이 배열의 각 객체에 대해 정적 페이지를 생성합니다.
- 정적 페이지 생성: 반환된 매개변수 배열에 따라 동적 라우트 페이지가 모두 빌드됩니다.
코드 예시 💻
블로그 게시물 페이지를 정적으로 생성하는 예시입니다.
JavaScript
// app/blog/[slug]/page.tsx
// 1. generateStaticParams 함수를 정의합니다.
export async function generateStaticParams() {
const posts = await getPostsFromDatabase(); // DB 또는 API에서 모든 게시물 데이터를 가져옴
// 2. 각 게시물에 대한 slug를 포함하는 객체 배열을 반환합니다.
return posts.map((post) => ({
slug: post.slug,
}));
}
// 3. 페이지 컴포넌트는 매개변수를 받습니다.
export default function PostPage({ params }: { params: { slug: string } }) {
// params.slug를 사용하여 특정 게시물 데이터를 가져와 렌더링
return (
<div>
<h1>게시물 제목: {params.slug}</h1>
{/* ... */}
</div>
);
}
주의할 점 ⚠️
- 빌드 시점: generateStaticParams는 빌드 시에만 실행되므로, 런타임에 동적으로 추가되는 새로운 게시물은 자동으로 포함되지 않습니다. 새로운 게시물이 추가되면 빌드를 다시 해야 합니다.
- dynamicParams: generateStaticParams를 정의하면 dynamicParams의 기본값이 true에서 false로 변경됩니다. 이는 generateStaticParams가 반환하지 않은 경로에 접근하면 404 페이지를 반환한다는 의미입니다. 만약 알 수 없는 경로도 서버에서 동적으로 렌더링하고 싶다면, dynamicParams = true를 명시적으로 설정해야 합니다
'개발 공부 > Next' 카테고리의 다른 글
| [Next] useOptimistic (0) | 2025.09.18 |
|---|---|
| [Next] Route Segment Config (0) | 2025.09.11 |
| [Next] unstable_cache (0) | 2025.09.11 |
| [Next] Parallel Routes (0) | 2025.09.07 |
| [Next] Intercepting Route (0) | 2025.09.07 |