cacheTime VS staleTime

2025. 2. 27. 00:53프론트엔드/Next JS

728x90

좋은 질문이에요! 😊

💡 캐시(Cache)란?

캐시는 이미 가져온 데이터를 임시로 저장해 두고, 동일한 요청이 있을 때 서버에 다시 요청하지 않고 저장된 데이터를 재사용할 수 있도록 하는 메커니즘입니다.


🔍 그렇다면 cacheTime이란?

**cacheTime**은 React Query에서 캐시된 데이터가 메모리에 유지되는 시간을 설정하는 옵션입니다.
즉, 캐시가 "삭제되지 않고" 메모리에 머무르는 시간을 의미합니다. (기본값: 5분)

const { data } = useQuery({
  queryKey: ['posts'],
  queryFn: fetchPosts,
  cacheTime: 300000, // 5분 (기본값)
});

🤔 왜 cacheTime이 필요할까요?

1️⃣ 메모리 관리

  • 캐시 데이터가 무한히 남아 있으면 메모리 누수가 발생할 수 있습니다.
  • cacheTime이 지나면 React Query는 캐시를 자동으로 삭제하여 메모리를 효율적으로 관리합니다.

2️⃣ 앱 성능 최적화

  • 사용자가 해당 데이터를 다시 필요로 할 가능성이 있을 때, cacheTime 내에서는 빠르게 캐시 데이터를 제공할 수 있습니다.
  • cacheTime이 지나면 더 이상 사용되지 않는 데이터는 메모리에서 제거하여 불필요한 메모리 사용을 방지합니다.

3️⃣ 컴포넌트 언마운트 시에도 캐시 유지

  • 만약 FAQ 페이지에서 다른 페이지로 이동했다가 돌아온다면, cacheTime 동안에는 다시 요청하지 않고 캐시 데이터를 사용합니다.
  • 하지만 cacheTime이 지나면 캐시가 삭제되고, 페이지를 다시 방문했을 때 새로운 API 요청을 보냅니다.

🚦 예시 시나리오

staleTime: 1분, cacheTime: 5분 설정

const { data } = useQuery({
  queryKey: ['faqs'],
  queryFn: fetchFaqs,
  staleTime: 60000,  // 1분 동안 새 요청을 보내지 않음
  cacheTime: 300000,  // 5분 동안 캐시 데이터 유지
});

🔍 동작 방식

  1. 처음 FAQ 페이지에 진입하면 API 요청을 보냅니다.
  2. 1분(staleTime) 동안은 새로고침해도 캐시 데이터를 사용합니다.
  3. 1분이 지나면 데이터는 "stale(오래됨)" 상태가 되며, 리패칭 시 새 데이터를 가져옵니다.
  4. 사용자가 다른 페이지로 이동했다가 5분(cacheTime) 내에 돌아오면, 캐시 데이터를 사용합니다.
  5. 5분이 지나면 캐시가 삭제되며, FAQ 페이지로 돌아오면 새로운 API 요청을 보냅니다.

🚫 cacheTime을 너무 짧게 설정하면?

  • 사용자가 페이지를 이동할 때마다 캐시가 삭제되어 불필요한 API 요청이 증가할 수 있습니다.
  • 이는 네트워크 비용을 증가시키고, 사용자가 데이터를 불러올 때마다 로딩을 경험하게 만듭니다.

🚫 cacheTime을 너무 길게 설정하면?

  • 메모리에 사용하지 않는 데이터가 오래 남아 있어 메모리 낭비가 발생할 수 있습니다.
  • 사용하지 않는 오래된 데이터가 계속 유지되면 메모리 누수(memory leak)의 위험이 있습니다.

🎯 적절한 cacheTime을 설정하는 방법

  1. 자주 변경되지 않는 데이터 (FAQ, 공지사항, 상품 리스트)
    → cacheTime을 길게 설정하여 불필요한 요청을 줄입니다.
  2. staleTime: 5 * 60 * 1000, // 5분 cacheTime: 30 * 60 * 1000, // 30분
  3. 실시간 데이터 (주식 시세, 날씨, 채팅 메시지)
    → cacheTime을 짧게 설정하여 항상 최신 데이터를 유지합니다.
  4. staleTime: 10 * 1000, // 10초 cacheTime: 5 * 60 * 1000, // 5분

💡 정리

  • staleTime: 새로운 요청을 보내지 않고 데이터를 신선하게 유지하는 시간
  • cacheTime: 메모리에서 데이터가 유지되는 시간, 초과 시 캐시 삭제
  • cacheTime이 있는 이유는 메모리 관리와 성능 최적화를 위해서입니다.
  • 적절한 cacheTime 설정을 통해 앱 성능을 높이고, 불필요한 API 호출을 줄일 수 있습니다.

혹시 더 궁금한 점이 있으면 알려주세요! 😊

728x90