728x90
Next.js는 React 기반의 프레임워크로, 웹 개발자들에게 파일 기반 라우팅을 제공합니다. Next.js 13에서는 새로운 라우팅 시스템인 App Router가 도입되었으며, 기존 Page Router와 함께 사용 가능합니다.
이 글에서는 App Router와 Page Router의 차이점, 각각의 특징, 그리고 어떤 상황에서 어떤 라우팅 방식을 선택해야 하는지 명확하게 설명하겠습니다.
1. App Router와 Page Router란?
App Router (Next.js 13 이상)
- 기반 디렉토리: app/
- React의 서버 컴포넌트(Server Components)를 기본으로 사용.
- 더 나은 레이아웃 재사용과 중첩 라우팅을 제공.
- 서버 사이드 데이터 패칭과 클라이언트 컴포넌트를 혼합하여 효율적인 UI 구축 가능.
Page Router (Next.js 12 이하)
- 기반 디렉토리: pages/
- React의 클라이언트 컴포넌트(Client Components)를 기본으로 사용.
- 기존의 단순하고 직관적인 라우팅 방식.
- getServerSideProps, getStaticProps를 사용하여 서버 사이드 데이터 패칭 처리
2. 주요 차이점 비교
특성 | App Router ( app / ) | Page Router ( pages / ) |
도입 버전 | Next.js 13 이상 | Next.js 12 이하 |
기반 디렉토리 | app/ | pages/ |
React 컴포넌트 | 서버 컴포넌트 기본 | 클라이언트 컴포넌트 기본 |
라우팅 방식 | 중첩 라우트 및 파일 기반 | 단일 파일 기반 |
데이터 패칭 | React 서버 컴포넌트 내부에서 직접 패칭 | getServerSideProps, getStaticProps 사용 |
레이아웃 | layout.tsx으로 중첩 레이아웃 지원 | _app.js로 전역 레이아웃만 지원 |
학습 곡선 | 상대적으로 가파름 | 상대적으로 낮음 |
성능 | 서버 컴포넌트로 성능 최적화 | 클라이언트 컴포넌트 중심 |
App Router의 주요 특징
- 중첩 레이아웃 지원:
- layout.tsx 파일을 통해 페이지 간 레이아웃을 재사용 가능.
- 예: 공통 네비게이션 바를 각 페이지에서 유지.
- 서버 컴포넌트 기본 지원:
- 서버에서 렌더링 후 클라이언트에 전달하여 초기 로딩 속도를 향상.
- 클라이언트에서만 필요한 로직은 use client를 사용해 구현.
- React의 최신 기능과 통합:
- React 서버 컴포넌트와 use 훅으로 데이터를 선언적으로 패칭.
Page Router의 주요 특징
- 간단한 구조:
- 모든 라우트가 pages/ 디렉토리 내 파일로 정의.
- 빠르게 설정하고 이해할 수 있음.
- 전역 레이아웃 지원:
- _app.js 파일에서 전체 애플리케이션의 공통 로직 작성 가능.
- 명시적인 데이터 패칭:
- getServerSideProps, getStaticProps, getInitialProps로 서버 측 데이터 로직을 구현.
3. 어떤 라우팅 방식을 선택해야 할까?
App Router를 선택해야 하는 경우(보통 앱라우터 사용)
- 최신 Next.js 기능을 활용하고 싶을 때.
- 서버 컴포넌트와 중첩 레이아웃으로 더 효율적인 UI를 설계하고 싶을 때.
- 장기적인 프로젝트에서 더 모던한 구조가 필요한 경우.
Page Router를 선택해야 하는 경우
- 단순한 프로젝트를 빠르게 시작해야 할 때.
- Next.js에 처음 입문하는 경우.
- 기존 pages/ 디렉토리 기반의 코드를 유지보수해야 할 때.
하지만 보통, 그리고 저 역시 App Router를 사용합니다. 떄에 따라 Page Router가 좋을 때도 있겠지만, 새로운 기능은 App Router에서 지원할 뿐더러 더 간편하고 기능이 많은데 마다할 이유가 없더라고요. 여러분도 본인에게 맞는 라우팅 방식을 이용하면 좋을 것 같습니다.
728x90
'웹개발 > Next.js' 카테고리의 다른 글
React(리액트) vs Next.js(넥스트) 무엇을 써야하나요? (0) | 2024.07.31 |
---|---|
Next.js로 웹사이트 라우팅 완벽 가이드 (0) | 2024.07.29 |
Next.js 이미지 삽입 (0) | 2024.07.29 |
Next.js 폰트 적용 방법 (0) | 2024.07.29 |
Next.js 14 스타일 적용 알려드립니다 (0) | 2024.07.29 |