refactor jotai tan stack query - boostcampwm-2022/web33-Mildo GitHub Wiki
Jotai์ TanStack Query๋ฅผ ์ค์ ํด๋ณด๊ณ , ์ฑ๋ฅ ๊ฐ์ ํ์ธํด๋ณด๊ธฐ (#79)
์ฑ๋ฅ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ์ํ๋ฅผ ์บก์ณํ๊ณ (React Query๊ฐ ์ ์ฉ๋์ด ์๋ ์ํ), Jotai์ TanStack Query๋ฅผ ํตํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ฆฌํฉํ ๋ง ํด๋ณธ ๋ค, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ์จ์ ์ฑ๋ฅ ํฅ์๊ณผ ๋ ๊น๋ํ ์ฝ๋๊ฐ ๋ง๋ค์ด์ก๋ ์ง์ ๋ํด ํ๊ฐํด๋ณด๊ณ ๋ถ์ํ๋ค.
- Jotai๋ฅผ ์ด์ฉํ ์บ์ฑ ์ ์ฑ ๊ณผ React Query๋ ๊ฐ๊ฐ ์ด๋ค ํน์ง์ ๊ฐ์ง๊ณ ์์๊น? ์ผ๋จ์ ์ด์ ๋ํด์ ๋ฉด๋ฐํ๊ฒ ์๊ฐํด ๋ณผ ํ์๊ฐ ์์๋ค.
- ๋ถ์์ ํด๋ณธ ๊ฒฐ๊ณผ, ์ ์ด์ Jotai ๋ด๋ถ์์ TanStack Query๋ฅผ ๊ตฌํํ ์ ์์๋ค. TanStack Query๋ React Query์ ์ต์ ๋ฒ์ ์ ํต์นญํ๋ ๋ง๋ก ์ฐ์ธ๋ค. ๊ทธ๋ฆฌ๊ณ Jotai์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ TanStack Query Tool์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ์ด Tool์ ์ด์ฉํด์ React Query์ Jotai๋ฅผ ํตํฉํด์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฐ๋ ฅํ ์ฅ์ ์ด ์กด์ฌํ๋ค.
ํ์ฌ React Query๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉํ๊ณ ๋ ์์ง๋ง, ์์ง ์ ์ฉ์ด ๋์ง ์์ ๋ถ๋ถ์ด ์กด์ฌํ๋ฉฐ, ์ด ๋ถ๋ถ์ Jotai์ tanstack-query๋ฅผ ํตํด ์ ์ฉํด๋ณด๊ณ ์ ํ ๊ณํ์ด๋ค.
<์ ์ฉ ์ >
- ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ํ์ฌ ์ํ์ ๋ํด ์ธก์ ํด๋ณด๊ณ , ์ด๋ฅผ ์คํฌ๋ฆฐ์ท์ผ๋ก ๊ธฐ๋กํด๋ณธ๋ค.
- jotai์ TanStack Query์ ๋ํ ๋ด์ฉ์ ํ์ตํด๋ณธ๋ค.
<์ ์ฉ ๊ณผ์ >
- atomsWithQuery๋ฅผ ์ ์ฉํ์ฌ jotai ์ฝ๋ ๋ฆฌํฉํ ๋งํ๊ธฐ
<์ ์ฉ ํ>
์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ํ ๋ณด๊ณ ์ ์ธก์ ํ๊ธฐ
๋คํธ์ํฌ ์ํ ๋ณด๊ณ ์ (์ ์ฉ ์ - ์ ํ ์์, ์ด๊ธฐ ๋ก๋ฉ ์ํ)
- ์ฝ 2.28์ด๋ง์ ์๋ฃ๊ฐ ๋์์
- DOMContentLoaded ์๊ฐ: 146 ๋ฐ๋ฆฌ์ด
- ๋ก๋๋๋ ์๊ฐ: 257 ๋ฐ๋ฆฌ์ด
๋คํธ์ํฌ ์ํ ๋ณด๊ณ ์ (์ ์ฉ ์ - ๋น ๋ฅธ 3G, ์ด๊ธฐ ๋ก๋ฉ ์ํ)
- ์ฝ 3.36์ด๋ง์ ์๋ฃ๊ฐ ๋์์
- DOMContentLoaded ์๊ฐ: 1.22์ด
- ๋ก๋๋๋ ์๊ฐ: 257 ๋ฐ๋ฆฌ์ด
- ์ด๋ฆฌ์ ๋ฆฌ ์กฐ์ฌํด ๋ณธ ๊ฒฐ๊ณผ React Query์ useQuery๋ฅผ ํ์ฉํ โatomsWithQueryโ์ useMutation์ ํ์ฉํ โatomsWithMutationโ์ ํตํด ํ์ฌ ํ๋ก์ ํธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑ/์ ๋ฐ์ดํธ/์ญ์ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ์ฉํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ํ๋จ๋์๋ค.
- **์๋ฒ ๋ฐ์ดํฐ์ ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ๋ฅผ โ๋ถ๋ฆฌโ**ํด์ค ์ ์๋ ์ญํ ์ ํ ์ ์๋ค. ๋ง์ฝ์ React-Query๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋๋ค๋ฉด ์๋ฒ์์๋ ์ด๋ฏธ ํจ์น๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ํด๋ผ์ด์ธํธ์์๋ ํจ์น๋๊ธฐ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค ์ฐธ๊ณ ์๋ฃ
- React-Query๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์๋ฒ ๋ฐ์ดํฐ์ ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ๋ฅผ โ๋ถ๋ฆฌํ ์ ์๋คโ.
- โ์บ์ฑโ์ด๋ผ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
- get์ ํ ๋ฐ์ดํฐ์ update๋ฅผ ์งํํ๊ฒ ๋๋ฉด ์๋์ผ๋ก ๋ค์ get์ ์งํํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ์ ๋ฐ์ดํฐ๊ฐ ์ค๋๋์๋ค๊ณ ํ๋จ์ด ๋๋ค๋ฉด **get ( invalidateQueries )**๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ๋๋ค.
React-Query์ useMutation์ด๋ ๋ฌด์์ผ๊น? ์ด๋ฅผ Jotai์์๋ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์์๊น?
- useQuery๊ฐ GET์ ๋ด๋นํ๋ค๋ฉด, useMutation์ POST, PUT, DELETE๋ฅผ ๋ด๋นํ๋ค.
- ๊ทธ๋ฐ๋ฐ, jotai์์๋ ์ด๋ฅผ โ****atomsWithMutation'****์ ์ฌ์ฉํด์ ์ ์ฉํ ์ ์๋ค. ์ด๋ฏธ TanStack Query๋ atomsWithMutation ๋ด๋ถ์ ๋ค์ด์๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ์๊ด์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ์ฐธ๊ณ ๋ก, ํ๋ก์ ํธ์์๋ ์ฐ์ด์ง ์๊ฒ ์ง๋ง, **
[atomsWithInfiniteQuery](https://jotai.org/docs/integrations/query#)๋ฅผ ํตํด ๋ฌดํ ์คํฌ๋กค๋ง์ ํ ๋ ์ฌ์ฉํ๋ฉด ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์ ๊ฒ ๊ฐ๋ค.
- ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ์ด๋ค ๋ถ๋ถ์ ๊ฑท์ด๋ด์ atomsWithQuery๋ atomsWithMutation์ ์ ์ฉ์ํฌ ์ ์์๊น? ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๋ ๋ฌด์์ผ๊น?
- ํ์ฌ, atom ๋๋ ํฐ๋ฆฌ์๋ ์ฌ๋ฌ ์ข ๋ฅ์ Atom๋ค์ด ๋ค์ด์๋ค. ์ด๋ค ์ค์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ด๊ธฐํ๋ฅผ ์์ผ์ฃผ๋ Atom ๋ํ ์กด์ฌํ๋ค. atomsWithQuery๋ atomsWithMutation์ ์ด์ฉํ๊ฒ ๋๋ฉด โ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ํ๊ฐ ์ด๊ธฐํ๋ฅผ ํ ๋ฒ์ ํด์ค ์ ์๋คโ๋ ์ฅ์ ์ด ์กด์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ํตํด ์ด๋ฅผ ๊ตฌํํ๊ณ ์ ํ๋ค.
- Jotai์์ ์ ๊ณตํ๋ atomsWithQuery, atomsWithInfiniteQuery, atomsWithMutation์ React Query๋ฅผ ์ฌ์ฉํ ๋ ํ์ฅ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๋์ค์์ผ ์์๋ค. ์ด๋ ๋ค์ ๋งํด, React-Query๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์๋ ์๋ค.
- ๊ทธ๋ฌ๊ธฐ์ ํ์ฌ React Query๋ฅผ ์ ์ผํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ๊ณณ์์ ์คํ์ ํด๋ณด๊ธฐ ์ํด ์๋กญ๊ฒ branch๋ฅผ ํ๊ณ , atomsWithQuery๋ฅผ ์ ์ฉํ๊ณ ์ ํ์ผ๋, ์ปค์คํ ํ ์ผ๋ก ๋๋ฌ์ธ์ฌ ์์๊ณ , ์์กด์ฑ์ด ์ผ๊ธฐ์ค๊ธฐ ์ค์ผ์์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ๊ต์ฅํ ์ด๋ ค์ โ โ ๋ค์ด๋ ๋ ธ๋ ฅ์ ๋นํด์ ์๋์ด ์์ ๊ฑฐ ๊ฐ์ ์ผ๋จ ๋ณด๋ฅ ์ค



