ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ์˜ StaleTime๊ณผ CacheTime
    TECH 2023. 1. 24. 00:27

    * ์ด ๊ธ€์€ 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

    Practical React Query | TkDodo's blog

    ๋Œ“๊ธ€

Designed by Tistory.