이 가이드는 Next.js에서의 데이터 페칭 및 캐싱의 기본 사항을 실용적인 예제와 best practice를 제공하며 안내합니다.
다음은 Next.js에서 데이터 페칭의 기본 예제입니다:
// app/page.tsx
export default async function Page() {
const data = await fetch('<https://api.vercel.app/blog>')
const posts = await data.json()
return (
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
)
}
이 예제는 비동기 React 서버 컴포넌트에서 fetch API를 사용한 기본적인 서버 사이드 데이터 페칭을 보여줍니다.
이 컴포넌트는 블로그 게시물 목록을 가져와서 표시합니다. fetch의 응답은 기본적으로 캐시되지 않습니다.
// app/page.tsx
export default async function Page() {
const data = await fetch('<https://api.vercel.app/blog>')
const posts = await data.json()
return (
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
)
}
이 경로에서 다른 Dynamic APIs를 사용하지 않는다면, next 빌드 중에 정적 페이지로 사전 렌더링됩니다. 그 후 Incremental Static Regeneration을 사용하여 데이터를 업데이트할 수 있습니다.
페이지의 사전 렌더링을 방지하려면 파일에 다음을 추가할 수 있습니다:
export const dynamic = 'force-dynamic'
그러나 일반적으로 쿠키, 헤더 사용 또는 페이지 프롭에서 들어오는 searchParams를 읽는 함수들을 사용하여 페이지를 자동으로 동적으로 렌더링하게 만듭니다. 이 경우에는 force-dynamic을 명시적으로 사용할 필요가 없습니다.
이 컴포넌트는 블로그 게시물 목록을 가져와서 표시합니다. 데이터베이스의 응답은 기본적으로 캐시되지 않지만 추가 설정을 통해 캐시할 수 있습니다.
app/page.tsx