app 디렉토리는 일반적으로 URL 경로에 따라서 폴더들이 계층을 가지고 있습니다. 하지만 개발자가 특정 폴더를 라우트 그룹이라고 표시를 하면 특정 폴더를 라우트 URL 패스에 포함되지 않도록 막을 수 있습니다.
이것을 사용하면 URL 경로 구조에 영향을 주지 않고 라우트 세그먼트와 프로젝트의 파일을 조직화 할 수 있게 해줍니다.
라우트 그룹이 사용되는 경우는 다음과 같습니다.
- 사이트 섹션, 특정 의도나 특정 팀을 근거로 라우트를 조직화하는 경우
- 같은 라우트 세그먼트 레벨에서 레이아웃을 중첩시킬 수 있을 때
- 여러 루트 레이아웃을 포함하여 같은 세그먼트에 대해 다수의 중첩된 레이아웃을 만들기
- 공통 세그먼트에 라우트에 서브셋으로 레이아웃 추가하기
라우트 그룹은 (폴더이름)
과 같이 써주면 자동으로 생성이 됩니다.
라우트 그룹을 사용하면 좋은 예를 봅시다.
URL 경로에 영향을 미치지 라우트를 조직화하고 싶다면, 관련된 라우트를 함께 유지하는 그룹으로 만들면 됩니다. 괄호 안에 있는 폴더는 URL로 제외됩니다.
|_ app
|_ (marketing)
|_ about
|_ page.tsx // about
|_ (shop)
|_ account
|_ page.tsx // account
심지어 marketing과 shop이 같은 조상을 두고 있지만 서로 다른 레이아웃을 가질 수 있도록 만들 수도 있습니다.
|_ app
|_ (marketing)
|_ about
|_ layout.tsx
|_ page.tsx // about
|_ (shop)
|_ account
|_ layout.tsx
|_ page.tsx // account
특정 경로들을 레이아웃으로 선택하려면 새로운 라우트 그룹을 만들어야 하고 동일한 레이아웃을 공유하는 그룹으로 이것들을 이동해야 합니다. 라우트 그룹으로 묶이지 않는 것들은 레이아웃을 공유하지 않습니다.
|_ app
|_ (marketing)
|_ about
|_ layout.tsx
|_ page.tsx // about의 layout을 공유
|_ (shop)
|_ account
|_ layout.tsx
|_ page.tsx // account의 layout을 공유
다수의 루트 레이아웃을 만들면 최상단에 레이아웃을 지울 수 있고 각각의 라우트 그룹마다 레이아웃을 더할 수 있습니다. 이건 각각의 앱이 완전히 다른 UI나 UX를 가진 앱으로 부분적으로 나눠진 경우 사용하면 좋습니다. 각각의 루트 레이아웃에 <html>
과 <body>
를 더하면 됩니다.
|_ app
|_ (marketing)
|_ about
|_ layout.tsx
|_ (shop)
|_ account
|_ layout.tsx
(marketing)/about/page.tsx
와 (shop)/about/page.tsx
가 있을 때 두 개 모두 /about
으로 경로가 일치되기 때문에 이슈가 발생합니다.