Next.js 페이지 라우팅 방식

Frontend/Next.js

경로 페이지

Pages Router

.
├── src
│   ├── pages
│   │   ├── _app.tsx
│   │   ├── _document.tsx
│   │   ├── index.tsx
│   │   └── search
│   │       └── index.tsx  // '/search'
│   │       └── search.tsx // '/search/settiㅍng'

 

App Router

.
├── src
│   ├── app
│   │   ├──layout.tsx
│   │   ├── page.tsx
│   │   └── search
│   │       └── page.tsx  // '/search'

 

쿼리 스트링

  • '/search?q=쿼리스트링'

 

Pages Router

import { useRouter } from "next/router";

export default function Page() {
  const router = useRouter();
  const { q } = router.query;

  console.log(q) // 쿼리스트링

  return <h1>Search {q}</h1>;
}

 

App Router

서버 컴포넌트

export default function Page(props) {
  const { q } = props.searchParams;
  console.log(q); // 쿼리스트링

  return <div>Search 페이지</div>;
}

클라이언트 컴포넌트

export default function Page({ searchParams }) {
  // Search 페이지 쿼리스트링
  return <div>Search 페이지 {searchParams.q}</div>;
}

 

동적 경로 페이지

Pages Router

import { useRouter } from "next/router";

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

  return <h1>Book</h1>;
}
.
├── src
│   ├── pages
│   │   └── book
│   │       └──[id].tsx  // '/book/123'
console.log(id); // 123

 

App Router

export default function Page(props) {
  const { id } = props.params;

  return <div>book/[id] 페이지</div>;}
export default function Page({ params }) {
  // book/[id] 페이지 123
  return <div>book/[id] 페이지 {params.id}</div>;}
. 
├── src 
│   └── app 
│   ├── book 
│   │   └── [id] 
│   │        └── page.tsx // 'book/123'

 

Catch All Segment

Pages Router

.
├── src
│   ├── pages
│   │   └── book
│   │       └──[...id].tsx  // '/book/456/789' 가능, '/book'은 불가능
console.log(id); // ['456', '789']

 

App Router

.
├── src
│   └── app
│       ├── book
│       │   └── [...id]
│       │       └── page.tsx // '/book/456/789' 가능, '/book'은 불가능

 

Optional Catch All Segment

Pages Router

.
├── src
│   ├── pages
│   │   └── book
│   │       └──[[...id]].tsx  // '/book', '/book/456/789' 다 가능

 

App Router

.
├── src
│   └── app
│       ├── book
│       │   ├── [...id]
│       │   │   └── page.tsx // '/book/456/789' 가능
│       │   └── page.tsx // 'book/' 가능
.
├── src
│   └── app
│       ├── book
│       │   ├── [[...id]]
│       │   │   └── page.tsx // '/book', '/book/456/789' 다 가능

 

404 페이지

Pages Router

.
├── src
│   ├── pages
│   │   └── 404.tsx // 없는 경로 진입시

 

App Router

.
├── src
│   ├── app
│   │   └── not-found.tsx // 없는 경로 진입시
import { notFound } from "next/navigation";

// ...

const response = await fetch(
  `url/book/${params.id}`
);
if (!response.ok) {
  if (response.status === 404) {
    notFound(); // 404 페이지
  }
  return <div>오류가 발생했습니다.</div>;
}

'Frontend > Next.js' 카테고리의 다른 글

Next.js 검색 엔진 최적화 (SEO)  (0) 2025.11.13
Next.js 페이지 라우터의 렌더링 방식  (0) 2025.11.13
Next.js의 프리 페칭 (Pre-fetching)  (0) 2025.11.13
Next.js의 레이아웃 설정  (0) 2025.11.09
Next.js의 네비게이팅  (0) 2025.11.09
'Frontend/Next.js' 카테고리의 다른 글
  • Next.js 페이지 라우터의 렌더링 방식
  • Next.js의 프리 페칭 (Pre-fetching)
  • Next.js의 레이아웃 설정
  • Next.js의 네비게이팅
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    emotion diary
    algorithm
    제네릭
    Pages Router
    cs50
    CS
    javascript
    문자열
    함수 타입
    자료구조
    알고리즘
    Next.js
    typescript
    generic
    App Router
    C
    useState
    인터페이스
    react
    타입 좁히기
    Spa
    트러블 슈팅
    앱 라우터
    바닐라 자바스크립트
    Trouble Shooting
    페이지 라우터
    ai 감성 일기장
    memory
    배열
    클래스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
Next.js 페이지 라우팅 방식
상단으로

티스토리툴바