Next.js 16의 use cache는 명시적이고 유연한 캐싱을 위한 새로운 기능으로, 부분적인 사전 렌더링(Partial Pre-rendering)을 중심으로 사용자 경험(UX)과 성능을 향상시킵니다. ✨
기존 Next.js 15 애플리케이션을 마이그레이션하려면 next.config.js에서 cacheComponents: true를 활성화하고, 기존의 dynamic 및 revalidate 세그먼트 설정을 제거해야 합니다. ⚙️
"uncached data was accessed outside of a suspense boundary" 오류 발생 시, 동적 데이터는 Suspense로 감싸고, 정적 데이터는 컴포넌트 또는 파일 상단에 use cache 지시어를 추가하여 빌드 시 캐시되도록 해결합니다. 🚧
페이지의 캐시 재검증(revalidation) 시간을 설정하기 위해 next/cache에서 cacheLife 함수를 가져와 사용하며, 'minutes'와 같은 사전 정의된 프로필을 사용하거나 stale 및 revalidate 시간을 직접 지정할 수 있습니다. ⏳
블로그 페이지와 같이 정적 레이아웃과 동적 콘텐츠가 혼합된 경우, 동적 부분을 별도의 컴포넌트로 분리하고 <Suspense> 경계로 감싸 부분적인 사전 렌더링을 구현하여 정적 셸과 동적 콘텐츠를 분리할 수 있습니다. 🧩
Suspense 경계 외부의 정적 데이터 페칭 함수(예: getCategories)에는 use cache를 적용하여 빌드 시 캐시되고 정적 셸의 일부가 되도록 할 수 있으며, cache.tag를 사용하여 나중에 캐시를 재검증할 수 있습니다. 🏷️
unstable_cache는 더 이상 개발되지 않으며, use cache가 그 후속이자 개선된 버전으로, API 라우트에서도 작동하며 더 나은 캐싱 전략을 제공합니다. 🚀
외부 API의 속도나 신뢰성 문제로 캐싱이 필요한 경우, use cache: remote를 사용하여 Vercel Data Cache(Redis와 유사)에 데이터를 저장할 수 있으며, 이는 unstable_cache와 달리 키를 자동으로 관리하여 오류를 줄입니다. 🛡️