Contents

useQuery์— ๋Œ€ํ•˜์—ฌ

   Jun 30, 2023     1 min read

useQuery์— ๋Œ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ, useQuery๋กœ ๊ฐ€์ ธ์˜ค๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์–ด๋–ค ์‹œ์ ์—์„œ useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”?

useQuery์— ๊ฐœ๋…

useQuery๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” React Query ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ›…์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  1. ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ: useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์š”์ฒญ, ์บ์‹ฑ, ์žฌ์š”์ฒญ ๋ฐ ์—…๋ฐ์ดํŠธ ๋“ฑ์˜ ์ž‘์—…์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React Query๋Š” ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์บ์‹ฑ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ž๋™ ๋ฆฌ๋ Œ๋”๋ง: useQuery๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ง์ ‘ ๋ฆฌ๋ Œ๋”๋ง ๋กœ์ง์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด React Query๊ฐ€ ๊ด€๋ฆฌํ•ด์ฃผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์บ์‹ฑ ๋ฐ ์žฌ์‚ฌ์šฉ: useQuery๋Š” ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ์บ์‹ฑํ•˜์—ฌ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์„œ๋ฒ„์— ์žฌ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๊ณ  ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์—๋Ÿฌ ๋ฐ ๋กœ๋”ฉ ์ฒ˜๋ฆฌ: useQuery๋Š” ๋ฐ์ดํ„ฐ ์š”์ฒญ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋‚˜ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋™์•ˆ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ณ  UX๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ๊ฐ„ํŽธํ•œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ: useQuery๋Š” ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ž๋™์œผ๋กœ ์บ์‹œ๊ฐ€ ๊ฐฑ์‹ ๋˜๊ณ , ์—ฐ๊ด€๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋”ฐ๋ผ์„œ useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์š”์ฒญ, ์บ์‹ฑ, ์—…๋ฐ์ดํŠธ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์„ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒจ์–ธ

  • useQuery๋Š” ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์š”์ฒญ์— ๋Œ€ํ•œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์บ์‹œ ์ œ์–ด, ์š”์ฒญ ๋””ํŽœ๋˜์‹œ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ์žฌ์š”์ฒญ ๊ฐ„๊ฒฉ ์„ค์ •, ํŽ˜์ด์ง• ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
  • React Query๋Š” ์„œ๋ฒ„์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ถ”์ƒํ™”ํ•˜๊ณ  API ์š”์ฒญ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด Axios ๋“ฑ์˜ HTTP ํด๋ผ์ด์–ธํŠธ์™€๋„ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ, useQuery๋Š” React Query์˜ ์ผ๋ถ€๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ React Query์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, useMutation์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ˆ˜์ • ๋˜๋Š” ์ƒ์„ฑ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, useInfiniteQuery๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง•๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.