stale & cache time

Tanstack query에는 두가지 개념이 있다.

stale

정해진 시간(기본 0초)동안 데이터의 신선함(최신 데이터인지)을 보장하는 시간
데이터는 처음에 fresh 상태였다 stale time이 지나면 stale 상태로 변한다.

cache

우리가 아는 그 캐시
설정 되어있는 시간 만큼(기본 5분) 기존의 데이터를 메모리에 저장해놓는다.

그냥 생각해봤을 때는 stale만 사용해도 될 것 같기도하고, cache만 사용해도 될 것 같은데
Tanstack Query는 왜 두 개념을 모두 사용할까?

동작 방식

만약 stale time이 10초이고 cache time을 5분으로 설정해놓았다면..

API를 불러왔을 때 불러온 fresh한 데이터는 10초 뒤 stale이 될 것이고 5분간 캐시에 남아있을 것이다.
만약 캐시가 삭제되기 전 다시 같은 API를 호출한다면 데이터가 stale하기 때문에 refetching 될 것이고 불러오는 동안 UI는 어떤 데이터를 보여줘야 할까?

이때 캐시에 남아있는 데이터를 보여주고 있다 새로 불러온 데이터가 도착하면 다시 저장해 이 정보를 보여줄 것이다. 여기서 중요한 부분은 캐시가 남아있다고 refetching하지 않는 것이 아니다.
캐시에 남아있는 데이터는 refetching 하기 전 UI에 보여주는 사용자가 서비스를 원활하게 이용할 수 있도록 해준다.

추가로, 만약 cache time에 5분으로 되어있지만 캐시를 사용하고 있는 곳이 남아있다면 gc(가비지 컬렉터)는 캐시를 사용하지 않고 있다 사용하는 곳이 없다면 그때 삭제할것이다.