Skip to Content
Suffering builds character
아카이브9.Next.js특징라우팅7. 동적 라우팅 처리

7. 동적 라우팅 처리

만약 다음과 같은 특정 상품의 상세 정보를 나타내는 페이지로 라우팅 해야 할 경우,

미리 생성해둔 파일 이름으로는 동적으로 변하는 값(1, 2)에 따른 라우팅 처리가 어려워짐
→ 상품이 100개 이상인 경우, 개별 페이지에 대응하는 파일을 만들기에는 너무 복잡함

id가 1번인 상품 페이지
localhost:3000/products/1

id가 2번인 상품 페이지
localhost:3000/products/2

Next.js에서는 Dynamic Segments를 통해 페이지 접근 요청 시 URL 경로에 동적으로 라우팅을 처리할 수 있도록 기능을 제공함

1-1. 예시

프로젝트 폴더 경로 생성 시,
대괄호를 포함하여 app/blog/ [slug] /page.jsx와 같이 작성할 경우, [slug]에 해당하는 부분은 사용자의 요청 URL(ex. localhost:3000/blog/a)에 따라 동적으로 처리되어 동작함

app/blog/[slug]/page.js
export default function Page({ params }) { return <div>My Post: {params.slug}</div> }
Route 경로예시 URLParams화면 출력 예시
app/blog/[slug]/page.jsx/blog/a{ slug: 'a' }My Post: a
app/blog/[slug]/page.jsx/blog/b{ slug: 'b' }My Post: b
app/blog/[slug]/page.jsx/blog/c{ slug: 'c' }My Post: c

1-2. 동적 라우팅을 위한 Dynamic Segments 작성 규칙

Dynamic Segment는 파일 및 폴더 이름을 대괄호( [ ], square brackets)로 감싸서 사용할 수 있음

💡
Tip

[id], [slug], 등 대괄호 내 작성하는 이름 작성 규칙은 별도의 제한이 없음
→ 다만, 중첩된 동적 라우팅 시 같은 폴더 경로 내 슬러그 이름이 동일할 경우는 충돌이 발생하기 때문에 이름이 서로 달라야함

1-2. useRouter, 동적 라우팅 처리용 훅(Hook)

작성한 Dynamic Segement를 사용하기 위해서는 useRouter 훅을 통해 처리할 수 있음

블로그 포스트 이름에 따른 동적 라우팅 처리 예시

라우팅 동작 규칙요청 URL파라미터
pages/blog/[slug].js/blog/a{ slug: 'a' }
pages/blog/[slug].js/blog/b{ slug: 'b' }
pages/blog/[slug].js/blog/c{ slug: 'c' }
sample URL
http://localhost:3000/blog/a

localhost:3000/blog/a 경로로 접근 시, Post: a 페이지가 출력됨

page.js
import { useRouter } from 'next/router' export default function Page() { const router = useRouter() return <p>Post: {router.query.slug} 페이지</p> }
Last updated on