Ch.16 Next.js 입문 — 풀스택 React 프레임워크

페이지와 라우팅

파일 기반 라우팅의 원리를 이해한다동적 라우팅([id])을 사용하여 동적 페이지를 만들 수 있다Link 컴포넌트와 useRouter로 페이지 이동을 구현할 수 있다

URL마다 페이지를 만들려면 파일을 어디에?

블로그를 만들고 있습니다. 글이 100개면 페이지 파일도 100개 만들어야 할까요? 동적 URL은 어떻게 처리할까요?

/blog/1, /blog/2... 무한한 URL을 어떻게?

동적 라우팅 — [id] 폴더 하나로 모든 동적 URL을 처리합니다.


article

핵심 내용

폴더 구조가 곧 URL입니다 page.tsx가 있는 폴더 = 접근 가능한 페이지

규칙 정리 page.tsx가 없는 폴더는 URL로 접근할 수 없습니다. 폴더는 경로 세그먼트를 만들고, page.tsx가 그 경로를 공개합니다.

[대괄호] 폴더 = 동적 경로 URL의 일부를 변수로 받습니다

// app/blog/[id]/page.tsx
// /blog/1, /blog/2, /blog/abc 모두 이 파일이 처리

interface Props {
  params: { id: string };
}

export default function BlogPost({ params }: Props) {
  return (
    <article>
      <h1>블로그 글 #{params.id}</h1>
      <p>id는 URL에서 가져온 값입니다.</p>
    </article>
  );
}

// /blog/42 접속 → params.id = "42"
// 실전: DB에서 데이터 가져오기
// app/blog/[id]/page.tsx

interface Props {
  params: { id: string };
}

export default async function BlogPost({ params }: Props) {
  // 서버에서 직접 DB 조회 가능!
  const post = await db.post.findUnique({
    where: { id: Number(params.id) },
  });

  if (!post) return <div>글을 찾을 수 없습니다</div>;

  return (
    <article>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </article>
  );
}

async 컴포넌트! 서버 컴포넌트에서는 async/await를 바로 사용할 수 있습니다. useEffect + useState 패턴이 필요 없습니다.

페이지 이동은 Link 컴포넌트로 새로고침 없이 빠르게 전환됩니다

// 프로그래밍 방식 네비게이션
"use client";
import { useRouter } from "next/navigation";

function LoginButton() {
  const router = useRouter();

  async function handleLogin() {
    const result = await login();
    if (result.success) {
      router.push("/dashboard"); // 페이지 이동
    }
  }

  return <button onClick={handleLogin}>로그인</button>;
}

`app/products/[id]/page.tsx`에서 `/products/42` 접속 시 `params.id`의 값은?

Next.js에서 <a> 태그 대신 <Link> 컴포넌트를 사용하면 페이지 전체가 새로고침된다.

useRouter를 사용하려면 어떤 지시어가 필요한가요?

page.tsx가 없는 폴더도 URL로 접근할 수 있다.

key

핵심 용어

🔗

<Link>

선언적 이동 — 일반 링크에 사용

🚀

router.push()

프로그래밍 이동 — 로직 후 이동에 사용

🔄

router.replace()

히스토리 교체 — 뒤로가기 방지

⬅️

router.back()

뒤로 가기 — 브라우저 뒤로가기와 동일

edit_note

정리 노트

Next.js 페이지와 라우팅 정리

핵심 개념

파일 기반 라우팅
app/about/page.tsx → /about 경로로 자동 매핑
동적 라우팅
[id] 폴더명으로 동적 URL 파라미터 처리
Link 컴포넌트
<Link href>로 페이지 이동 — a 태그 대신 사용
page.tsx 필수
page.tsx가 없는 폴더는 URL로 접근 불가

폴더 구조가 곧 URL 구조 — 직관적이고 관리하기 쉽습니다.

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작