๐ŸณReact | React Query ํ™œ์šฉํ•˜๊ธฐ - staleTime, cacheTime

์›์˜ยท2023๋…„ 8์›” 17์ผ
1

์ƒˆ๋กœ์šด ์ง€์‹๐Ÿ’ก

๋ชฉ๋ก ๋ณด๊ธฐ
14/15
post-thumbnail

๐Ÿ”ŽReact Query ๊ธฐ๋ณธ ์‚ฌ์šฉ์‹œ ๋ฌธ์ œ์ 

๐Ÿ’ก์›์ธ

  • Devtools์„ ๋ณด๋ฉด, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ•˜์ž๋งˆ์ž stale(์˜ค๋ž˜๋จ) ์ƒํƒœ๊ฐ€ ๋จ
  • ๋”ฐ๋ผ์„œ, useQuery ์ผ์ง€๋งŒ ๊ณ„์† ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†ตํ•ด ์ƒˆ๋กœ ๋ฐ›์•„์˜ด

  • ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด, useQuery ํ˜น์€ useInfiniteQuery๋ฅผ ์‚ฌ์šฉํ•ด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ stale ์ƒํƒœ
    ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” query์— staleTime์˜ต์…˜ ์ง€์ •

๐Ÿ“ŒstaleTime

  • ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ fresh -> stale ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  • ๊ธฐ๋ณธ๊ฐ’ : 0
  • fresh ์ƒํƒœ์ผ ๋•Œ ๊ฐ™์€ key ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด query๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋„คํŠธ์›Œํฌ ํ†ต์‹  X
  • stale ์ƒํƒœ์ผ ๋•Œ ๊ฐ™์€ key ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด query๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๊ธฐ์กด์— ์บ์‹œ๋˜์–ด์žˆ๋˜ ๊ฒƒ์ด UI ์ƒ์œผ๋กœ ๋ฐ”๋กœ ๋ณด์—ฌ์ง€๊ธฐ๋Š” ํ•˜์ง€๋งŒ,
    background์—์„œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ†ตํ•ด ์ƒˆ๋กœ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์™€์„œ ์—…๋ฐ์ดํŠธ๋จ
    ์ด ๋•Œ, UI์ƒ์— ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ ๋ฐ”๋€Œ๋ฉด UI๋„ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธ๋จ

    staleTime ๊ธฐ๋ณธ๊ฐ’(0)์ผ ๋•Œ ์ž๋™์œผ๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹ (refetch) ํ•˜๋Š” ๊ฒฝ์šฐ

๐Ÿ’ก์˜ˆ์‹œ

  • useQuery ์„ธ๋ฒˆ์งธ options ์ธ์ž ํ†ตํ•ด staleTime 5์ดˆ๋กœ ์ง€์ •
const [checked, setChecked] = useState(false);
const { data, isLoading, error }
  = useQuery(['exampleKey', checked], async () => { 
    console.log('fetching in useQuery...', checked);
    return fetch(`${checked?'sale_':''}/exampleAPI`).then((res) => res.json());
  }, {
    // options ์ถ”๊ฐ€
    staleTime: 5000, 
  });
  const handleChange = () => setChecked((prev) => !prev);

  • ์ฒ˜์Œ ํŽ˜์ด์ง€ ๋กœ๋”ฉํ•˜๋ฉด ์ฒดํฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ['exampleKey', false], ['exampleKey', true] ๋กœ ๊ฐ๊ฐ ์บ์‹ฑ
  • staleTime 5์ดˆ๋กœ ์„ค์ •ํ•ด๋’€๊ธฐ ๋•Œ๋ฌธ์—, 5์ดˆ๋™์•ˆ fresh ์ƒํƒœ
    ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์•„๋ฌด๋ฆฌ ๊ณ„์† ์ฒดํฌํ•ด๋„ fetch ๋ฐœ์ƒX
  • 5์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด (์ฝ˜์†”์ฐธ๊ณ ) stale ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋จ
    ์ฒดํฌ๋ฅผ ํ•˜๋ฉด ๋‹ค์‹œ fetch ๋ฐœ์ƒํ•˜๊ณ  fresh ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋จ

๐Ÿ“ŒcacheTime

  • ๋ฐ์ดํ„ฐ๊ฐ€ inactive ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ , ์บ์‹œ์— ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„
    • inactive : query ์š”์ฒญ์ด ๋๋‚˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”(ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์€) ์ƒํƒœ
  • ๊ธฐ๋ณธ๊ฐ’ : 5๋ถ„
  • cacheTime์ด ๋๋‚˜๋ฉด ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋กœ ์ˆ˜์ง‘๋จ
  • cacheTime์ด ๋๋‚˜๊ธฐ ์ „์— query ๋‹ค์‹œ ์š”์ฒญ ๋˜๋ฉด, freshํ•œ ๋ฐ์ดํ„ฐ๋ฅผ fetchํ•˜๋Š” ๋™์•ˆ ๊ธฐ์กด ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ณด์—ฌ์คŒ
  • staleTime๊ณผ ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๊ฐ€ inactive๋œ ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์บ์‹œ ์‚ญ์ œ ๊ฒฐ์ •
  • ๋ฌด์กฐ๊ฑด ์บ์‹œ๋ฅผ ๊ธธ๊ฒŒํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฑ์—”๋“œ์—์„œ ๋นˆ๋ฒˆํžˆ ์—…๋ฐ์ดํŠธ ๋˜๋Š”์ง€, ์˜ค๋žซ๋™์•ˆ ์บ์‹œ๋ฅผ ํ•ด๋„ ๊ดœ์ฐฎ์€์ง€ ํŒ๋‹จํ•ด์„œ ์‹œ๊ฐ„ ์ ์ ˆํ•˜๊ฒŒ ์ •ํ•ด์•ผ ํ•จ

staleTime vs cacheTime

cacheTime์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์œ ์ง€๋ ์ง€ ์„ค์ •
staleTime์€ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ stale ์ƒํƒœ๋กœ ์œ ์ง€๋ ์ง€ ์„ค์ •
staleTime์ด cacheTime๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•จ
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ๋˜์–ด๋„ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒโ—


๐Ÿ“ŒReact Query ์‚ฌ์šฉํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๊ณผ์ •

  • key๊ฐ€ 'example' ์ธ example data๋ฅผ ์š”์ฒญํ•˜๋ฉด,
    ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†ตํ•ด ๋ฐ์ดํ„ฐ fetchํ•˜๊ณ  key๊ฐ’์œผ๋กœ ์บ์‹ฑํ•œ ๋’ค, ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ
  • example data๋Š” fresh ์ƒํƒœ์—์„œ staleTime(๊ธฐ๋ณธ๊ฐ’: 0) ์ดํ›„ stale๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ
  • ์œ„ ์ƒํƒœ์—์„œ cacheTime์ด ์ง€๋‚˜๊ธฐ ์ „์—,

(1) : ๊ฐ™์€ key๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ์š”์ฒญ ์˜ค๋ฉด
(2) : ํ•ด๋‹น key๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹ฑ๋ผ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ฐ”๋กœ ๋ณด์—ฌ์คŒ
(3) : ํ•˜์ง€๋งŒ, ์ƒํƒœ๊ฐ€ stale์ด๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์š”์ฒญํ•จ


(4) : ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†ตํ•ด ์บ์‹œ์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ์—…๋ฐ์ดํŠธ
(5) : ์ƒˆ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ์™€ ๋‹ฌ๋ผ์ง„ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ณด์—ฌ์คŒ

  • ์บ์‹œ๋Š” cacheTime๋งŒํผ ์œ ์ง€๋˜๋‹ค๊ฐ€ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋กœ ์ˆ˜์ง‘๋จ
profile
ํ™”์ดํŒ…~~^ใ…^/

0๊ฐœ์˜ ๋Œ“๊ธ€