Prefetching โ
๐ Official Docs
Prefetching์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก Route๋ฅผ ์ด๋ํ๊ธฐ ์ ์ ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ์๋ Route์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ๋ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ์์ด๋ค.
Next.js์์๋ ์ฃผ๋ก Link ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด ์๋ Prefetching์ ์ํํ๋ฉฐ,
ํ์ํ ๊ฒฝ์ฐ router.prefetch()๋ฅผ ์ด์ฉํด ์ง์ Prefetching์ ์คํํ ์๋ ์๋ค.
Prefetching์ ํต์ฌ ๋ชฉ์ ์ ์ด๊ธฐ ๋ก๋ฉ์ ๋น ๋ฅด๊ฒ ํ๋ ๊ฒ๋ณด๋ค๋ ์ดํ Navigation ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ ์๋ค.
1. Prefetching์ด ํ์ํ ์ด์ โ
Prefetching์ด ์๋ ์ผ๋ฐ์ ์ธ Route ์ด๋์ ์ฌ์ฉ์๊ฐ ๋งํฌ๋ฅผ ํด๋ฆญํ ์ดํ ํ์ํ Route๋ฅผ ์์ฒญํ๋ค.
์ฌ์ฉ์ Click
โ
Route ์์ฒญ
โ
์๋ต ๋๊ธฐ
โ
ํ์ํ ๋ฆฌ์์ค ์ฒ๋ฆฌ
โ
ํ๋ฉด ์ ํ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ์ดํ ์์ฒญ๊ณผ ์ฒ๋ฆฌ๊ฐ ์์๋๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ์ํ๋ ์๋ฒ ์ฒ๋ฆฌ ์๊ฐ์ ๋ฐ๋ผ ํ์ด์ง ์ด๋์ด ์ง์ฐ๋ ์ ์๋ค. Prefetching์ ์ด๋ฌํ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ์ด๋ํ๊ธฐ ์ ์ Route๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฏธ๋ฆฌ ์ค๋นํ๋ค.
Route Prefetch
โ
์ฌ์ฉ์ Click
โ
์ค๋น๋ ์ ๋ณด ์ฌ์ฉ
โ
๋น ๋ฅธ ํ๋ฉด ์ ํ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๋ ์์ ์๋ ์ด๋ฏธ ํ์ํ ์ ๋ณด์ ์ผ๋ถ ๋๋ ์ ์ฒด๊ฐ ์ค๋น๋์ด ์์ ์ ์๋ค.
์ผ๋ฐ ํ์ด์ง ์ด๋ vs Prefetching โ
| ๊ตฌ๋ถ | ์ผ๋ฐ ์ด๋ | Prefetching |
|---|---|---|
| ์์ฒญ ์์ | ์ฃผ๋ก ํด๋ฆญ ์ดํ | ์ผ๋ถ ๋ฆฌ์์ค๋ฅผ ํด๋ฆญ ์ |
| ๋๊ธฐ ์๊ฐ | ๋ฐ์ํ ์ ์์ | ์ค์ด๋ค ์ ์์ |
| UX | ์ ํ ๋๊ธฐ ๊ฐ๋ฅ | ๋ ๋น ๋ฅธ ์ ํ ๊ธฐ๋ |
Next.js ํ์ด์ง ์ ํ์ด SPA์ฒ๋ผ ๋๊ปด์ง๋ ํต์ฌ ์ด์ ์ค ํ๋๋ค.
Code Splitting๊ณผ Prefetching โ
Prefetching์ ์ดํดํ๋ ค๋ฉด Code Splitting๊ณผ์ ์ฐจ์ด๋ฅผ ํจ๊ป ์ดํดํ๋ ๊ฒ์ด ์ข๋ค.
Next.js๋ Route๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฒ์๋ถํฐ ๋ชจ๋ Route์ JavaScript๋ฅผ ํ ๋ฒ์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ์ง ์๋๋ค.
์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
โโ /home
โ โโ ํ์ํ ์ฝ๋
โ
โโ /posts
โ โโ ํ์ํ ์ฝ๋
โ
โโ /mypage
โโ ํ์ํ ์ฝ๋ํ์ฌ /home์ ์ ์ํ ์ฌ์ฉ์๊ฐ ์๋ค๋ฉด ์ด๊ธฐ ๋ก๋ฉ์์๋ ํ์ฌ Route์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ์ด๊ธฐ ๋ก๋ฉ ์ ๋ถํ์ํ JavaScript ์ ๋ฌ์ ์ค์ผ ์ ์๋ค.
ํ์ง๋ง Code Splitting์ผ๋ก Route๋ฅผ ๋๋๋ฉด ์ฌ์ฉ์๊ฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ Route์ ๋ฆฌ์์ค๋ ํ์ํ ๋ ์๋กญ๊ฒ ๊ฐ์ ธ์์ผ ํ๋ค. Prefetching์ ์ด ๋ถ๋ถ์ ๋ณด์ํ๋ค.
Code Splittingโ ์ฒ์๋ถํฐ ๋ชจ๋ Route๋ฅผ ๋ก๋ํ์ง ์์ โ ์ด๊ธฐ ๋ก๋ฉ ๋ถ๋ด ๊ฐ์Prefetchingโ ์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๋ Route๋ฅผ ๋ฏธ๋ฆฌ ์ค๋น โ Navigation ๋๊ธฐ ์๊ฐ ๊ฐ์
์ฆ, Code Splitting์ ์ด๊ธฐ ๋ก๋ฉ ๋น์ฉ์ ์ค์ด๊ณ ,
Prefetching์ ์ดํ ํ์ด์ง ์ด๋์์ ๋ฐ์ํ๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ์ญํ ์ ํ๋ค.
2. Automatic Prefetching โ
Next.js์ Link ์ปดํฌ๋ํธ๋ Prefetching์ ์ง์ํ๋ค.
import Link from "next/link";
export default function Page() {
return <Link href="/posts/1">๊ฒ์๊ธ ๋ณด๊ธฐ</Link>;
}Production ํ๊ฒฝ์์ Link๊ฐ ์ฌ์ฉ์์ Viewport์ ๋ค์ด์ค๋ ๋ฑ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด Next.js๋ ํด๋น Route๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฏธ๋ฆฌ ์ค๋นํ ์ ์๋ค.
<Link href="/posts/1" />
โ
Viewport ์ง์
โ
Route Prefetch
โ
์ฌ์ฉ์ Click
โ
Client-side Navigation์ฌ์ฉ์๊ฐ ์ค์ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ธฐ ์ ์ Route๊ฐ ์ค๋น๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ํ์ด์ง ์ ํ์ด ๊ฐ๋ฅํด์ง๋ค.
Production ํ๊ฒฝ์์ ๋์ โ
์๋ Prefetching์ Production ํ๊ฒฝ์์ ํ์ฑํ๋๋ค.
๋ฐ๋ผ์ ์ค์ Prefetching ๋์์ ํ์ธํ๋ ค๋ฉด Production Build๋ก ์คํํ๋ ๊ฒ์ด ์ข๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๊ฐ๋ฐ ํธ์์ฑ๊ณผ ๋ถํ์ํ ์์ฒญ ๋ฐฉ์ง๋ฅผ ์ํด Production๊ณผ ๋์ผํ Prefetching ๋์์ ํ์ธํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
3. Page Router์ Prefetching โ
Page Router์์๋ Link๋ฅผ ์ด์ฉํ ์๋ Prefetching์ ์ฌ์ฉํ ์ ์๋ค.
import Link from "next/link";
export default function Page() {
return <Link href="/posts/1">๊ฒ์๊ธ ๋ณด๊ธฐ</Link>;
}Page Router์ Link๋ ์ฐ๊ฒฐ๋ Route์ ํ์ํ ํ์ด์ง ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ์ฌ Client-side Navigation ์๋๋ฅผ ๊ฐ์ ํ๋ค.
pages
โโ index.tsx
โโ posts
โ โโ [id].tsx
โโ mypage.tsx์๋ฅผ ๋ค์ด /posts/1๋ก ์ด๋ํ๋ Link๊ฐ ์๋ค๋ฉด Next.js๋ ํด๋น ํ์ด์ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ ์ ์๋ค.
Programmatic Prefetching โ
Link๋ฅผ ์ฌ์ฉํ์ง ์๋ Programmatic Navigation์์๋ router.prefetch()๋ฅผ ์ด์ฉํด Route๋ฅผ ์ง์ ๋ฏธ๋ฆฌ ์ค๋นํ ์ ์๋ค.
import { useEffect } from "react";
import { useRouter } from "next/router";
export default function Page() {
const router = useRouter();
useEffect(() => {
router.prefetch("/dashboard");
}, [router]);
const handleClick = () => {
router.push("/dashboard");
};
return <button onClick={handleClick}>Dashboard</button>;
}Link๊ฐ ์๋์ผ๋ก Prefetching์ ์ฒ๋ฆฌํด ์ฃผ๋ ๊ฒฝ์ฐ์๋ ๋ณ๋๋ก router.prefetch()๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Prefetching ๋นํ์ฑํ โ
Page Router์ Link์์๋ prefetch={false}๋ฅผ ์ด์ฉํด Viewport ๊ธฐ๋ฐ Prefetching์ ๋นํ์ฑํํ ์ ์๋ค.
<Link href="/search" prefetch={false}>
Search
</Link>๋ค๋ง Page Router์์๋ prefetch={false}๋ฅผ ์ฌ์ฉํด๋ Hover ์ Prefetch๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ Page Router์ App Router์ prefetch={false} ๋์์๋ ์ฐจ์ด๊ฐ ์๋ค.
4. App Router์ Prefetching โ
App Router์์๋ Link๋ฅผ ์ด์ฉํด Route๋ฅผ ์๋ Prefetchํ ์ ์๋ค.
import Link from "next/link";
export default function Page() {
return <Link href="/posts/1">๊ฒ์๊ธ ๋ณด๊ธฐ</Link>;
}App Router์์๋ Server Component๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Prefetching ๋์์ด ๋จ์ํ JavaScript Bundle๋ง์ ์๋ฏธํ์ง ์๋๋ค. Route์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ๋ฏธ๋ฆฌ ์ค๋น๋ ์ ์๋ค.
Route
โโ RSC Payload
โโ Client Component JavaScript
โโ Route ๋ ๋๋ง์ ํ์ํ ์ ๋ณดPrefetch ๋ฒ์๋ Route๊ฐ Static์ธ์ง Dynamic์ธ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
Prefetching์ด ํญ์ ๋ฐ์ดํฐ๊น์ง ์ ๋ถ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋๋ค.
(๋ผ์ฐํฐ / fetch ๋ฐฉ์ / ์บ์ ์ ๋ต์ ๋ฐ๋ผ ๋ค๋ฆ)
Static Route โ
์ ์ ์ผ๋ก ์ค๋นํ ์ ์๋ Route๋ ์ ์ฒด Route๋ฅผ Prefetchํ ์ ์๋ค.
Link๊ฐ Viewport์ ์ง์
โ
์ ์ฒด Route Prefetch
โ
์ฌ์ฉ์ Click
โ
์ค๋น๋ Route ์ฌ์ฉex.
app
โโ about
โโ page.tsx/about์ด Static Route๋ผ๋ฉด Next.js๋ ํด๋น Route๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ์ฌ ์ดํ Navigation์ ํ์ฉํ ์ ์๋ค.
Dynamic Route โ
Dynamic Route๋ ์์ฒญ ์์ ์ ์๋ฒ ์์ ์ด ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ํญ์ ์ ์ฒด Route๊ฐ ๋ฏธ๋ฆฌ ์ค๋น๋๋ ๊ฒ์ ์๋๋ค.
app
โโ blog
โโ [slug]
โโ page.tsx
โโ loading.tsx๊ธฐ๋ณธ Prefetch ๋์์์๋ loading.tsx์ ๊ฐ์ Loading Boundary๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ํด๋น Boundary๊น์ง์ Route ์ผ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ ์ ์๋ค.
Shared Layout
+
Loading UI
โ
๋ฏธ๋ฆฌ Prefetch
์ค์ Dynamic Content
โ
Navigation ์ดํ ์๋ฒ์์ ์ฒ๋ฆฌ์ด๋ฅผ ํตํด ์ ์ฒด Dynamic Route๊ฐ ์ค๋น๋ ๋๊น์ง ์๋ฌด ํ๋ฉด๋ ๋ณด์ฌ์ฃผ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋์ , ์ค๋น๋ Layout์ด๋ Loading UI๋ฅผ ๋จผ์ ํ์ฉํ ์ ์๋ค.
prefetch ์ต์ โ
App Router์ Link์์๋ prefetch ๊ฐ์ ์ด์ฉํด Prefetch ๋์์ ์ ์ดํ ์ ์๋ค.
<Link href="/dashboard">Dashboard</Link>๊ธฐ๋ณธ๊ฐ์ ์๋ ๋์์ด๋ฉฐ Route ํน์ฑ์ ๋ฐ๋ผ Prefetch ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๋ค.
Static Routeโ ์ ์ฒด Route Prefetch ๊ฐ๋ฅDynamic Routeโ loading.tsx Boundary๊น์ง Partial Prefetch ๊ฐ๋ฅ
์ ์ฒด Route๋ฅผ ๋ช ์์ ์ผ๋ก Prefetchํ๋๋ก ์ค์ ํ ์๋ ์๋ค.
<Link href="/dashboard" prefetch={true}>
Dashboard
</Link>๋ฐ๋๋ก Prefetching์ ์์ ํ ๋นํ์ฑํํ ์๋ ์๋ค.
<Link href="/dashboard" prefetch={false}>
Dashboard
</Link>App Router์์ prefetch={false}๋ฅผ ์ฌ์ฉํ๋ฉด Viewport ์ง์
์ด๋ Hover์ ์ํ ์๋ Prefetching์ด ์ํ๋์ง ์๋๋ค.
5. Client-side Router Cache โ
App Router์์๋ Prefetching์ด๋ Navigation ๊ณผ์ ์์ ๊ฐ์ ธ์จ RSC Payload์ Route Segment ์ ๋ณด๋ฅผ Client-side Router Cache์ ์ ์ฅํ๊ณ , ์ดํ Navigation์์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ฏธ Prefetch๋์๊ฑฐ๋ ๋ฐฉ๋ฌธํ๋ Route๋ก ๋ค์ ์ด๋ํ ๋ ์บ์๋ ์ ๋ณด๋ฅผ ํ์ฉํด ๋ถํ์ํ ์์ฒญ๊ณผ Navigation ๋๊ธฐ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
๋ค๋ง Cache์ ์ ์ง ๋ฒ์์ ์๊ฐ์ Route ํน์ฑ์ด๋ Next.js ๋ฒ์ ๋ฐ ์ค์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
6. App Router์ Manual Prefetching โ
App Router์์๋ router.prefetch()๋ฅผ ์ด์ฉํด Route๋ฅผ ์ง์ Prefetchํ ์ ์๋ค.
"use client";
import { useRouter } from "next/navigation";
export default function Page() {
const router = useRouter();
const handlePrefetch = () => {
router.prefetch("/pricing");
};
return <button onMouseEnter={handlePrefetch}>Pricing</button>;
}์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
- Viewport ๋ฐ์ ์๋ Route๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- Hover ์์ ์๋ง Prefetchํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ํน์ ์ฌ์ฉ์ ํ๋ ์ดํ Prefetchํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ค์ Route๋ฅผ ์์ธกํ ์ ์๋ ๊ฒฝ์ฐ
์ผ๋ฐ์ ์ธ ๋งํฌ ์ด๋์์๋ Link์ ์๋ Prefetching์ ์ฐ์ ์ฌ์ฉํ๊ณ , ๊ธฐ๋ณธ ๋์๋ง์ผ๋ก ๋ถ์กฑํ ๊ฒฝ์ฐ Manual Prefetching์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข๋ค.
Hover ๊ธฐ๋ฐ Prefetching โ
Viewport์ ๋ค์ด์ค๋ ๋ชจ๋ Link๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ค๋ ๋์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๊ด์ฌ์ ๋ณด์ธ Link๋ง Prefetchํ๋๋ก ๊ตฌํํ ์๋ ์๋ค.
"use client";
import { useRouter } from "next/navigation";
export default function PricingButton() {
const router = useRouter();
return (
<button
onMouseEnter={() => router.prefetch("/pricing")}
onClick={() => router.push("/pricing")}
>
Pricing
</button>
);
}์ด ๋ฐฉ์์ ๋ถํ์ํ Prefetch ์์ฒญ์ ์ค์ด๋ฉด์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง ์์ ์ Route๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
7. Prefetching ๋นํ์ฑํ โ
Prefetching์ด ํญ์ ํ์ํ ๊ฒ์ ์๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ Prefetch ๋ฒ์๋ฅผ ์ค์ด๊ฑฐ๋ ๋นํ์ฑํ๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
- ์ฌ์ฉ์๊ฐ ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ฎ์ Route
- Link๊ฐ ๋งค์ฐ ๋ง์ด ์กด์ฌํ๋ ํ๋ฉด
- ๋คํธ์ํฌ ์ฌ์ฉ๋์ ์ค์ฌ์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฌ์ฉ์์ ํ๋ ์ดํ์๋ง ์๋ฏธ๊ฐ ์๊ธฐ๋ Route
Prefetch๋ฅผ ์ ํํ๋ฉด ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ์ ์ค์ผ ์ ์์ง๋ง,
์ค์ Navigation ์ ํ์ํ ์ ๋ณด๋ฅผ ์๋กญ๊ฒ ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก ๋๊ธฐ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
- Prefetch ์ ๊ทน ํ์ฉ โ ๋น ๋ฅธ Navigation / ๋คํธ์ํฌ ์ฌ์ฉ๋ ์ฆ๊ฐ ๊ฐ๋ฅ
- Prefetch ์ ํ โ ๋คํธ์ํฌ ์์ฒญ ๊ฐ์ / Navigation ๋๊ธฐ ์๊ฐ ์ฆ๊ฐ ๊ฐ๋ฅ
8. Page Router์ App Router ๋น๊ต โ
| ๊ตฌ๋ถ | Page Router | App Router |
|---|---|---|
| ์๋ Prefetch | Link | Link |
| Manual Prefetch | next/router | next/navigation |
| ์ฃผ์ Prefetch ๋์ | ํ์ด์ง ์ฝ๋ ๋ฐ ๊ด๋ จ ๋ฐ์ดํฐ | RSC Payload, Client JS ๋ฐ Route ์ ๋ณด |
| Static / Dynamic ๊ตฌ๋ถ | ์์ | Prefetch ๋ฒ์์ ์ง์ ์ ์ธ ์ํฅ |
| Partial Prefetch | ์ ํ์ | loading.tsx Boundary ํ์ฉ ๊ฐ๋ฅ |
prefetch={false} | Viewport Prefetch ๋นํ์ฑํ, Hover Prefetch ๊ฐ๋ฅ | ์๋ Prefetch ๋นํ์ฑํ |
๋ Router ๋ชจ๋ Prefetching์ ์ ๊ณตํ์ง๋ง App Router์์๋ Server Component์ Streaming ๊ตฌ์กฐ๊ฐ ํจ๊ป ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ Prefetching์ ์ญํ ์ด ๋ Route Segment ์ค์ฌ์ผ๋ก ํ์ฅ๋๋ค.
์ ๋ฆฌ โ
Next.js์ Prefetching์ ์ฌ์ฉ์๊ฐ Route๋ฅผ ์ด๋ํ๊ธฐ ์ ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ์ฌ Navigation ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๊ธฐ๋ฅ์ด๋ค.
- Code Splitting โ ์ด๊ธฐ Route์ ํ์ํ ๋ฆฌ์์ค ์ค์ฌ์ผ๋ก ๋ก๋ โ ์ด๊ธฐ ๋ก๋ฉ ๋ถ๋ด ๊ฐ์
- Prefetching โ ์ดํ ์ด๋ํ ๊ฐ๋ฅ์ฑ์ด ์๋ Route๋ฅผ ๋ฏธ๋ฆฌ ์ค๋น โ Navigation ๋๊ธฐ ์๊ฐ ๊ฐ์
Next.js์์๋ Link๋ฅผ ์ด์ฉํ Automatic Prefetching์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฉํ ์ ์์ผ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ router.prefetch()๋ฅผ ์ด์ฉํด Manual Prefetching์ ์ํํ ์ ์๋ค.
Page Router์์๋ ํ์ด์ง ์ฝ๋์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก Prefetching์ด ์ด๋ฃจ์ด์ง๊ณ , App Router์์๋ Server Component ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก RSC Payload์ Route Segment ๋ฑ์ ํ์ฉํ๋ค.
ํนํ App Router์์๋ Static Route์ Dynamic Route์ ํน์ฑ, loading.tsx, Client-side Router Cache, Streaming ๋ฑ์ด ํจ๊ป ์๋ํ๋ฉด์ ๋น ๋ฅธ Client-side Navigation์ ๊ตฌํํ๋ค.
๋ฐ๋ผ์ Prefetching์ ์ด๊ธฐ ๋ก๋ฉ ์์ฒด๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ธฐ๋ฅ์ด๋ผ๊ธฐ๋ณด๋ค, Code Splitting ์ดํ ๋ฐ์ํ ์ ์๋ Route ์ด๋ ์ง์ฐ์ ์ค์ฌ์ฃผ๋ Navigation ์ต์ ํ ์ ๋ต์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ์ข๋ค.