본문 바로가기

넥스트

[next.js] 4. Route Groups

반응형
(개인 요약) Route Groups 은 폴더명을 (폴더명) 형태로 감싸서 정의하는데, 이렇게 정의된 폴더는 URL 에 아무런 영향을 미치지 않는다. 즉, next.js 에서는 생성된 폴더를 하나의 URL 경로로 인식하기 때문에 만일 shop 이라는 폴더를 만들었다면, http://localhost:5000/shop 이라는 경로가 생성되지만, (shop) 으로 폴더를 생성한다면, http://localhost:5000/ 과 같이 URL는 변동없이 루트 경로만 남게 된다.

 



  Route Groups는 다음과 같은 경우에 유용합니다.

- 사이트 섹션, 의도 또는 팀별로 라우트를 그룹화하는 경우
- 같은 라우트 세그먼트 수준에서 중첩된 레이아웃을 활성화하는 경우: 동일한 세그먼트에 여러 중첩 레이아웃 생성, 여러 루트 레이아웃 생성
- 공통 세그먼트 내의 일부 라우트에 레이아웃 추가

 

관례
Route Group은 폴더 이름을 괄호로 감싸면(예: (folderName)), 폴더가 라우트의 URL 경로에 포함되지 않도록 할 수 있습니다.

 

 예시

  URL 경로에 영향을 주지 않고 라우트 구성

URL에 영향을 주지 않고 라우트를 구성하려면 연관된 라우트를 함께 유지하기 위해 그룹을 생성하세요. 괄호 안의 폴더는 URL에서 제외됩니다. (예: (marketing) 또는 (shop)).

https://nextjs.org/docs/app/building-your-application/routing/route-groups

 

  라우트 그룹으로 라우트 구성하기

(marketing) 및 (shop) 내의 라우트는 동일한 URL 계층을 공유하지만, 각 그룹 내에서 layout.js 파일을 추가하여 각 그룹마다 다른 레이아웃을 생성할 수 있습니다.

https://nextjs.org/docs/app/building-your-application/routing/route-groups

 

 여러 레이아웃을 가진 라우트 그룹

  특정 세그먼트를 레이아웃에 추가


특정 라우트를 레이아웃에 추가하려면 새로운 라우트 그룹(예: (shop))을 생성하고, 해당 그룹 내에서 공유 레이아웃을 사용할 라우트(예: account 및 cart)를 이동하세요. 그룹 외의 라우트는 레이아웃을 공유하지 않습니다(예: checkout).

(개인 요약) 이렇게 하면, 각각의 (폴더명) 으로 분리된 페이지 컴포넌트는 서로 다른 레이아웃을 지정하여 사용할 수 있다.

 

 선택적 레이아웃을 가진 라우트 그룹

  여러 루트 레이아웃 생성

여러 루트 레이아웃을 생성하려면 최상위 layout.js 파일을 제거하고 각 라우트 그룹 내에 layout.js 파일을 추가하세요. 이는 완전히 다른 UI 또는 경험을 가진 섹션으로 응용 프로그램을 분할하는 데 유용합니다. 각 루트 레이아웃에 <html> 및 <body> 태그를 추가해야 합니다.

 

https://nextjs.org/docs/app/building-your-application/routing/route-groups

 

위의 예시에서 (marketing) 및 (shop) 모두 고유한 루트 레이아웃을 가지고 있습니다.

(개인 정리) 단, 위와 같이 루트 레이아웃을 구분하는 경우 page.js 파일은 두 그룹 중 하나에 분리되어 정의되어야 한다.

 

알아두어야 할 사항:
- 라우트 그룹의 이름은 조직화를 위한 것으로 특별한 의미가 없습니다. URL 경로에 영향을 주지 않습니다.

- 라우트 그룹을 포함하는 라우트는 다른 라우트의 URL 경로와 동일하게 해결되지 않아야 합니다. 예를 들어, 라우트 그룹이 URL 구조에 영향을 주지 않기 때문에 (marketing)/about/page.js 및 (shop)/about/page.js는 둘 다 /about으로 해결되어 오류를 일으킬 수 있습니다.

- 최상위 layout.js 파일이 없는 상태에서 여러 루트 레이아웃을 사용하는 경우, 홈 페이지.js 파일은 라우트 그룹 중 하나에 정의되어야 합니다. 예: app/(marketing)/page.js.

- 여러 루트 레이아웃 사이를 탐색하면 전체 페이지 로드가 발생합니다(클라이언트 측 탐색과 달리). 예를 들어, app/(shop)/layout.js를 사용하는 /cart에서 app/(marketing)/layout.js를 사용하는 /blog로 이동하는 경우 전체 페이지 로드가 발생합니다. 이는 여러 루트 레이아웃에만 적용됩니다.



 

반응형