๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ StaleTime๊ณผ CacheTime
* ์ด ๊ธ์ 2023๋ 11์ 6์ผ ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
์ด ๊ธ์ TanStack Query v4๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค.
2023๋ 11์ 6์ผ ๊ธฐ์ค ์ต์ ๋ฒ์ ์ธ v5์์๋ cacheTime → gcTime์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ์ฐธ๊ณ ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ์ฒ์ ์ฌ์ฉํ ๋ ํท๊ฐ๋ฆด ์ ์๋ ๊ฐ๋ ์ค ํ๋์ธ staleTime๊ณผ cacheTime์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
โ staleTime
stale์ ์ฌ์ ์ ์ ์๋ [์ ์ ํ์ง ์์, (๋ง๋ ์ง) ์ค๋๋]์ ๋๋ค.
๋ง ๊ทธ๋๋ก staleTime
์ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์ํ๋ก ๋จ์ ์๋ ์๊ฐ์ ๋งํฉ๋๋ค. ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์์์ ๊ธฐ๋ณธ ๊ฐ์ 0์
๋๋ค. ๋ฐ์ดํฐ๋ฅผ ํ์นํด ์ค์๋ง์ ์ ์ ํ์ง ์๋ค๊ณ ๊ฐ์ฃผํ๋ ๊ฒ์ด์ฃ .
๋ฆฌ์กํธ ์ฟผ๋ฆฌ์์ ๋ฐ์ดํฐ๋ freshํ ๋ฐ์ดํฐ์ผ ์๋, staleํ ๋ฐ์ดํฐ์ผ ์๋ ์์ต๋๋ค.
freshํ ๋ฐ์ดํฐ๋ผ๋ฉด, API ํธ์ถ ์์ด ์ ์ฅ๋(์บ์ฑ๋) ๋ฐ์ดํฐ๊ฐ ๋ค์ ์ฌ์ฉ๋ฉ๋๋ค.
staleํ ๋ฐ์ดํฐ๋ผ๋ฉด, ์๋์ฐ์ ๋ค์ ํฌ์ปค์ค๋์์ ๋๋, ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ง์ดํธ๋ ๋๋, ๋คํธ์ํฌ๊ฐ ๋ค์ ์ฐ๊ฒฐ๋์์ ๋ ๋ฑ์ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ์ ๋ ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํ์นํด ์ฌ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผ ํ ์ ์ staleTime
์ด ๊ฒฝ๊ณผํ๋๋ผ๋ ๋คํธ์ํฌ ์์ฒญ์ด ๋ฐ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด ์๋๋ผ, background refresh๊ฐ ์ผ์ด๋๊ธฐ ์ํด์๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ํ์ํ๋ค๋ ์ ์
๋๋ค.
โ cacheTime
cacheTime
์ ๋นํ์ฑํ๋ ์ฟผ๋ฆฌ๊ฐ ์บ์์์ ์ญ์ ๋ ๋๊น์ง์ ์๊ฐ์ ๋งํฉ๋๋ค. ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์์์ ๊ธฐ๋ณธ ๊ฐ์ 300000์ผ๋ก, 5๋ถ์
๋๋ค. ์ฟผ๋ฆฌ๋ ๋ฑ๋ก๋ ์ต์ ๋ฒ๊ฐ ์๋ ์ฆ์ ์ญ์ ๋ฉ๋๋ค.
์ด ๋ง์ ์ฆ์จ, ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋๋ ์์ ์์ ๋นํ์ฑ ์ํ๋ก ์ ํ๋๋ค๋ ๋ป์ ๋๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด A ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ณด๊ณ ์๋ ํ๋ฉด์ ์๋ค๋ฉด A ์ฟผ๋ฆฌ๋ ๋นํ์ฑํ๋ ์ฟผ๋ฆฌ์ ๋๋ค.
์บ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๊ฐ๊ณผ ํผ๋๋ ์ ์์ต๋๋ค. cacheTime
์ ๊ฐ๋
์์ ์ฃผ์ํด์ผ ํ ๋ถ๋ถ์ cacheTime
์ ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฉ๋๊ณ ์์ ๋๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค๋ ์ ์
๋๋ค. ์น ํ์ด์ง๋ฅผ ์ด๊ณ ๊ทธ ํ์ด์ง์์ ์์ํ ์์
ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ์ cacheTime
์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ๋์ ๋ฐฉ์์ ์ด๋ค ์ํฅ๋ ๋ผ์น์ง ์๋๋ค๋ ๊ฒ๋๋ค. cacheTime
์ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง ์ฝ๋ ์
๊ณผ ์ฐ๊ด์ด ์์ต๋๋ค. ๊ทธ๋์ cacheTime์ 5 ๋ฒ์ ๋ถํฐ๋ gcTime
์ผ๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
โ staleTime
์ cacheTime
๋ณด๋ค ์๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค?
๊ทธ๋ฐ๋ฐ ์ ๊ฐ ์ฌ๋ฆฐ stack overflow์ ์ง๋ฌธ ๊ธ์ ์ดํด๋ณด๋ฉด, staleTime
์ cacheTime
๋ณด๋ค ๊ธธ๊ฒ ์ค์ ํ๋ ๊ฒ์ ๋นํฉ๋ฆฌ์ ์ด๋ผ๋ ์ฝ๋ฉํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ ๊ฐ์ ์ํฉ์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ maintainer์ธ TkDodo๋ staleTime
์ด Infinity, cacheTime
์ด 0์ผ ๋์ ์์๋ฅผ ๋ค์ด ์ค๋ช
ํฉ๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ refetch ํ์ง ์๊ณ , ์บ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋์ง ์๋ ์ฆ์ ๋ฐ๋ก ์ญ์ ๋๋ค๊ณ ํฉ๋๋ค.
์ธ์๋ cacheTime
์ staleTime
๋ณด๋ค ๊ธธ๊ฒ ์ค์ ํด์ผ ํ๋ค๋ ์๊ฒฌ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์์๋ ๋ณผ ์ ์์๋๋ฐ์.
์์ ์์์ฒ๋ผ staleTime
์ Infinity, cacheTime
์ 0์ผ๋ก ์ค์ ํ๋ค๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋นํ์ฑํ๋๋ ์ฆ์ ์บ์ ๋ฐ์ดํฐ๋ ์ญ์ ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ staleTime
์ด Infinity์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ๋ง ๋ณด๋ฉด ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฟผ๋ฆฌ๊ฐ ๋ค์ ํ์ฑํ๋๋ ๊ฒฝ์ฐ์๋ ๋คํธ์ํฌ ์์ฒญ์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์, staleTime
์ cacheTime
๋ณด๋ค ๊ธธ๊ฒ ์ค์ ํ๋ฉด, ์ค์ ํ staleTime
๋ณด๋ค ๋ ์งง์ ์๊ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์์ผ ํ๋ ์ํฉ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ์ํฉ์ผ๋ก ์ธํด, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ time ์ค์ ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ ค์์ง ์๋ ์์ต๋๋ค.
โ staleTime
์ด๋ cacheTime
, ์ธ์ ์กฐ์ ํ๋ฉด ์ข์๊น?
TkDodo๋ cacheTime
์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์๊ณ , time ์ค์ ์ค ํ๋๋ฅผ ์กฐ์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ณดํต staleTime
์ ์กฐ์ ํ์ฌ ํด๊ฒฐํ๋ค๊ณ ํฉ๋๋ค.
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋๊ผ๋ ๋จ์ ์ค ํ๋๋ (๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ) ๋คํธ์ํฌ ์์ฒญ ํ์๊ฐ ๋ง์์ง๋ค๋ ์ ์ด์์ต๋๋ค. ๋ง์ผ ๋ณ๊ฒฝ์ด ์์ฃผ ์ผ์ด๋์ง ์๋ ๋ฐ์ดํฐ๋ผ๋ฉด, staleTime
์ ์กฐ์ ํ์ฌ ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ ํ์๋ฅผ ์ค์ฌ ์ฌ์ฉํ ์ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๋ผ๋ฉด, ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๊พธ์ง ์๋ ๊ฑธ ์ถ์ฒํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ณ๊ฒฝํ ์ ์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ ์ ๋จ ํ ๋ช
์ผ ๊ฒฝ์ฐ(๊ฐ์ธ์ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ, ํ๋กํ ์์ ๋ฑ)์๋ staleTime
์ Infinity
๋ก ์ค์ ํ๊ณ , POST/UPDATE/DELETE ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ์๋ง ์ฟผ๋ฆฌ ๋ฌดํจํ๋ฅผ ํตํด ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ์ฌ ๋ถํ์ํ HTTP Request ์์ฒญ์ ์ค์ด๊ณ ํจ๊ณผ์ ์ผ๋ก ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ์ต๋๋ค.
โ ์ฐธ๊ณ
Caching Examples | React Query | TanStack
Why cacheTime in React Query should always be bigger than staleTime
if staleTime is bigger than cacheTime in react query, what happen? - Stack Overflow