Nextjs 15 버전을 기준으로 작성되었습니다. 버전이 올라가면서 변경된 부분이 있을 수 있습니다.
fetch
함수의 기본적인 사용법과 서버 컴포넌트에서 데이터를 패칭하는 방법에 대해 배웠습니다. 이번 파트에서는 좀 더 깊이 들어가 fetch
함수의 고급 옵션들을 살펴보겠습니다.fetch
요청을 캐싱합니다. 즉, 동일한 요청이 여러 번 발생하더라도 동일한 응답을 재사용하게 됩니다. 이는 서버 리소스를 줄이고 응답 속도를 높이는 데 매우 유용합니다.
하지만 언제나 캐시된 데이터를 사용하는 것이 좋은 것은 아닙니다. 예를 들어, 자주 바뀌는 데이터를 보여줘야 한다면 캐싱을 끄거나 일정 시간마다 갱신하도록 설정할 수 있어야 합니다.const res = await fetch('https://jsonplaceholder.typicode.com/posts', {
cache: 'no-store',
});
next.revalidate
옵션을 사용하여 const res = await fetch('https://jsonplaceholder.typicode.com/posts', {
next: { revalidate: 60 }, // 60초마다 새로 데이터를 가져옵니다
});
// 서로 다른 캐시 키
fetch('https://api.example.com/data?lang=en')
fetch('https://api.example.com/data?lang=ko')
전략 | 설정 방법 | 설명 |
---|---|---|
정적 캐시 (기본) | 없음 | 빌드시 fetch 실행, 캐시된 데이터 사용 |
캐시 사용 안 함 | cache: 'no-store' | 항상 최신 데이터를 가져옴 |
ISR 방식 | next: { revalidate: n } | n초마다 캐시를 백그라운드에서 갱신 |
export default async function Page() {
const res = await fetch('https://jsonplaceholder.typicode.com/posts', {
next: { revalidate: 3600 }, // 1시간마다 재검증
});
const posts = await res.json();
return (
<ul>
{posts.map((post: { id: number; title: string }) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
fetch
함수의 고급 옵션들, 특히 캐싱 전략에 대해 자세히 알아보았습니다. no-store
, revalidate
, 내부 캐시 키 생성 로직 등을 이해함으로써 더 정교하게 데이터 흐름을 제어할 수 있습니다.
다음 파트에서는