React-Query๊ฐ๋ ์๊ธฐ๐บ
์ธํธ๋ก์ ๋ํด์ ๊ฐ๋จํ๊ฒ ๊ฐ๋ ๊ณผ ์ฌ์ฉ์ด์ ๋ง ํฌ์คํ ํ๋ ค๊ณ ํ๋๋ฐ, ์๊ฐ๋ณด๋ค ๋ด๊ฐ ๋ชจ๋ฅด๋๊ฒ ๋๋ฌด ๋ง์โฆ ์ด๋ด๋ ๋ด๊ฐ ๊ฐ๋ฐ์ด ๋ง๋ ์ถ์โฆ ํ์ ใ ใ ใ ใ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํจ!
์์ ์ ํ๋ฒ ์ฌ์ฉํด ๋ณด๋ ค๊ณ ํ๋๋ฐ, NEXT.JS์์๋ ์ฝ๋ ์คํ๋ฆฌํ ์ด ๋๊ณ , ์ฟผ๋ฆฌ๋ฅผ SSR์์ ๋ณด๋ด๊ณ ๋ค์ ๋ฟ๋ ค์ง๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ๋ฟ๋ ค์คฌ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด..?๋ผ๋ ํํ์ด ๋ง์ ์ง๋ ๋ชจ๋ฅด์ง๋ง.. ใ ใ ใ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ๋์๋ค.
ํ์ง๋ง ์ชผ๋ฉ ์ฅด๋ฆฌ๊ฐ ๋ชจ๋ฅด๊ณ ์์๋ ์ฌ์ค์ด ์์๋ค.. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ์บ์ฑ๋์ง ์๊ณ html์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ๋๋๋ง๋ค ๋ค์ ๋ง๋ค์ด์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์ ์์ฒญ๋ ๋ถ๋ด์ ์ค๋ค๋ ์ฌ์ค์โฆ
๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ ๊ฐ๋ ๋ ์์๋ณด๊ณ , ๊ฐ์๋ฅผ ๋ค์ด๊ฐ๊ธฐ ์ ์ฌ๋ฌ๊ฐ์ง ์์ ๋ ๋ง๋ค์ด๋ณด๋ คํจ!
React-query ๐บ
โผ React-query๋?
React-query
๋ ๋น๋๊ธฐ ๋ก์ง์ ๋ฆฌ์กํธ ์ค๋ฝ๊ฒ ๋ค๋ค ์๋ฒ์ ๊ฐ์ ํด๋ผ์ด์ธํธ์ ๊ฐ์ ธ์ค๊ฑฐ๋, ์ ๋ฐ์ดํธ, ์บ์ฑ์ ๋ ํจ์จ์ ์ด๊ณ ํธํ๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.
๐น React-query์ ์ฅ์
๊ทธ๋ ๋ค๋ฉด ์ฌ๋๋ค์ ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊นโฆ ๋ฌด์จ ์ฅ์ ์ด ์๊ธฐ์ ์ฌ์ฉํ๋ ๊ฒ์ธ๊ฐ..
1. ์บ์ฑ์ด ๊ฐ๋ฅํจ
๊ทธ๋ ๋ค. ์บ์ฑ์ด ๊ฐ๋ฅํ๋ค. ์บ์ฑ์ด๋ ์ปดํจํฐ์ ์ฑ๋ฅ์ ํฅ์์๊ธฐ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ฅผ ๋งํ๋ค.
์๋ฅผ ๋ค์ด ์ ์ ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ ์ฝ๋๊ฐ ์๋ค๋ฉด, ์บ์ฑ์ด ๋๋ค๊ณ ํ๋ค๋ฉด ์ ์ ์ ๋ฐ๋์ง ์๋ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ ์ฅํด ๋๊ณ , ๋น ๋ฅด๊ฒ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
์ด๋ ๊ฒ ๋ฐ์ดํฐ ์บ์ฑ์ด ๊ฐ๋ฅํ๋ค๋ฉด, ๋ถํ์ํ ์์ฒญ์ ์ค์ด๋ฉฐ ๋ธ๋ผ์ฐ์ ์ ๋ถ๋ด์ ๋ ํด ์ค ์ ์๊ณ , ๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ์์์ ๋นผ๋ด์ ๋ณด์ฌ์ฃผ๋ฏ๋ก ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ฒ ์ ๋ณด๋ฅผ ๋ณด์ฌ ์ค ์ ์๋ค.
2. updateํ๋ฉด ์๋์ผ๋ก get์์ฒญ ํ๋ค.
ํฌ์คํธ์์ ๊ธ์ ์์ฑํ๊ณ url์ ์ด๋ํ๊ฑฐ๋ , ์ฌ์์ฒญ์ ํ๊ฑฐ๋, refresh๋ฅผ ํ์ง ์๋ ์ด์ ๊ฐ์ ํ์ด์ง์์ ์ฌ์ฉ์๋ ์ ๋ฐ์ดํธ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ค.
react-query
๋ useMutation
hooks ๋ฅผ ํตํด update๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ getํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
์งฑ์ด๋ค..
3. ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ action์ ์ทจํ ์ ์๋ค.
useQuery
hooks ๋ฅผํตํด ์ฑ๊ณตํ์ ๊ฒฝ์ฐ, ์คํจํ์ ๊ฒฝ์ฐ ๊ทธ์ ๋ฐ๋ฅธ action์ ์ทจํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์คํจํ์ ๋ toast์ error ๋ฉ์ธ์ง๋ฅผ ๋ด๊ฑฐ๋, alret์ ๋์ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ ๋ฌ๋ค๋ ๊ฒ์ ์ธ์งํ๊ฒ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
4. ๋ฐ์ดํฐ๊ฐ ์ค๋๋์๋ค๊ณ ํ๋จํ๋ฉด ๋ค์ get์์ฒญ์ ํ๋ค.
QueryClient
์์ invalidateQueries
๋ฉ์๋๋ฅผ ํตํด ์ฟผ๋ฆฌ๋ฅผ ๋ฌดํจํ ์์ผ ์ง๋ฅ์ ์ผ๋ก ํ์ํ๊ณ , ์ ์ฌ์ ์ผ๋ก ํ์ํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ค์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ์ฌ์ฉํ๋ค.
5. useQuery๊ฐ ๊ฐ๊ณ ์๋ ๊ณ ์ ์ KEY ๊ฐ์ผ๋ก GlobalState ๋์ฒด ๊ฐ๋ฅ
useQuery
์ ๊ณ ์ ์ ํค๊ฐ์ ํตํด ๋ค๋ฅธ ์ปดํฌ๋ํธ์์๋ ํธ์ถ์ด ๊ฐ๋ฅํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ง์ ์ฆ์จ React-query
๋ ์บ์ฑ์ด ๋์ด ์ ์ฅ์์ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ, ์ด๊ฒ์ ๋ํด ๊ณ ์ ์ KEY๊ฐ์ผ๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ ํ ์ ์๋ค๋๊ฑด, GlobalState๋ฅผ ์ฌ์ฉํ๋ ์ด์ === React-query์ ์ด์ ์ด ๋๋ค.
๐น React-query ์ฌ์ฉ ๋ฐฉ๋ฒ
React-query
๋ฅผ ํตํด ๊ด๋ฆฌํ๋ ์ฟผ๋ฆฌ ๋ฐ์ดํฐ๋ ๋ผ์ดํ์ฌ์ดํด์ ๋ฐ๋ผ Fetching , Fresh, Stale, Inactive, Delete์ํ๋ฅผ ๊ฐ์ง๋ค.
- Fetching : ์์ฒญ์ค์ธ ์ฟผ๋ฆฌ
- Fresh : ๋ง๋ฃ๋์ง ์์ ์ฟผ๋ฆฌ. ๋ง์ดํธ, ์ ๋ฐ์ดํธ ๋์ด๋ ๋ฐ์ดํฐ ์ฌ์์ฒญ์ ํ์ง ์๋๋ค.
- Stale : ๋ง๋ฃ๋ ์ปค๋ฆฌ. ์ฌ์์ฒญํ๋ค.
- Inactive : ์ฌ์ฉํ์ง ์๋ ์ฟผ๋ฆฌ. ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์บ์์์ ์ ๊ฑฐํ๋ค.
- Delete : ์บ์์์ ์ ๊ฑฐ๋ ์ฟผ๋ฆฌ
๐น React-query ์ฌ์ฉํ๊ธฐ
๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ fetchํ๋ ์์๋ฅผ ๋ง๋ค์ด ๋ณด์ (๊ณตํ ์ค์ฌ์ผ๋ก) ๋ณธ์ธ์ ์์ด๋ฅผ ๊ต์ฅํ ๋ชปํ๊ธฐ ๋๋ฌธ์โฆ ๋ธ๋ก๊ทธ๋ค๋ ๋ด์ผ ํจ.. ์ฐ์ ๊ณตํ์ ๋์์๋ Default ์์ ๋ก ๊ฐ๋ ์ ์ก์๋ณด์!
โ Provider ์ค์ ํด์ฃผ๊ธฐ
Context, Recoil ์ฒ๋ผ ์ต์๋จ App.js
์ QUeryProvider๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ props
๋ก client
๋ฅผ ๋ฐ๋๋ฐ,
์ด ๊ฐ์ new QueryClient
๋ก ํ ๋นํ ๋ณ์๊ฐ ๋ค์ด๊ฐ๋ค.
Context
์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ์ ์ต์์ ์ปดํฌ๋ํธ์ Provider๋ก ๊ฐ์ผ๋ค. props๋ก ์๋ก์ด ์ฟผ๋ฆฌ๋ฅผ ํ ๋นํ ๋ณ์๋ฅผ ์ ๋ฌํด์ค๋ค.
โ ์์ Component์์ ํ์ธํ๊ณ Query ์ฌ์ฉํ๊ธฐ
์ด๋ ๊ฒ ๋ง์ ๋ฉ์๋๊ฐ ๋ค์ด์จ ๊ฒ์ ํ์ธํ ์ ์์. ์ด์ ๋ฐ์ดํฐ ํจ์นญํ ๊บผ์.
๋ค์ํฌ์คํ ์์..
์ถ์ฒ ๐๐ป