Published on

3단계: 페이지 라우팅과 동적 URL 처리

페이지 라우팅과 동적 URL 처리

Next.js는 파일 이름만으로 URL 라우팅을 자동으로 구성해줍니다.
여기에 동적 세그먼트를 적용하면 매우 강력한 URL 설계가 가능해집니다.


3-1. 기본 라우팅 (정적 페이지)

pages/
  index.js      → /
  about.js      → /about
  contact.js    → /contact
// pages/about.js
export default function About() {
  return <h1>소개 페이지입니다</h1>;
}

링크는 next/link 컴포넌트를 사용합니다.

import Link from 'next/link';

<Link href="/about">About</Link>

3-2. 동적 라우팅

파일 이름에 대괄호 [param]을 사용하면 URL 파라미터로 인식됩니다.

pages/post/[id].js → /post/123, /post/hello
// pages/post/[id].js
import { useRouter } from 'next/router';

export default function Post() {
  const router = useRouter();
  const { id } = router.query;

  return <h1>포스트 ID: {id}</h1>;
}

3-3. 다중 파라미터 라우팅

pages/category/[category]/[id].js
// pages/category/[category]/[id].js
import { useRouter } from 'next/router';

export default function Page() {
  const router = useRouter();
  const { category, id } = router.query;

  return (
    <div>
      <h1>카테고리: {category}</h1>
      <h2>ID: {id}</h2>
    </div>
  );
}

3-4. 404 페이지 만들기

404 전용 페이지는 pages/404.js로 생성합니다.

// pages/404.js
export default function NotFound() {
  return <h1>페이지를 찾을 수 없습니다.</h1>;
}
  • 존재하지 않는 경로에 접근하면 자동으로 이 페이지가 보여집니다.

3-5. 커스텀 에러 페이지 (500 등)

// pages/_error.js
function Error({ statusCode }) {
  return (
    <p>
      {statusCode
        ? `${statusCode} 서버 오류가 발생했습니다.`
        : '클라이언트 오류가 발생했습니다.'}
    </p>
  );
}

Error.getInitialProps = ({ res, err }) => {
  const statusCode = res?.statusCode || err?.statusCode || 404;
  return { statusCode };
};

export default Error;
  • Next.js에서 _error.js를 이용해 커스텀 에러 메시지를 구성할 수 있습니다.

요약

  • 파일 이름이 곧 URL이 되는 구조로 라우팅이 매우 직관적입니다.
  • [param].js 형식으로 동적 라우팅을 구현할 수 있습니다.
  • useRouter()를 통해 URL 정보를 받아올 수 있습니다.
  • 다중 파라미터 라우팅, 404/500 페이지 구성도 간단합니다.

심화학습

Q1. React Router에서 사용하는 방식과 비교했을 때 Next.js의 동적 라우팅이 가지는 이점은 무엇일까?

A: React Router는 라우팅 설정이 필요하지만, Next.js는 파일 이름만으로 라우팅이 자동 구성됩니다. 이는 유지보수성과 개발 속도에 매우 유리합니다.


Q2. 다중 파라미터 URL에서 SEO 최적화를 고려한 구성은 어떻게 설계해야 할까?

A: URL 구조를 명확하게 설계하고, 의미 있는 키워드를 포함시켜 검색엔진이 인식하기 좋게 만듭니다. 동적 페이지도 getStaticProps 등을 통해 정적으로 제공하면 SEO에 도움이 됩니다.


Q3. 동적 라우팅이 많아졌을 때 폴더 구조는 어떻게 관리하는 게 좋을까?

A: 기능 또는 도메인 단위로 디렉토리를 나누고, 각 하위에 라우팅 구조를 반영하면 유지보수가 쉽습니다. 예: /product/[category]/[id].js