PromleeBlog
sitemap
aboutMe

posting thumbnail
Next.js 데이터 패칭 완전 정복 5 - 종합 정리와 전략 선택 가이드
Complete Guide to Data Fetching in Next.js 5 - Strategy Summary & Best Practices

📅

🚀

들어가기 전에 🔗

이제까지 Next.js의 App Router 환경에서 데이터를 가져오는 다양한 방식에 대해 알아보았습니다. 마지막 파트에서는 지금까지 배운 내용을 정리하고, 상황별로 어떤 전략을 선택하면 좋을지
실전 가이드
형식으로 제시해드리겠습니다.

🚀

데이터 패칭 전략 정리 🔗

전략(클릭 시 이동)위치사용 시점장점단점
서버 컴포넌트에서 fetchapp/page.tsx, app/layout.tsxHTML 생성 전빠른 로딩, SEO 우수동적 상호작용에는 부적합
클라이언트 컴포넌트 + useEffect'use client' 컴포넌트마운트 후사용자 상호작용 후 fetch 가능초기 로딩 느릴 수 있음
SWR 또는 React Query클라이언트 컴포넌트마운트 후 + 캐싱캐싱, 재검증, refetch 자동화번들 사이즈 증가 가능
라우트 핸들러 (API)app/api/**서버 API 분리 필요 시백엔드 역할 수행 가능추가 구성 필요
ISR (revalidate)서버 컴포넌트캐시 + 재생성실시간성 보완정해진 시간 내 캐시 유지
no-store서버 컴포넌트항상 최신 데이터매 요청마다 새로 fetch성능 비용 ↑

🚀

상황별 추천 전략 🔗

1. 정적인 콘텐츠 페이지 (블로그, 문서 등) 🔗

fetch('https://api.example.com/docs', {
  next: { revalidate: 3600 }, // 1시간마다 갱신
});

2. 로그인한 사용자 전용 대시보드 🔗

const cookieStore = cookies();
const token = cookieStore.get('auth');
await fetch('https://api.example.com/user', {
  headers: { Authorization: `Bearer ${token?.value}` },
});

3. 사용자의 액션에 따라 데이터가 바뀌는 경우 (예: 버튼 클릭 시) 🔗

'use client';
const { data, mutate } = useSWR('/api/posts', fetcher);
// 사용자 액션 후 mutate()

4. 실시간 또는 매우 자주 바뀌는 데이터 🔗

await fetch('https://api.example.com/status', { cache: 'no-store' });

🚀

Next.js의 방향성과 철학 🔗

Next.js는 기본적으로
서버 우선(Server-first)
렌더링 철학을 따릅니다. React 18에서 도입된
서버 컴포넌트(Server Components)
개념과 함께, 클라이언트는 최소화하고, 가능한 한 서버에서 데이터를 가져오는 방향으로 권장합니다.
이를 통해 다음과 같은 장점이 생깁니다:

🚀

결론 🔗

이번 시리즈에서는 Next.js에서 데이터를 가져오는 방법을 기초부터 심화까지 총 5파트에 걸쳐 다루었습니다. 단순한 fetch 사용법에서부터 캐시 전략, SWR, 라우트 핸들러, 캐시 무효화까지... 실제 프로젝트에서 필요한 거의 모든 사례를 커버했습니다.
Next.js의 데이터 패칭은 React와 밀접하게 연결되어 있으므로,
React의 흐름
도 함께 익히는 것이 중요합니다. App Router 시대의 데이터 흐름은 점점 더
서버 중심
으로 진화하고 있습니다.
필요할 때 이 글을 참고하며 전략을 세워보세요!

더 생각해 보기 🔗

참고 🔗