개발 공부/Next.js

Next.js Layout 이해하기

Ryomi 2025. 1. 1. 11:07
728x90
반응형

 

들어가며

Next.js 13부터 도입된 App Router는 새로운 Layout 시스템을 제공했다. 이는 페이지 간 공통 UI를 효율적으로 관리하고, 더 나은 사용자 경험을 제공하는데 도움을 준다.

 

Layout의 기본 개념

Layout은 여러 페이지에서 공유되는 UI 요소를 정의하는 특별한 컴포넌트다.

따라서 페이지 이동시, 레이아웃은 리렌더링 되지 않고, 오직 페이지 컴포넌트만 업데이트 된다. 이를 부분 렌더링(partial rendering)이라고 한다.

 

기본 Layout 구조

// app/layout.tsx
export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>
        <header>
          <nav>메인 네비게이션</nav>
        </header>
        <main>{children}</main>
        <footer>푸터 영역</footer>
      </body>
    </html>
  )
}

 

Layout의 종류

1. Root Layout

 app/layout.tsx
import { Inter } from 'next/font/google'

const inter = Inter({ subsets: ['latin'] })

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body className={inter.className}>
        {children}
      </body>
    </html>
  )
}

2. 중첩 Layout

// app/blog/layout.tsx
export default function BlogLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <div className="blog-container">
      <aside className="sidebar">
        <nav>블로그 메뉴</nav>
      </aside>
      <div className="content">
        {children}
      </div>
    </div>
  )
}

3. 그룹 Layout

// app/(marketing)/layout.tsx
export default function MarketingLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <div className="marketing-layout">
      <nav className="marketing-nav">
        <a href="/products">Products</a>
        <a href="/pricing">Pricing</a>
        <a href="/about">About</a>
      </nav>
      {children}
    </div>
  )
}

사실, 파일 및 layout 구조는 Svelte4와 유사하다.(Svelte5 - runes - 는 아직 살펴보지 않았다)

728x90
반응형