레이아웃 컴포넌트 사용하기
Next.js의 레이아웃 시스템은 여러 페이지에서 공유되는 UI를 효율적으로 관리할 수 있게 해줍니다.
이 절에서는 layout.js
파일의 역할과 레이아웃 컴포넌트를 생성하고 사용하는 방법에 대해 자세히 알아보겠습니다.
layout.js 파일의 역할
layout.js
파일은 여러 페이지에서 공통으로 사용되는 UI 요소를 정의합니다.
이 파일은 다음과 같은 특징을 가집니다.
- 기본적으로 서버 컴포넌트입니다.
children
prop을 받아 하위 컴포넌트를 렌더링합니다.- 여러 레벨로 중첩될 수 있습니다.
- 레이아웃은 라우트가 변경되어도 리렌더링되지 않고 상태를 유지합니다.
루트 레이아웃
루트 레이아웃은 애플리케이션의 모든 페이지에 적용되는 최상위 레이아웃입니다.
app/layout.js
파일에 정의되며, HTML과 body 태그를 포함해야 합니다.
이 루트 레이아웃은 모든 페이지에 헤더와 푸터를 제공하며, children
prop을 통해 각 페이지의 고유한 콘텐츠를 렌더링합니다.
중첩 레이아웃
중첩 레이아웃을 사용하면 특정 라우트 그룹에 대해 추가적인 UI 구조를 정의할 수 있습니다.
예를 들어, 대시보드 섹션에 대한 레이아웃을 만들어 보겠습니다.
이 레이아웃은 /dashboard
경로 아래의 모든 페이지에 적용됩니다.
예를 들어, /dashboard/analytics
, /dashboard/settings
등의 페이지에 이 레이아웃이 사용됩니다.
레이아웃 컴포넌트 생성 및 사용
레이아웃 컴포넌트를 생성할 때 주의할 점
layout.js
파일은 해당 디렉토리와 그 하위 디렉토리의 모든 라우트에 적용됩니다.- 레이아웃은 중첩될 수 있으며, 자식 레이아웃은 부모 레이아웃 내에 렌더링됩니다.
layout.js
에서metadata
객체를 내보내 SEO 관련 정보를 설정할 수 있습니다.
예를 들어, 블로그 섹션에 대한 레이아웃을 만들어 보겠습니다.
이 레이아웃은 블로그 관련 페이지에 특화된 네비게이션을 제공하며, 모든 블로그 페이지에 적용됩니다.
7장 서버,클라이언트 컴포넌트와의 연결
레이아웃 컴포넌트는 기본적으로 서버 컴포넌트입니다.
7장에서는 서버 컴포넌트와 클라이언트 컴포넌트의 차이점과 각각의 사용 사례에 대해 더 자세히 다룹니다.
레이아웃에서 클라이언트 사이드 인터랙션이 필요한 경우, 클라이언트 컴포넌트를 레이아웃 내에 포함시키는 방법을 학습하게 될 것입니다. 이를 통해 서버 렌더링의 이점을 유지하면서도 동적인 UI를 구현할 수 있습니다.
실습 : 여러 레벨의 중첩 레이아웃 구현하기
다음 요구사항을 만족하는 중첩 레이아웃 구조를 구현해보세요.
1. 루트 레이아웃 app/layout.js
- 전체 애플리케이션에 적용되는 헤더와 푸터 포함
- 글로벌 네비게이션 메뉴 구현
2. 대시보드 레이아웃 app/dashboard/layout.js
- 사이드바 네비게이션 포함
- 대시보드 관련 페이지에만 적용
3. 블로그 레이아웃 app/blog/layout.js
- 블로그 관련 네비게이션 포함
- 최근 게시물 목록 사이드바 구현
4. 블로그 포스트 레이아웃 (app/blog/[slug]/layout.js
)
- 포스트 제목과 메타 정보 표시
- 댓글 섹션 포함
각 레이아웃에 대해
- 적절한 위치에
layout.js
파일을 생성합니다. - 레이아웃 컴포넌트를 구현합니다.
- 필요한 경우 메타데이터를 설정합니다.
- 자식 컴포넌트(
children
)를 적절히 배치합니다.
이 실습을 통해 여러 레벨의 중첩 레이아웃을 구현하고, 각 레이아웃이 어떻게 조합되어 전체 페이지 구조를 형성하는지 이해할 수 있습니다.
이는 복잡한 웹 애플리케이션의 UI 구조를 효과적으로 관리하는 데 필요한 핵심 스킬을 개발하는 데 도움이 될 것입니다.