동적 경로와 경로 그룹
[slug] 동적 세그먼트, (folder)를 사용한 경로 그룹, 병렬 경로를 만듭니다.
동적 경로와 경로 그룹은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
동적 세그먼트
폴더 이름을 대괄호로 감싸면 동적 세그먼트가 만들어집니다. 해당 값은 페이지에 전달되는 params에서 사용할 수 있습니다.
// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'타입이 지정된 매개변수
URL에서 매개변수는 항상 문자열입니다. 숫자 ID가 필요하면 명시적으로 구문 분석하십시오.
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
if (!post) notFound();
return <article>{post.content}</article>;
}포괄 세그먼트
[...slug]를 사용하면 경로 세그먼트 수에 관계없이 일치시킬 수 있습니다. 해당 값은 문자열 배열입니다.
// app/docs/[...path]/page.tsx
export default function DocsPage({ params }: { params: { path: string[] } }) {
// /docs/react/hooks → params.path = ['react', 'hooks']
return <DocViewer path={params.path} />;
}선택적 포괄 세그먼트
[[...slug]]는 루트 세그먼트에도 일치합니다. 선택적 경로 접두사에 유용합니다.
// app/[[...lang]]/page.tsx
// Matches /, /en, /en/about, /fr/products/123
export default function Page({ params }: { params: { lang?: string[] } }) {
const lang = params.lang?.[0] ?? 'en';
return <div lang={lang}>...</div>;
}generateStaticParams
generateStaticParams()를 내보내면 빌드 시 동적 경로를 미리 렌더링하여 각 매개변수 조합에 대한 정적 HTML을 생성할 수 있습니다.
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. statically경로 그룹 — (folder)
폴더 이름을 괄호로 감싸면 경로 그룹이 만들어집니다. URL 세그먼트를 추가하지 않고 파일을 구성할 수 있습니다.
// File structure:
// app/(marketing)/about/page.tsx → /about
// app/(marketing)/blog/page.tsx → /blog
// app/(app)/dashboard/page.tsx → /dashboard
// (marketing) and (app) don't appear in URLs공유 레이아웃이 있는 경로 그룹
각 경로 그룹에는 자체 layout.tsx를 둘 수 있으므로 URL을 중첩하지 않고도 섹션마다 다른 레이아웃을 적용할 수 있습니다.
// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the root병렬 경로 — @slot
폴더 앞에 @를 붙이면 슬롯이 만들어집니다. 슬롯은 부모 레이아웃에서 동시에 렌더링되므로 모달, 분할 화면 또는 탭에 유용합니다.
// app/@modal/login/page.tsx
// app/layout.tsx
export default function RootLayout({ children, modal }) {
return (
<div>
{children}
{modal} {/* renders @modal/login/page.tsx side by side */}
</div>
);
}가로채는 경로 — (..)
(..) 표기법을 사용하면 경로를 가로채 인라인으로 렌더링할 수 있습니다. 예를 들어 새 페이지로 이동하는 대신 모달에서 사진을 열 수 있습니다.
// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsx동적 경로 메타데이터
동적 경로에서 비동기 generateMetadata 함수를 내보내면 경로 매개변수를 바탕으로 페이지별 검색 엔진 최적화 태그를 설정할 수 있습니다.
export async function generateMetadata({ params }: { params: { id: string } }) {
const product = await getProduct(params.id);
return { title: product.name, description: product.description };
}빠른 확인
Next.js App Router에서 폴더 이름을 괄호로 감싸면 어떻게 됩니까?
복습
[id]는 동적 세그먼트를 만들고, [...slug]는 모든 하위 경로를 포괄하며, [[...slug]]는 이를 선택 사항으로 만듭니다. (name)을 사용한 경로 그룹은 URL에 영향을 주지 않고 코드를 구성하며 그룹별 레이아웃을 사용할 수 있게 합니다. 빌드 시 미리 렌더링하려면 generateStaticParams를 사용하십시오.
자주 묻는 질문
“동적 경로와 경로 그룹” 강의는 무료인가요?
네 — “동적 경로와 경로 그룹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“동적 경로와 경로 그룹”에서 뭘 배우나요?
[slug] 동적 세그먼트, (folder)를 사용한 경로 그룹, 병렬 경로를 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“동적 경로와 경로 그룹” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.