| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 스프링
- 정리
- 데이터베이스
- 코드 테스트
- 디자인 패턴
- oracle
- jsp
- jpa
- spring
- JavaScript
- 자바스크립트
- SQL
- 스프링부트
- 프로그래머스
- BACK-END
- java
- MySQL
- 오라클
- 알고리즘
- 서버
- 코드테스트
- node.js
- Next.js
- 백엔드
- 쿼리
- 자바
- 프론트엔드
- 미니정리
- 프런트엔드
- web
- Today
- Total
참치코더의 꿈 메모장
Next.js / App Router 네비게이팅 정리 본문

App Router 네비게이팅의 핵심 개념
- 페이지 이동 = URL 변경 + 서버 컴포넌트 재렌더링
- 기본 이동은 서버 중심
- 필요한 경우에만 클라이언트 네비게이션 사용
<Link> 컴포넌트
특징
- 클라이언트 사이드 네비게이션
- 전체 새로고침이 되지 않는다.
- Prefetch 자동 지원
|
1
2
3
4
5
6
7
8
9
10
|
import Link from "next/link"
export default function Nav() {
return (
<nav>
<Link href="/">Home</Link>
<Link href="/posts">Posts</Link>
</nav>
);
}
|
cs |
useRouter (클라이언트 전용)
언제 사용할까?
- 내부적으로 프로그래메틱하게 동작할때 사용한다.
- 버튼 클릭, 폼 제출 후 이동, 조건부 이동 시 사용한다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
"use client"
import {useRouter} from "next/navigation";
export default function LoginButton() {
const router = useRouter();
return (
<button onClick={() => router.push("/dashboard")}>
로그인
</button>
);
}
|
cs |
useRouter 제공 메서드
- push : 새 페이지 이동
- replace : 히스토리 대체
- back : 뒤로 가기
- refresh : 서버 컴포넌트 재요청
redirect() (서버 전용 네비게이션)
- 서버 컴포넌트 / 서버 액션 / 미들웨어에서 사용
- 즉시 이동 (렌더링 중단)
|
1
2
3
4
5
6
7
8
9
10
11
|
import {redirect} from "next/navigation"
export default async function Page() {
const user = await getUser();
if (!user) {
redirect("/login");
}
return <div>Dashboard</div>;
}
|
cs |
- HTML 생성 전에 이동
- 보안/권한 처리에 최적
notFound() (404 처리)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import { notFound } from "next/navigation";
export default async function Page({ params }) {
const post = await getPost(params.id);
if (!post) {
notFound();
}
return <PostDetail post={post} />;
}
|
cs |
- /not-found.tsx 렌더링
- 서버에서만 사용 가능
URL 파라미터 & 쿼리스트링 네비게이션
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//동적 라우트
//app/posts/[id]/page.tsx
export default function Page({ params }){
return <div>Post ID: {params.id}</div>
}
//쿼리 스트링
"use client";
import { useSearchParams } from "next/navigation";
export default function Page() {
const searchParams = useSearchParams();
const q = searchParams.get("q");
return <div>검색어: {q}</div>
}
|
cs |
Route Group과 네비게이션
app/(auth)/login/page.tsx -> /login
app/(auth)/register/page.tsx -> /register
- ( )는 URL에 포함되지 않음
- import / 네비게이션 경로에는 영향 없음
페이지 이동시 실제로 일어나는 일
1. <Link> 클릭
2. 서버에 RSC 요청 (전체 RSC 요청)
3. 변경된 부분만 스트리밍
4. 클라이언트에서 부분 렌더링을 한다. (변경된 클라이언트 부분 JS Bundle 업데이트)
'Next.js' 카테고리의 다른 글
| Next.js / Request Memoization, 서버 데이터 캐시 정리 (0) | 2026.02.04 |
|---|---|
| Next.js / React Server Component 주의사항 핵심 요약 (0) | 2026.01.31 |
| Next.js / App Router 버전 (서버 컴포넌트 vs 클라이언트 컴포넌트) 정리 (0) | 2026.01.06 |
| Next.js App Router에서 페이지 라우팅 & 레이아웃 설정 하기 (0) | 2026.01.02 |
| React / useEffect의 3가지 기능 (0) | 2025.11.15 |