동적 라우트 생성
Next.js의 App Router에서 동적 라우트를 생성하는 것은 유연하고 강력한 웹 애플리케이션을 구축하는 데 핵심적인 부분입니다.
이 절에서는 동적 세그먼트를 사용하여 동적 라우트를 생성하는 방법과 그 활용에 대해 자세히 알아보겠습니다.
동적 세그먼트 문법
동적 세그먼트는 대괄호 []
를 사용하여 정의됩니다.
사용 예시
[id]
: 단일 동적 세그먼트[...slug]
: 여러 세그먼트를 포함하는 catch-all 동적 세그먼트[[...slug]]
: 선택적 catch-all 동적 세그먼트
기본 동적 라우트 생성
기본적인 동적 라우트를 생성하는 방법은 다음과 같습니다.
이 예제에서 [slug]
는 동적 세그먼트입니다.
/blog/my-first-post
, /blog/learn-nextjs
등의 URL에 매칭됩니다.
여러 동적 세그먼트 사용
여러 동적 세그먼트를 조합하여 더 복잡한 라우트를 만들 수 있습니다.
이 라우트는 /products/electronics/123
과 같은 URL에 매칭됩니다.
Catch-all 세그먼트
Catch-all 세그먼트를 사용하면 여러 경로 세그먼트를 동적으로 처리할 수 있습니다.
이 라우트는 /docs/feature/overview
, /docs/api/auth/oauth
등 여러 세그먼트를 포함하는 URL에 매칭됩니다.
선택적 Catch-all 세그먼트
선택적 catch-all 세그먼트를 사용하면 세그먼트가 없는 경우도 처리할 수 있습니다.
이 라우트는 /
, /about
, /products/123
등 모든 URL에 매칭됩니다.
params vs searchParams
Next.js에서 params
와 searchParams
는 다른 목적으로 사용됩니다.
1. params
: URL 경로의 동적 세그먼트에서 추출된 값입니다.
- 예 :
/blog/[slug]
에서params.slug
로 접근
2. searchParams
: URL의 쿼리 문자열 파라미터입니다.
- 예 :
/search?q=nextjs
에서searchParams.get('q')
로 접근
searchParams
사용 예시
데이터 페칭과의 연결
동적 라우트는 6장의 데이터 페칭 부분과 밀접하게 연관됩니다.
동적 세그먼트의 값을 사용하여 서버에서 필요한 데이터를 가져올 수 있습니다.
예시
이 예제에서는 동적 세그먼트 [id]
의 값을 사용하여 특정 제품의 데이터를 가져옵니다.
실습 : 블로그 포스트 동적 라우트 구현
다음 요구사항을 만족하는 블로그 포스트의 동적 라우트를 구현해보세요.
/blog/[slug]
형태의 동적 라우트 생성- 블로그 포스트 데이터를 가져오는 비동기 함수 구현 (모의 데이터 사용 가능)
- 동적 세그먼트 값을 사용하여 해당 블로그 포스트 데이터 가져오기
- 블로그 포스트 제목, 내용, 작성일 표시
- 존재하지 않는 포스트에 대한 에러 처리
구현 단계
app/blog/[slug]/page.js
파일 생성- 비동기 데이터 페칭 함수 구현
- 동적 라우트 컴포넌트 구현
- 에러 처리 로직 추가
예시 코드
이 실습을 통해 동적 라우트의 생성, 데이터 페칭, 그리고 에러 처리를 포함한 실제 시나리오를 경험할 수 있습니다.
이는 Next.js를 사용하여 동적 콘텐츠를 다루는 웹 애플리케이션을 개발하는 데 필수적인 스킬을 습득하는 데 도움이 될 것입니다.