πŸš€ Nextjs15 App Router μ‹œμž‘ν•˜κΈ° 2

β€’

πŸ”„ 데이터 페칭

Next.js 15μ—μ„œλŠ” νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈμ—μ„œ async ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜λŠ” 데이터 νŽ˜μΉ­μ„ ν•  수 μžˆμ–΄μš”.

// app/page.tsx
export default async function HomePage() {
  const data = await fetchData();
 
  return <div>{data}</div>;
}

이전 λ²„μ „μ—μ„œλŠ” νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈλ₯Ό 비동기 ν•¨μˆ˜λ‘œ μ‚¬μš© μ‹œ λ¬Έμ œκ°€ 생길 수 μžˆμ—ˆμ§€λ§Œ, μ΄μ œλŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— async와 awaitλ₯Ό ν™œμš©ν•œ 데이터 페칭이 훨씬 κ°„νŽΈν•΄μ‘Œμ–΄μš”!

πŸ’Ύ 데이터 μΊμ‹œ

데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ 캐싱은 정말 μ€‘μš”ν•©λ‹ˆλ‹€!

// μš”μ²­ κ²°κ³Όλ₯Ό μΊμ‹±ν•˜μ§€ μ•Šμ•„μš”.
const response = await fetch(API_URL, { cache: "no-store" });
 
// μš”μ²­ κ²°κ³Όλ₯Ό 무쑰건 μΊμ‹±ν•΄μš”.
const response = await fetch(API_URL, { cache: "force-cache" });
 
// μš”μ²­ κ²°κ³Όλ₯Ό 10μ΄ˆλ§ˆλ‹€ κ°±μ‹ ν•΄μš”.
const response = await fetch(API_URL, { next: { revalidate: 10 } });
 
// νƒœκ·Έ 기반 캐싱을 μ„€μ •ν•˜κ³ , 이후 revalidateTag()둜 ν•΄λ‹Ή νƒœκ·Έμ˜ μΊμ‹œλ₯Ό κ°±μ‹ ν•  수 μžˆμ–΄μš”.
const response = await fetch(API_URL, { next: { tags: ["a"] } });

⚑ μš”μ²­ λ©”λͺ¨μ΄μ œμ΄μ…˜

μ€‘λ³΅λœ API μš”μ²­μ„ ν•˜λ‚˜λ‘œ μ΅œμ ν™”ν•΄μ£ΌλŠ” κΈ°λŠ₯μ΄μ—μš”. νŽ˜μ΄μ§€ λ‚΄μ—μ„œ λ™μΌν•œ μš”μ²­μ΄ μ—¬λŸ¬ 번 λ°œμƒν•˜λ”λΌλ„ ν•œ 번만 μ²˜λ¦¬λ˜λ„λ‘ λ„μ™€μ€˜μš”.

주의 사항

λ Œλ”λ§μ΄ λλ‚˜λ©΄ μΊμ‹œκ°€ μ‚¬λΌμ§€λ―€λ‘œ, 데이터 μΊμ‹œμ™€λŠ” λ‹€λ₯Έ κ°œλ…μ΄μ—μš”!

πŸ—‚οΈ ν’€ 라우트 μΊμ‹œ

μ„œλ²„μ—μ„œ νŠΉμ • νŽ˜μ΄μ§€μ˜ λ Œλ”λ§ κ²°κ³Όλ₯Ό μΊμ‹±ν•˜λŠ” κΈ°λŠ₯으둜, λΉŒλ“œ μ‹œμ μ— 미리 λ Œλ”λ§ν•˜μ—¬ λΉ λ₯Έ 응닡을 μ œκ³΅ν•΄μš”. 정적 νŽ˜μ΄μ§€ 생성과 λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ revalidateλ₯Ό 톡해 주기적으둜 κ°±μ‹ ν•  수 μžˆμ–΄μš”.

πŸ”€ 동적 νŽ˜μ΄μ§€μ™€ 정적 νŽ˜μ΄μ§€

동적 νŽ˜μ΄μ§€

데이터가 자주 λ³€κ²½λ˜κ±°λ‚˜, μš”μ²­λ§ˆλ‹€ λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ³΄μ—¬μ€˜μ•Ό ν•  λ•Œ μ‚¬μš©ν•΄μš”. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžλ³„ λŒ€μ‹œλ³΄λ“œλ‚˜ μ‹€μ‹œκ°„ 데이터가 ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€!

정적 νŽ˜μ΄μ§€

데이터 변경이 거의 μ—†κ³ , λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ λ™μΌν•œ λ‚΄μš©μ„ 보여쀄 λ•Œ μ‚¬μš©ν•΄μš”. λΈ”λ‘œκ·Έ ν¬μŠ€νŠΈλ‚˜ 상세 νŽ˜μ΄μ§€κ°€ 이에 ν•΄λ‹Ήν•˜λ©°, generateStaticParams ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ λΉŒλ“œ μ‹œμ μ— 정적 νŽ˜μ΄μ§€λ₯Ό 생성할 수 μžˆμ–΄μš”.

정적 νŒŒλΌλ―Έν„° 생성
export async function generateStaticParams() {
  const posts = await fetchPosts();
  return posts.map((post) => ({ id: post.id.toString() }));
}

μ™ΈλΆ€ 링크