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분 동안 캐시 데이터 유지
});
🔍 동작 방식
- 처음 FAQ 페이지에 진입하면 API 요청을 보냅니다.
- 1분(staleTime) 동안은 새로고침해도 캐시 데이터를 사용합니다.
- 1분이 지나면 데이터는 "stale(오래됨)" 상태가 되며, 리패칭 시 새 데이터를 가져옵니다.
- 사용자가 다른 페이지로 이동했다가 5분(cacheTime) 내에 돌아오면, 캐시 데이터를 사용합니다.
- 5분이 지나면 캐시가 삭제되며, FAQ 페이지로 돌아오면 새로운 API 요청을 보냅니다.
🚫 cacheTime을 너무 짧게 설정하면?
- 사용자가 페이지를 이동할 때마다 캐시가 삭제되어 불필요한 API 요청이 증가할 수 있습니다.
- 이는 네트워크 비용을 증가시키고, 사용자가 데이터를 불러올 때마다 로딩을 경험하게 만듭니다.
🚫 cacheTime을 너무 길게 설정하면?
- 메모리에 사용하지 않는 데이터가 오래 남아 있어 메모리 낭비가 발생할 수 있습니다.
- 사용하지 않는 오래된 데이터가 계속 유지되면 메모리 누수(memory leak)의 위험이 있습니다.
🎯 적절한 cacheTime을 설정하는 방법
- 자주 변경되지 않는 데이터 (FAQ, 공지사항, 상품 리스트)
→ cacheTime을 길게 설정하여 불필요한 요청을 줄입니다. - staleTime: 5 * 60 * 1000, // 5분 cacheTime: 30 * 60 * 1000, // 30분
- 실시간 데이터 (주식 시세, 날씨, 채팅 메시지)
→ cacheTime을 짧게 설정하여 항상 최신 데이터를 유지합니다. - staleTime: 10 * 1000, // 10초 cacheTime: 5 * 60 * 1000, // 5분
💡 정리
- staleTime: 새로운 요청을 보내지 않고 데이터를 신선하게 유지하는 시간
- cacheTime: 메모리에서 데이터가 유지되는 시간, 초과 시 캐시 삭제
- cacheTime이 있는 이유는 메모리 관리와 성능 최적화를 위해서입니다.
- 적절한 cacheTime 설정을 통해 앱 성능을 높이고, 불필요한 API 호출을 줄일 수 있습니다.
혹시 더 궁금한 점이 있으면 알려주세요! 😊
728x90
'프론트엔드 > Next JS' 카테고리의 다른 글
| 프로그래머스 코드챌린지: 서버 증설 횟수 최적화 분석 (1) | 2025.02.28 |
|---|---|
| 🔥 프론트엔드 개발 면접 정리: JavaScript, React, TypeScript, Next.js, 성능 최적화 총정리 (1) | 2025.02.28 |
| 🚀 React Query를 활용한 API 요청 최적화 (2) | 2025.02.27 |
| useLocation 상세 설명 (1) | 2025.02.26 |
| React에서 시간 슬롯 선택 시 자동 스크롤 기능 추가하기 (3) | 2025.02.26 |