React-Query ์ฅ์ ๐
๋ฆฌ์กํธ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ๊บผ๋ด๋ณธ๋ค,โฆ ์๋๋ฉด ์ข์๊ฒ ๊ฐ์๋ฐ ์ ์ข์์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ์ด๊ฑธ ์ซ ์๊ณ ์ถ์ด์ ๋ค์ ๊บผ๋๋ค. ํ๋ฒ ์ ํ๋ณด์
๐บ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ ๊ฝ์ด ์์ฃผ ๋ง์์๋ ๋คโฆ ใ
ใ
์์ ์๋ ๊ณตํ์ ๊ฝ ๋ก๊ทธ๊ฐ ๋ฐํ ๊น๋ํ๊ณ ์์ ์ฌ์ดํธ์๋๋ฐ, ์ง๊ธ์ ๋ฒ์ ์ด ๋ฐ๋๋ฉด์ tanstack
์ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค๊ณผ ํฉ์ณ์ก๋น.
์๋ฌดํผ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ Fetching, ๋๊ธฐํ, ์บ์ฑ, ์๋ฒ ์ชฝ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ ๋ฑ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ React ๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. state(์ํ)๋ฅผ ๊ด๋ฆฌํ๋ Redux
, Zustand
, Recoil
๋ฑ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ , ๋ฆฌ์กํธ์ฟผ๋ฆฌ๊ฐ ํ๋ก ํธ ๊ฐ๋ฐ์๋ค์๊ฒ ํฐ ์ธ๊ธฐ๋ฅผ ๋ฐ๋ ์ด์ ๋, **์๋ฒ ์ํ๋ฅผ ์ฐธ์กฐํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค. **
๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ์๋ฆฌ์ ์ฅ์ ์ ๋ํด์ ์๋ ค๋ฉด, ์ฐ์ Server State
์ Client State
์ ์ฐจ์ด์ ๋ํด์ ์์์ผ ํ ๊ฒ ๊ฐ๋ค.
โ Client State VS Server State
โพ Server State
์๋ฒ ์ํ๋ ๋ง ๊ทธ๋๋ก ์๋ฒ์์ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ์ด๋ค.
- ์ธ์ ๊ฐ์ ์ง์๋๋ ๋ฐ์ดํฐ
- ํด๋ผ์ด์ธํธ๋ง ์์ ํ๋๊ฒ์ด ์๋ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๋ ์กด์ฌํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์ํด ์์ ๋ ์ ์์.
- ๋ค๋ฅธ ์ฌ์ฉ์์ ์ํด ๋ณ๊ฒฝ๋ ์ ์๋ค.
์ฆ, ์๋ฒ์์ ๊ฐ์ ธ์ค๋ ์ง์์ ์ธ ๋ฐ์ดํฐ์ด๋ฉฐ, ๋น๋๊ธฐ ์์ฒญ์ ์ํด ํจ์น์ ์ ๋ฐ์ดํธ, delete๊ฐ ๊ฐ๋ฅํ๋ค.
โพ Client State
ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋ ๋๊ธฐ์ ์ด๋ฉฐ, ๋ ๋๋ง์ด ์ผ์ด๋๋ ํญ์ ์ต์ ์ ์ํ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฒํผ์ ์ด๊ณ ๋ซ์ ๋ ์ฌ์ฉํ๋ useState
๋ Zustand, Recoil,Redux
๋ฑ์ด ํด๋ผ์ด์ธํธ์ ์ ์ญ์ ์ธ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.
โ React-query๊ฐ ๋ง๋ค์ด์ง ๊ณ๊ธฐ
Client State์ Server State๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์๋ฒ์์ ๋ฐ์์ค๋ ์๋ฒ State๋ ํญ์ ์ต์ ์ํ๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
์ง๊ธ ํ์ฌ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ดํฐ ํจ์นญํ๋ ๋ฐฉ์์ ๋ณด๋ฉด, ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ useState
๋ ๋ค๋ฅธ ์ ์ญ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฅํด ๋์ ๋ค์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด, ์๋ฒ์ ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด์, ๊ฐ์ ๋ฆฌํ๋ ์ฌ๋ฅผ ํ๊ฑฐ๋, state๋ฅผ ๋ณํ์์ผ ์
๋ฐ์ดํธ๋ฅผ ํ๋ค.
๋คํธ์ํฌ ํต์ ์ ์ต์ํ์ผ๋ก ์ค์ด๋๊ฒ ์ข์๋ฐ, ๋ณต์์ ์ปดํฌ๋ํธ์์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด fetching์ ์ฌ๋ฌ๋ฒ ์ํํ๋ฉฐ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ํ store ๋ด๋ถ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ state๊ฐ ๊ณต์กดํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ์์ ์ด๋ฏธ ํจ์น๋ ๋ฐ์ดํฐ๊ฐ ํด๋ผ์ด์ธํธ์์๋ ํจ์น๋๊ธฐ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ ์๊ฒ ์ฌ์ฉ๋ ์ ๋ ์๋ค. ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํด ๋คํธ์ํฌ์ ๋ถํ์ํ ์์ฒญ์ ์ค์ด๊ณ , ์๋ฒ์ ํด๋ผ์ด์ธํธ state๋ฅผ ๋ถ๋ฆฌํ๋ฉฐ, ๋ณด๋ค ํจ์จ์ ์ธ ๋น๋๊ธฐ ์์ฒญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด (?) ๋ง๋ค์ด ์ก๋ค.
๐ React-query ์ฅ์
๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ก ์ฌ๋ฌ๊ฐ์ง ํ ์คํธ๋ฅผ ํด๋ณด๋๊น ์์ฃผ์ข์ ์ฅ์ ๋ค์ด ๋ง๋ค.
1๏ธโฃ Loading, Error States
๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ useQuery
์ ๊ธฐ๋ณธ ๋ฆฌํด ๊ฐ์ผ๋ก isLoading, isError, isFetching, error
๋ฑ ๋ก๋ฉ๊ณผ ์ ๋ฌ์ ๊ด๋ จ๋ ์ํ๊ฐ์ ๋ฆฌํดํ๋ค.
๊ธฐ์กด ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ์ ๋ state๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ฐ ๋ถํ์ํ state์ฌ์ฉ์ ์ค์ฌ์ค๋ค.
2๏ธโฃ Pagination & Infinite scroll
๊ณ ์ ํ ํค๊ฐ์ ํตํ์ฌ, ํ์ด์ง ๋ค์ด์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ๋ฌดํ์คํฌ๋กค๋ง๊ณผ ๊ด๋ จ๋ ๋ค์ํ hooks์ ๋ฉ์๋๋ค์ ์ ๊ณตํ์ฌ, ์ต์ ์ํ์ ์บ์ฑ๋ ๋ฐ์ดํฐ๋ค์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
3๏ธโฃ Prefetching
ํ์ด์ง๋ค์ด์ ์ ๋ค์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ง ๊ฒฝ์ฐ ๋ฑ ๋ฏธ๋ฆฌ ํ๋ฆฌํจ์นญ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ, ์ด ๋ ํ๋ฆฌํจ์นญ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋งค์๋๋ค์ด ์์ด ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
์ด๋ ๊ฒ queryClient.prefetchQuery
๋ฅผ ํตํ์ฌ, ๋ฐ์ดํฐ๋ฅผ ํ๋ฆฌํจ์นญ ํ ์ ์๋ค. ์ค์ ๋ก 1๋ฒ์งธ ํ์ด์ง๋ค์ด์
์์, 2๋ฒ์งธ ํ์ด์ง๋ค์ด์
์ด ๋ฏธ๋ฆฌ ๊ฐ์ ธ์์ ธ,
DevTools์ inactive ๋์ด ์๋ ์ํ๋ฅผ ๋ณผ ์ ์๋ค. ์ต์
์๋ useQuery๊ฐ ๊ฐ๊ณ ์๋ ์ต์
๋ค์ ์ฌ์ฉํ ์ ์๋ค.
4๏ธโฃ Mutations
useQuery์๋ ๋ค๋ฅด๊ฒ ์๋ฒ ๋ฐ์ดํฐ์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ผ์ผํค๋ ๊ฒฝ์ฐ (create, update, delete)์ ์ฌ์ฉ๋๋ค. useMutation ์ผ๋ก mutation์ ์ ์ํ๊ณ , mutate ํจ์๋ก ํธ์ถํ๋ค. ๋ฐํ๋๋ ๊ฐ์ useQuery์ ๋์ผํ๋ค.
์ด ์ด์ธ์๋ ์์ฒญ์ ๋ณต์ฌํ ์ ์๊ฑฐ๋, Mutationํ ๋๋ useQuery๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ฌ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ต์ ์ ํตํด ์ฝ๊ฒ ํ ์ ์๋ค.