모든 어플리케이션의 뼈대는 라우팅입니다. 이번 페이지에서는 라우팅 구조 그리고 Next.js에서 라우팅을 어떻게 다루는지를 소개합니다.
당신은 문서내내 아래와 같은 용어들을 보게 될 것입니다.
/(슬래시)
로 나눈 부분들입니다.버전 13에서 React Server Components 를 기반으로 하고, shared layouts, nested routing, loading states, error handling 등을 지원하는 새로운 App Router 를 소개해드렸었죠.
App Router 는 app
이라는 이름의 폴더에서 동작합니다. app
디렉토리는 pages
디렉토리와 함께 작동함으로써 점진적 적용을 가능하게 합니다. 어떤 경로들은 app에서 작동하게 하고, 다른 경로들은 pages에서 작동하도록 할 수 있죠. 당신의 어플리케이션이 pages
폴더도 사용한다면 Pages Router 문서도 봐주세요.
Good to know: App router 가 Pages Router 보다 우선권을 가집니다. 같은 경로를 두 Router 에서 동시에 사용하는 것은 허용되지 않으며, 에러를 막기위해 빌드타임 에러가 발생합니다.
기본적으로 app
폴더 안의 컴포넌트들은 전부 React Server Components 들 입니다. 이것은 성능 최적화되며 아주 쉽게 그것들을 사용할 수 있습니다. 그리고 Client Component 들도 사용할 수 있습니다.
Next.js 는 파일시스템에 기반한 라우터를 사용합니다:
route 의 각 폴더는 각각 route segment 를 나타냅니다. 각 route segment 는 URL path의 segment 들에 대응됩니다.
nested route 를 만들기 위해, 당신은 폴더들을 중첩시킬 수 있습니다. 예를 들어 당신은 app 폴더에 두 폴더를 중첩시킴으로써 /dashboard/settings
route를 만들 수 있습니다.
/dashboard/settings
route 는 세 segment 들로 이루어집니다 :
/
(Root segment)dashboard
(Segment)settings
(Leaf segment)Next.js 는 UI 를 생성하기 위한 special files 를 제공합니다.
layout
segment와 그 children 에게서 공유되는 UIpage
해당 route 의 유일한 UI 이며 해당 route를 접근가능하게 만든다.loading
segment 와 그 children 을 위한 로딩 UInot-found
segment 와 그 children 을 위한 Not found UIerror
segment 와 그 children 을 위한 Error UIglobal-error
Global Error UIroute
Server-side API endpointtemplate
리렌더링되는 Layout UIdefault
Parallel Routes(후술) 를 위한 Fallback UIroute segment 를 위한 special files 로 정의된 React components 들은 특정한 순서대로 렌더링됩니다.
layout.js
template.js
error.js
(React error boundary)loading.js
(React suspense boundary)not-found.js
(React error boundary)page.js
or nested layout.js
nested route 에서, segment 의 컴포넌트들은 부모 segment의 컴포넌트로 감싸집니다.
app
폴더에 special files 말고도 다른 파일들(e.g. components, styles, tests, etc)을 위치시킬 수 있습니다. 폴더들이 routes 를 정의하지만, page.js 나 route.js 에 의해 리턴되는 컨텐츠만 접근 가능하기 때문입니다.
더 자세한 것은 Project Organization and Colocation 를 참고하세요
app router 는 더 진보한 routing 패턴을 적용하기 위한 방법들을 제공합니다.
Parallel Routes (후술): 한 view 에서 두개 이상의 페이지를 동시에 보여줄 수 있습니다. 각 sub-navigation 을 가지는 split view 를 만들때 사용할 수 있습니다. (E.g. Dashboards.)
Intercepting Routes (후술): route 를 가로채 다른 route 의 내용을 보여줄 수 있습니다. 현재 페이지의 내용을 유지하는 것이 중요할 때 사용합니다. (E.g. 하나의 과제를 수정할 때 다른 과제들도 한번에 볼 수 있도록 하거나 피드에서 사진을 확장하여 보여줄 때 사용할 수 있습니다.)
이러한 패턴은 더 풍부하고 복잡한 UI 들을 만들 수 있게합니다.