프론트/리액트
Next.js) 폴더명에 []대괄호 사용- 동적라우팅
뽀짝코딩
2025. 6. 20. 16:14
728x90
Next.js에서 폴더명에 [](대괄호)를 쓰는 건 **동적 라우팅(Dynamic Routing)**을 의미.
즉, 주소의 특정 부분을 변수처럼 처리하고 싶을 때 사용하는 방식이다.
✅ 예: [id] 폴더의 의미
src/app/items/[id]/page.tsx
이 구조는 /items/무언가 형태의 URL을 모두 이 페이지로 연결하겠다는 뜻이다.
예를 들어:
주소 처리되는 값 (id)
/items/check1 | "check1" |
/items/some-product | "some-product" |
/items/123 | "123" |
이때 이 id 값은 useParams() 또는 PageProps를 통해 접근할 수 있다.
✅ 어떻게 동작하나요?
1. URL 접속
브라우저에서 /items/check1에 접속
2. [id]/page.tsx 실행
Next.js는 check1을 id 값으로 인식
3. 코드에서 사용
export default function Page({ params }: { params: { id: string } }) {
return <div>상품 ID: {params.id}</div>;
}
혹은 클라이언트 컴포넌트라면:
"use client";
import { useParams } from "next/navigation";
const ItemDetail = () => {
const params = useParams(); // { id: "check1" }
return <div>상품 ID: {params.id}</div>;
};
✅ 왜 유용한가요?
- 상품 상세 페이지, 게시글 상세 페이지, 사용자 프로필 등 id 기반으로 조회되는 페이지를 만들 때 유용하다.
- URL에 따라 하나의 컴포넌트로 다양한 데이터를 렌더링할 수 있다.
📦 관련 기능
기능 설명
[id] | 경로의 동적 세그먼트를 의미함 |
generateStaticParams() | 빌드 시 가능한 id 목록을 미리 생성해줌 (정적 사이트용) |
useParams() | 클라이언트에서 URL param 접근 |
params: { id } | 서버 컴포넌트에서 param 접근 방식 |
Next.js에서는 동적 라우팅을 좀 더 유연하게 처리하기 위해 **선택적(optional)**이거나 여러 개를 한번에 잡는(catch-all) 경로를 만들 수 있다.
✅ 1. 기본 동적 라우팅
/pages/items/[id].tsx
- /items/123 → id = "123"
- id가 무조건 있어야 함
✅ 2. 선택적 경로 (Optional Catch-All)
/pages/items/[[...slug]].tsx
- slug는 배열로 들어옴
- 있어도 되고, 없어도 됨
예시
URL slug 값
/items | undefined |
/items/a | ["a"] |
/items/a/b | ["a", "b"] |
코드 예
import { useParams } from "next/navigation";
export default function Page() {
const params = useParams();
const slug = params?.slug ?? []; // [] or ['a', 'b']
return <div>경로: {slug.join(" / ")}</div>;
}
✅ 3. 캐치올 라우트 (Catch-All)
/pages/items/[...slug].tsx
- slug는 배열로 들어옴
- 최소 하나 이상 있어야 함
예시
URL slug 값
/items/a | ["a"] |
/items/a/b | ["a", "b"] |
/items | ❌ 404 (없음!) |
✨ 요약 비교
폴더명 or 파일명 필수 여부 값 형태 설명
[id] | ✅ 필수 | string | /items/1 |
[...slug] | ✅ 필수 | string[] | /items/a/b (없으면 404) |
[[...slug]] | ❌ 선택 | string[] | /items, /items/a 등 모두 가능 |
필요한 상황에 맞게 유동적으로 사용할 수 있다.
예를 들어:
- [id] → 단일 상품 조회
- [...slug] → 카테고리 + 필터 조건 등 다단계 경로
- [[...slug]] → 메인 페이지에서도 필터가 있을 수 있을 때
참고 쳇지피티
반응형