
Next.js 13 버전에선 새로운 file convention 이 있습니다. 바로 pages, layouts, templates 입니다.
Pages
page 파일은 route에 특화된 파일입니다. page 파일은 route로 접근 가능한 페이지를 생성합니다.
page 파일은 다음의 특징을 가집니다.
Layouts
layout 은 여러 페이지에서 공유할 수 있는 UI 입니다. navigation 상태일 때 layout은 state를 준비할 수 있고, UI상태를 유지하기 때문에 페이지 이동시 re-render 하지 않습니다.
layout은 필요에 따라 계층적으로도 만들수 있습니다.
layout은 props로 children을 반드시 사용해야 합니다. 앞서 배웠던 page로 생성한 화면이 layout의 children으로 전달되기 때문에 children을 화면 구성에 사용해야 합니다.
Layout의 특징
Root Layout(Required)
root layout은 최상위 폴더인 app 폴더에 반드시 정의되어 있어야 합니다.
root layout은 모든 페이지에 적용됩니다.
root layout은 다음의 특징을 가집니다.
Nesting Layouts
중첩된 구조로 layout을 구성할 수 있습니다.
상위 폴더와 하위 폴더에 각각 layout 파일을 구성할 경우, 상위 layout 의 children 영역에 하위 layout이 보여지게 됩니다.
만일 계층적 구조를 벗어나 layout을 사용하고 싶다면 Route Group을 이용하면 됩니다.
Templates
templates는 layout과 비슷한 역할을 합니다. layout과 다른점은 다음과 같습니다.
template은 다음과 같은 상황에 사용되기 적합합니다.
Modifying <head>
app 폴더 안에서 head 태그를 수정할 수 있습니다.
Metadata 는 page나 layout 파일에서 metadata를 export 함으로써 정의할 수 있습니다.
head 태그의 title, meta 태그를 정의하기 위해서 head 태그를 사용하면 안됩니다. 반드시 metadata api를 사용해야 head 태그를 구성할 수 있습니다.
