Dev NotesGitHub →
← 목록으로
Next.jsApp RouterReact

Next.js 시작하기 — App Router 핵심 정리

App Router의 레이아웃 시스템, Server Component, 라우팅 방식을 예제 중심으로 정리한다.

App Router란

Next.js 13부터 도입된 App Routerapp/ 디렉토리를 기반으로 한다. 기존 pages/ 방식과 다른 점은 기본적으로 모든 컴포넌트가 React Server Component(RSC) 라는 것이다.

파일 기반 라우팅

app/
├── layout.tsx      ← 루트 레이아웃 (모든 페이지 공유)
├── page.tsx        ← / 경로
└── posts/
    └── [slug]/
        └── page.tsx  ← /posts/:slug 경로

layout.tsx는 중첩 가능하다. /posts 전용 레이아웃이 필요하면 app/posts/layout.tsx를 추가하면 된다.

Server Component vs Client Component

기본값은 Server Component. useState, useEffect 등 클라이언트 훅을 쓰려면 파일 최상단에 "use client" 지시어를 추가한다.

// 서버 컴포넌트 — 기본값, 선언 불필요
export default async function Page() {
  const data = await fetch('https://api.example.com/data');
  // ...
}

// 클라이언트 컴포넌트
'use client';
import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
}

generateStaticParams

동적 라우트([slug])를 정적으로 빌드하려면 generateStaticParams를 export한다.

export async function generateStaticParams() {
  return getAllSlugs().map(slug => ({ slug }));
}

빌드 시 반환된 slug 수만큼 HTML이 미리 생성된다.

마무리

App Router는 처음엔 낯설지만, Server Component 덕분에 불필요한 클라이언트 JS를 줄일 수 있다. 레이아웃 중첩과 generateStaticParams를 익히면 대부분의 정적 사이트 요구사항을 커버할 수 있다.