"캐시에 있는 데이터는 신뢰할 수 있는 최신 데이터여야 한다."
setQueryData를 호출했다는 것은, 개발자가 의도적으로 최신 데이터라고 간주하는 데이터를 캐시에 직접 넣었다는 의미입니다.| 상태 | 의미 |
|---|---|
| fresh | 현재 캐시 데이터가 신뢰할 수 있다 (별도 fetch 필요 없음) |
| stale | 데이터가 오래되어 신뢰할 수 없음 (다음 기회에 반드시 refetch 필요) |
setQueryData → 개발자가 최신 데이터라고 직접 주입setQueryData를 사용합니다.staleTime 설정과 관계없이setQueryData를 하면 → 즉시 fresh 처리staleTime은 그 시점부터 다시 카운트setQueryData로 넣은 데이터가 실제로 최신이 아닐 수도 있음setQueryData로 변경한 데이터를 "fresh니까 믿을만해"라고 오판할 가능성invalidateQueries로 명확히 stale 처리하는 것이 안전| 동작 | 결과 |
|---|---|
| 서버에서 가져온 데이터로 업데이트 | fresh (기본 동작) |
setQueryData로 업데이트 | fresh (개발자가 보장한 최신 데이터로 간주) |
invalidateQueries 호출 | stale (다음에 반드시 refetch) |
staleTime 설정 있음 | 해당 시간 동안은 무조건 fresh 유지 |
| 행동 | React Query의 해석 |
|---|---|
| 서버에서 데이터를 가져옴 | fresh |
setQueryData로 데이터 수정 | fresh |
invalidateQueries 호출 | stale |
staleTime이 지나감 | stale |
setQueryData = 개발자가 "이거 믿을 수 있어!" 하고 직접 넣은 데이터
React Query = "개발자가 넣었으니까 최신 데이터로 간주하고 fresh 처리"