728x90
728x90
폴더 구조 및 동적 경로 설정하기
들어가며
- Next.js를 이용하여 폴더 구조 및 동적 경로를 설정하는 방법을 정리해본다.
방법
① 비공개 폴더(Private Folder) 생성하기
- 앱(@app@) 폴더는 기본적으로 URL 세그먼트가 된다.
- 비공개 폴더(Private Folder)를 만들고 싶을 경우, 폴더 이름 앞에 밑줄(@_@)을 추가한다.
_css
⇒ @_css@ 폴더 생성 시, 해당 폴더는 URL 세그먼트로 노출되지 않으며, 만약 해당 경로에 접속할 경우 404 페이지를 반환한다.
- 비공개 폴더는 라우팅에 직접 포함되지 않는 폴더이다.
- 일반적으로 내부 관리 목적으로 사용된다.
② 라우트 그룹(Route Group) 생성하기
- 라우트 그룹(Route Group)은 특정 페이지나 경로를 그룹화한다.
- 이러한 그룹의 이름은 URL에 영향을 주지 않으며, 파일 구조만 관리한다.
- 소괄호(@()@)를 이용하여 그룹화할 수 있다.
(dashboard)
⇒ @(dashboard)@ 폴더 내에 @auth@ 폴더를 만들면, @/auth@로 접근할 수 있다. (@/dashboard/auth@처럼 대시보드 경로를 추가할 필요가 없다.)
③ 동적 경로(Dynamic Routes) 생성하기
Catch-All 라우트 세그먼트
- 대괄호(@[...folder]@)를 사용하여 해당 경로 이후의 모든 파라미터를 가져온다.
- 예를 들어 @/folder/abc/def@와 같은 모든 하위 경로를 처리할 수 있다.
- 파라미터 값은 문자열 배열(String Array)로 전달된다.
[...signIn]
⇒ @/signIn/1/2/3@ 처럼 여러 세그먼트를 포함하는 경로를 모두 인식한다.
⇒ 파라미터 값은 다음과 같이 전달된다.
params = ['signIn', '1', '2', '3']
Optional Catch-All 라우트 세그먼트
- 이중 대괄호(@[[...folder]]@)를 사용하면 선택적으로 경로를 가져올 수 있다.
- 파라미터가 없으면 빈 배열(@[]@)이 전달된다.
- 해당 경로가 없어도 에러(404 에러 등) 없이 동작한다.
- 주로 @Clerk@와 같은 인증 라이브러리에서 사용된다.
[[...signIn]]
./app/(dashboard)/auth/[[...sign-in]]/page.tsx
- 다음과 같이 현재 해당 페이지에서의 파라미터의 값을 가져온 후 확인할 수 있다.
const SignInPage = ({ params }: { params: { 'sign-in': string } }) => {
console.log(params); // { 'sign-in': 'example' }
return <div>SignInPage</div>;
};
export default SignInPage;
동적 라우트 세그먼트 접근하기
- 동적 라우트 파라미터에 접근하려면 배열의 인덱스로 접근한다.
- 예를 들어, @/auth/signIn/1/2/3@ 경로의 경우 @params[1]@을 통해 @1@을 가져온다.
./app/(dashboard)/auth/[[...sign-in]]/page.tsx
- @/auth/sign-in/abc/def@ 경로에 진입 하였을 경우, 아래와 같이 출력된다.
const SignInPage = ({ params }: { params: { 'sign-in': string[] } }) => {
console.log(params); // { 'sign-in': [ 'sign-in', 'abc', 'def' ] }
console.log(params['sign-in'][0]); // sign-in
console.log(params['sign-in'][1]); // abc
console.log(params['sign-in'][2]); // def
return <div>SignInPage :{params['sign-in'][1]}</div>;
};
export default SignInPage;
참고 사이트
728x90
728x90
'Framework > Next.js' 카테고리의 다른 글
[Next.js] 렌더링 방식 정리 (CSR(Client Side Rendering), SSR(Server Side Rendering), SSG(Static Site Generation), ISR(Incremental Static Regeneration)) (14) | 2024.11.14 |
---|---|
[Next.js] 테마 토글 기능 설정하기 (with shadcn/ui) (0) | 2024.11.05 |
[Next.js] 갑자기 "'next'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다." 오류가 발생할 때 해결 방법 (0) | 2024.10.30 |
[Next.js] 환경 변수 사용 방법 (1) | 2024.10.29 |
[Next.js] 정적 생성(Static Generation)과 서버사이드 렌더링(Server-side Rendering) (0) | 2024.08.08 |
[Next.js] 메타데이터(Metadata) 추가하기 (0) | 2024.08.07 |
[Next.js] 서버 컴포넌트와 클라이언트 컴포넌트 (0) | 2024.08.05 |
[Next.js] Image 컴포넌트 (0) | 2024.08.05 |