useInfiniteQuery의 캐싱과 sessionStorage로 스크롤 위치를 복원합니다.
{
staleTime: 5 * 60 * 1000, // 5분간 fresh 상태 유지
gcTime: 30 * 60 * 1000, // 30분간 캐시 보관
refetchOnWindowFocus: false,
}const { data, fetchNextPage, hasNextPage } = useInfiniteQuery({
queryKey: ['posts'],
queryFn: fetchPosts,
getNextPageParam: (lastPage) => lastPage.nextCursor,
});// 스크롤 이벤트 (debounced)
sessionStorage.setItem('scroll_tanstack-posts', String(window.scrollY));
// 데이터 로드 후 복원
const saved = sessionStorage.getItem('scroll_tanstack-posts');
if (saved) window.scrollTo(0, parseInt(saved));staleTime (5분): 데이터가 "신선한(fresh)" 상태로 유지되는 시간. 이 시간 동안은 페이지 복귀 시 refetch 없이 캐시 데이터를 바로 보여줍니다.
gcTime (30분): 사용되지 않는 캐시가 가비지 컬렉션되기 전까지 메모리에 유지되는 시간. staleTime이 지나도 캐시는 남아있어 즉시 표시 후 background refetch합니다.