넥스트js

[next.js]캐싱

민ズl 2024. 12. 12. 20:15

캐싱이란🤔

  • 데이터를 효율적으로 저장하고 빠르게 제공하기 위한 기술🥳
  • Next.js에서 클라이언트서버에서 데이터를 빠르게 제공하거나 서버 부하를 줄이는 데 사용

캐싱의 종류

1. 클라이언트 캐싱

  • 브라우저나 사용자 디바이스에 데이터를 저장하여 재요청 없이 데이터를 제공
  • 예시: 브라우저가 이미 로드된 이미지나 CSS 파일을 캐싱하여, 다시 방문 시 빠르게 로드 🏃‍♀️

2. 서버 캐싱

  • 서버가 자주 사용하는 데이터를 미리 저장하여 클라이언트 요청에 빠르게 응답
  • 서버 부하를 줄이고 성능을 최적화 🌟
  • 예시 : API 요청 결과를 캐싱하여 동일 요청 시 더 빠르게 처리

주요 캐싱 개념과 옵션

1. Full Route Cache

  • 페이지 전체를 캐싱하여 요청 시 저장된 페이지를 반환
  • 정적 페이지나 cache : 'force-cache' 사용시 적용
export async function getStaticProps() {
  const res = await fetch("https://api.example.com/data", {
    cache: "force-cache", // 요청 결과를 무조건 캐싱
  });
  const data = await res.json();
  return { props: { data } };
}

2. Request 메모제이션

  • 동일 요청에 대한 중복 계산을 방지하고 결과를 재사용
  • 클라이언트와 서버 모두 적용 가능
const fetchWithMemo = (url) => {
  if (!cache[url]) {
    cache[url] = fetch(url).then((res) => res.json());
  }
  return cache[url];
};

3. Data Cache

  • fetch를 통해 받은 데이터를 저장

옵션

  • cache : "force-cache" : 요청 결과를 항상 캐싱
const res = await fetch("https://api.example.com/data", {
  cache: "force-cache", // 결과값 저장
});
  • cache: "no-store" : 캐싱을 하지 않고 매번 최신 데이터를 가져옴 (Next.js 15버전 이후 기본값)
const res = await fetch("https://api.example.com/data", {
  cache: "no-store", // 항상 최신 데이터를 가져옴
});

4. Incremental Static Regeneration (ISR)

  • next: {revalidate: n} 옵션으로 특정 시간(n초)마다 데이터를 업데이트
  • 정적 페이지를 일정 주기로 자동 재검증
const res = await fetch("https://api.example.com/data", {
  next: { revalidate: 10 }, // 10초마다 데이터 재검증
});

5. On-Demand Revalidate (태그 캐싱)

  • 특정 태그를 기반으로 데이터 캐싱 및 무효화
  • next: { tags: ['a'] }로 캐싱 태그 설정 후, revalidateTag를 호출해 특정 태그의 캐시 무효화
export async function getStaticProps() {
  const res = await fetch("https://api.example.com/data", {
    next: { tags: ['a'] }, // 'a' 태그로 요청을 태그화
  });
  const data = await res.json();
  return { props: { data } };
}

// 캐시 무효화
import { revalidateTag } from 'next/cache';
export async function revalidateData() {
  await revalidateTag('a'); // 'a' 태그에 해당하는 캐시 무효화
}

🌟 요약🌟

클라이언트 캐싱: 브라우저에 저장된 데이터를 사용.

서버 캐싱: 서버에서 데이터를 저장하고 빠르게 응답.

캐싱 옵션:

  • cache: "force-cache": 무조건 캐싱.
  • cache: "no-store": 캐싱 비활성화.
  • next: { revalidate: n }: 일정 주기로 데이터 재검증.
  • next: { tags: [] }: 특정 태그 기반 캐싱 관리.

 

'넥스트js' 카테고리의 다른 글

[next.js]Parallel Route ,Intercepting route  (0) 2024.12.17
[next.js]dynamic 옵션  (0) 2024.12.12
[next.js]환경변수  (0) 2024.12.12
[next.js] React Server Component, Client Router Cache  (0) 2024.12.12
[next.js]Link, pre-fetching, fallback  (0) 2024.12.12