Next.js 앱 라우터 고급 라우팅 패턴

Frontend/Next.js

Parallel Route

Parallel Route(병렬 라우트)는 하나의 화면 안에 여러 페이지 컴포넌트를 병렬로 렌더링할 수 있게 해주는 기능이다.
소셜 미디어 서비스나 관리자 대시보드와 같은 복잡한 구조의 서비스 구축에 특히 유용하다.

  • 여러 페이지 컴포넌트를 동시에 렌더링
  • 슬롯(Slot)을 사용하여 구현
  • 복잡한 레이아웃 구성에 적합

 

Slot

슬롯은 병렬로 렌더링 될 페이지 컴포넌트를 보관하는 폴더이다.

  • 슬롯 이름은 @로 시작한다.
  • 슬롯 안의 페이지 컴포넌트는 자동으로 부모 레이아웃 컴포넌트에 props로 전달된다.

폴더 구조

 .
├── app
 │        └── parallel
 │        ├── @sidebar // slot 폴더
 │         │         └── page.tsx
 │        ├── layout.tsx
 │        └── page.tsx // '/parallel'

 

레이아웃 컴포넌트에서 슬롯을 활용하는 예시

import { ReactNode } from "react";

export default function Layout({
 children,
 sidebar,
}: {
 children: ReactNode;
 sidebar: ReactNode;
}) {
 return (
   <div>
     {sidebar}
     {children}
   </div>
 );
};

 

다중 슬롯

슬롯의 개수에는 제한이 없다. 여러 슬롯을 사용하여 더 복잡한 레이아웃을 구성할 수 있다.

 .
├── app
 │         └── parallel
 │         ├── @sidebar
 │         ├── @feed
 │          │          ├── page.tsx
 │          │          └── setting // '/parallel/setting'
 │          │          └── page.tsx
 │         ├── layout.tsx
 │         └── page.tsx

 

중첩 라우팅

슬롯 내에서도 추가적인 라우팅이 가능하다.

import Link from "next/link";
import { ReactNode } from "react";

export default function Layout({
  children,
  sidebar,
  feed,
}: {
  children: ReactNode;
  sidebar: ReactNode;
  feed: ReactNode;
}) {
  return (
    <div>
      <div>
        <Link href={"/parallel"}>parallel</Link>
        &nbsp;
        <Link href={"/parallel/setting"}>parallel/setting</Link>
      </div>
      <br />
      {sidebar}
      {feed}
      {children}
    </div>
  );
};
  • /parallel 경로: 모든 슬롯의 기본 페이지가 렌더링 된다.
  • /parallel/setting 경로: @feed슬롯의 setting페이지가 렌더링되고, 다른 슬롯은 이전 상태를 유지한다.

 

주의사항

  • 슬롯의 이전 페이지 유지는 클라이언트 사이드 렌더링(Link컴포넌트)에서만 적용된다.
  • 페이지 새로고침 시 슬롯의 이전 값을 찾을 수 없어 404 오류가 발생할 수 있다.

 

Default 페이지

404 오류 방지를 위해 각 슬롯에 default.tsx페이지를 추가할 수 있다.

// @sidebar/default.tsx

export default function Default() {
  return <div>@sidebar/default</div>;
};
// @sidebar/default.tsx

export default function Default() {
  return <div>@sidebar/default</div>;
};

 

Intercepting Route

인터셉팅 라우트는 사용자의 특정 경로 접속 요청을 가로채서 원하는 페이지를 대신 렌더링하도록 설정하는 라우팅 패턴이다.


상세 페이지를 모달로 표시하거나, 사용자의 상태나 권한에 따라 페이지를 렌더링하거나 자바스크립트가 비활성화된 환경에서도 작동하는 폴백 페이지를 제공할 때 유용하게 사용된다.

  • 사용자가 동일한 경로에 접속하더라도 특정 조건을 만족하면 원래 페이지가 아닌 다른 페이지를 렌더링한다.
  • 주로 클라이언트 사이드 렌더링 방식의 접속에서 작동한다.
    • Link컴포넌트나 라우터 객체의 push메서드를 이용한 이동

 

구현 방법

 .
├── app
 |         ├── (.)book/[id]
 │         └── page.tsx // intercepting route
 │         └──book/[id]
 │         └── page.tsx
  • (): 괄호 안의 경로를 인터셉트하겠다는 의미이다.
  • (.): 소괄호 안의 점(.)은 상대 결로를 나타낸다. 여기서는 동일한 경로상에 있는 book/[id]를 인터셉스한다.
  • 경로 설정

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

Next.js의 이미지 최적화  (0) 2025.11.13
서버 액션 (Server Action)  (0) 2025.11.13
Next.js 앱 라우터의 에러 핸들링  (0) 2025.11.13
스트리밍 (Streaming)  (0) 2025.11.13
라우트 세그먼트 옵션과 클라이언트 라우터 캐시  (0) 2025.11.13
'Frontend/Next.js' 카테고리의 다른 글
  • Next.js의 이미지 최적화
  • 서버 액션 (Server Action)
  • Next.js 앱 라우터의 에러 핸들링
  • 스트리밍 (Streaming)
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
Next.js 앱 라우터 고급 라우팅 패턴
상단으로

티스토리툴바