[Frontend] tanstack-query에서 stale time과 gc time의 차이점에 대해서 설명해주세요.
tanstack-query에서 staleTime과 gcTime은 데이터를 캐싱하고 관리하는 데 중요한 두 가지 설정 값입니다. 먼저 요약해서 말씀 드려보자면, staleTime은 데이터가 얼마나 오래 '신선한 상태'로 유지되는지를 정하는 시간이고, gcTime은 해당 쿼리를 사용하는 곳이 없게 된 이후에도 캐시 데이터를 얼마 동안 유지할지를 정하는 시간입니다.
먼저, staleTime은 데이터를 처음 가져온 후에 그 데이터를 '신선한' 상태로 간주하는 시간을 말합니다. staleTime내에는 같은 쿼리에 대한 새로운 네트워크 요청이 일어나지 않고, 캐시 데이터를 그대로 사용하게 됩니다. 예를 들어, staleTime을 5분으로 설정하면, 데이터를 가져오고 나서 5분 동안은 이 데이터가 '신선하다'고 판단해서 refetch가 트리거되더라도 추가 네트워크 요청 없이 캐시 데이터를 계속 사용합니다. 그리고 staleTime이 지난 후 refetch가 트리거된다면 새로운 요청을 보내 데이터를 갱신하게 됩니다. staleTime의 기본 값은 0입니다.
반면에 gcTime은 해당 쿼리가 더 이상 사용되지 않을 때, 캐시 데이터가 메모리에 얼마나 더 남아 있을지를 정하는 시간입니다.
staleTime이 지나면 데이터는 '오래된' 상태가 되지만, 여전히 캐시된 데이터는 사용이 가능합니다. 이 캐시 데이터는 새로운 요청을 보내 신선한 데이터를 받아오기 이전에 임시로 기존 데이터를 표시하는 데 활용됩니다.
다만, 해당 쿼리가 사용되지 않게 된 시점으로부터 gcTime으로 설정된 시간이 지나면 캐시에서 데이터가 삭제됩ㅂ니다. 예를 들어, gcTime을 10분으로 설정하면, 해당 쿼리를 사용하는 컴포넌트가 모두 언마운트된 시점으로부터 10분 후에 캐시에서 데이터가 삭제됩니다. tanstack-query에서 설정한 기본 gcTime은 5분입니다.
정리해서 말씀드려보자면, staleTime은 데이터를 처음 가져온 후 얼마 동안 네트워크 요청 없이 캐시된 데이터를 사용할 지를 정하는 시간이고, gcTime은 해당 쿼리가 사용되지 않게 된 후에도 캐시에 유지될 시간을 정하는 겁니다. 이렇게 각각의 설정을 통해 데이터를 더 효율적으로 관리하고, 불필요한 네트워크 요청을 줄이면서도 최신 데이터를 가져올 수 있도록 합니다.
TanStack Query(구 React Query) TanStack Query는 React, Vue, Solid 등에서 데이터를 효과적으로 관리할 수 있도록 도와주는 라이브러리입니다. 특히, 서버 상태 관리(Server State Management)에 최적화되어 있습니다. |