[Next] 페이지 라우터(Page Router)

2024. 11. 6. 13:24·Next

☑️ Next.js 페이지 라우터에 대한 이해

💡 Next.js에서는 페이지 라우팅을 매우 간단하게 처리할 수 있다. Next.js는 페이지 기반 라우팅 시스템을 제공하여, pages 폴더에 파일을 만들면 그에 맞는 URL 경로로 자동으로 연결된다. Next.js의 라우팅 방식은 페이지 라우터(Page Router)와 앱 라우터(App Router)로 나눌 수 있는데, 이 글에서는 페이지 라우터에 대해 설명하고 Next.js의 라우팅 기능을 활용하는 방법에 대해 다룰 것이다.


 

☑️ 페이지 라우터 (Page Router)

페이지 라우터는 Next.js의 초기 버전부터 제공된 라우팅 방식이다. 페이지 라우터는 /pages 폴더 내의 파일 구조를 기반으로 URL 경로를 자동으로 설정하는 방식이다. 이 방식은 직관적이고 간단하기 때문에 많은 프로젝트에서 기본적으로 사용된다.

 

✔️ Next.js 앱 설치와 실행

Next.js 앱 설치

npx create-next-app@latest

Next.js 앱 실행

npm run dev

 

✔️ 기본적인 파일 구조와 라우팅

Next.js의 페이지 라우팅은 파일 시스템 기반으로 작동한다. /pages 폴더에 파일을 만들면, 해당 파일의 경로와 이름에 맞는 URL이 자동으로 생성된다.

 

🗂️ 기본적인 파일 구조

/pages
  ├── index.js        // / 경로
  ├── about.js        // /about 경로
  └── item
      └── index.js    // /item 경로

위와 같은 구조에서는

  • /pages/index.js 파일은 / 경로로 연결된다.
  • /pages/about.js 파일은 /about 경로로 연결된다.
  • /pages/item/index.js 파일은 /item 경로로 연결된다.

따라서 브라우저에서 http://localhost:3000/에 접속하면 index.js 파일이 렌더링되고, http://localhost:3000/about에 접속하면 about.js 파일이 렌더링된다.

 

🗂️ 디렉토리 기반 라우팅

/pages
  ├── index.js        // / 경로
  ├── about.js        // /about 경로
  └── item
      ├── index.js    // /item 경로
      └── details.js  // /item/details 경로

위 구조에서는 /pages/item/details.js 파일이 /item/details 경로로 연결된다.

 

Next.js 앱 설치와 프로젝트 구조에 대해서 Next 공식문서를 참고하면 좋을 것 같다.
👉 https://nextjs.org/docs/getting-started/project-structure


 

☑️ 페이지 라우터 기능

Next.js의 페이지 라우터는 정적 경로, 동적 경로뿐만 아니라 다양한 고급 기능도 제공한다. 이 기능들은 복잡한 라우팅을 처리할 때 유용하게 사용될 수 있다.

 

✔️ 정적 경로와 쿼리 스트링

Next.js에서는 URL에 쿼리 스트링을 포함할 수 있으며, 이를 useRouter 훅을 사용하여 쉽게 접근할 수 있다. 예를 들어, /search?query=apple와 같은 URL을 다룰 때는 query 파라미터를 useRouter로 쉽게 추출할 수 있다.

// /pages/search.js

import { useRouter } from 'next/router';

export default function SearchPage() {
  const { query } = useRouter();  // query는 { query: 'apple' } 형태로 반환됨
  return <div>Search Query: {query.query}</div>;
}

 

✔️ 동적 경로 (Dynamic Routes)

Next.js는 동적 경로를 매우 간단하게 처리할 수 있다. 동적 경로는 URL의 일부가 변동적인 경우, 예를 들어 /item/1, /item/2와 같이 변하는 부분을 처리해야 할 때 유용하다. 이때는 [ ]를 사용하여 동적 경로를 설정할 수 있다.

/pages
  └── item
      └── [id].js
// /pages/book/[id].js

import { useRouter } from 'next/router';

export default function BookPage() {
  const { query } = useRouter();
  return <div>Book ID: {query.id}</div>;
}

이렇게 하면 /book/1, /book/2와 같은 동적 경로에서 id 값을 추출하여 해당하는 콘텐츠를 렌더링할 수 있다.

 

✔️ 범용적인 경로 (Catch-all Routes)

Next.js에서는 범용적인 경로 (Catch-all routes)도 쉽게 설정할 수 있다. 범용적인 경로는 여러 개의 파라미터를 받을 수 있는 경로를 처리할 때 사용된다. 예를 들어, /book/1/234와 같은 경로를 처리하려면 [...id].js와 같은 파일을 만들면 된다.

/pages
  └── book
      └── [...id].js
// /pages/book/[...id].js

import { useRouter } from 'next/router';

export default function BookPage() {
  const { query } = useRouter();
  return <div>Book ID: {query.id}</div>;
}

 

✔️ 선택적 범용 경로 (Optional Catch-all Routes)

선택적 범용 경로는 경로의 마지막 파라미터가 있을 수도 있고 없을 수도 있는 경우를 처리한다. 예를 들어 /book/1, /book/2, /book처럼 경로가 선택적으로 존재하는 경우, [[...id]].js로 처리할 수 있다.

/pages
  └── book
      └── [[...id]].js

이렇게 하면 /book에 접근할 경우에도 404 오류가 발생하지 않고 정상적으로 페이지가 표시된다.

 

✔️ 404 페이지 처리

Next.js에서는 404 페이지를 커스터마이즈할 수 있다. /pages/404.js 파일을 만들면, 해당 경로가 존재하지 않을 경우 자동으로 404 페이지가 렌더링된다.

/pages
  └── 404.js

 

🎓 정리

Next.js의 페이지 라우터는 파일 시스템 기반 라우팅을 제공하여, 직관적이고 간단하게 페이지를 관리할 수 있다. 동적 경로, 쿼리 스트링, 범용적인 경로 등 다양한 라우팅 기능을 제공하며, 복잡한 라우팅 요구사항도 쉽게 처리할 수 있다. Next.js 프로젝트에서 페이지 라우팅을 적절히 활용하면, 효율적이고 관리하기 쉬운 앱을 만들 수 있다.

 

'Next' 카테고리의 다른 글

Next.js + Redux로 확장 가능한 모달 시스템 만들기 (with App Router)  (0) 2025.05.06
[Next] 페이지별 레이아웃 설정하기  (1) 2024.11.18
[Next] API Routes  (3) 2024.11.15
[Next] 프리페칭(Pre-fetching)  (0) 2024.11.07
[Next] Next.js 소개 & 렌더링 방식의 차이  (1) 2024.11.05
'Next' 카테고리의 다른 글
  • [Next] 페이지별 레이아웃 설정하기
  • [Next] API Routes
  • [Next] 프리페칭(Pre-fetching)
  • [Next] Next.js 소개 & 렌더링 방식의 차이
FE Dev. 굼지
FE Dev. 굼지
굼지의 웹 개발 레시피 입니다.
  • FE Dev. 굼지
    굼지의 웹 개발 레시피
    FE Dev. 굼지
    • 분류 전체보기 (14)
      • FrontEnd (3)
      • React (3)
      • Next (8)
      • React-Native (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

FE Dev. 굼지
[Next] 페이지 라우터(Page Router)
상단으로

티스토리툴바