๐ ์ํ(State)๋?
๊ฐ๋จํ ๋งํด, UI๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ React์์๋ ์ํ๊ฐ ๋ณํ๋ฉด ํ๋ฉด์ด ๋ค์ ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์, ์ํ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋๋๊ฐ ์ฑ๋ฅ๊ณผ ๊ฐ๋ ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์นจ.
๐ ์ํ์ ์ข ๋ฅ
1. ์ง์ญ ์ํ (Local State)
- ํน์ ์ปดํฌ๋ํธ ์์์๋ง ๊ด๋ฆฌ๋๋ ์ํ
- ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๊ณต์ ํ์ง ์์
- ์ : ์ ๋ ฅ์ฐฝ์ ๊ฐ, ์ฒดํฌ๋ฐ์ค ์ํ, ๋ชจ๋ฌ ์ด๋ฆผ ์ฌ๋ถ ๋ฑ
2. ์ปดํฌ๋ํธ ๊ฐ ์ํ (Shared State)
- ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ํ๋ ์ํ
- ๋ณดํต ์์ ์ปดํฌ๋ํธ์์ ํ์ ์ปดํฌ๋ํธ๋ก props ์ ๋ฌ
- ์ด ๊ณผ์ ์์
props drilling๋ฐ์
props drilling: ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ํ์ ์๋ ์ค๊ฐ ์ปดํฌ๋ํธ๋ค๊น์ง props๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ ์ํฉ
3. ์ ์ญ ์ํ (Global State)
- ํ๋ก์ ํธ ์ ์ฒด์ ์ ๊ทผ ๊ฐ๋ฅํ ์ํ
- ๋ถ๋ชจ์์ ์์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ (
props drilling๋ฐฉ์ ํ์ฉ) - ์ : ์ฌ์ฉ์ ์ ๋ณด, ํ ๋ง ์ค์ , ๋ค๊ตญ์ด ์ค์ , ๋ก๊ทธ์ธ ์ฌ๋ถ ๋ฑ
โ ๏ธ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์
- ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋๋ฉด ์ง์ ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ์ด ์ด๋ ค์
- ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด, ๊ฒฐ๊ตญ
props drilling์ด ์ฌํด์ ธ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง
๐ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๊ณ ํ์ํ ์ปดํฌ๋ํธ์์๋ง ๊ฐ์ ธ๋ค ์ธ ์ ์์.
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ํ์ง๋ง, Context API(๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋์ง๋ง, React ๊ธฐ๋ณธ ์ ๊ณต), Redux(npm trends 1์), Recoil(ํ๋ก์ ํธ ์ฌ์ฉ ๊ฒฝํ), Zustand(์์ผ๋ก ์ฌ์ฉ ์์ ) ์ด 4๊ฐ์ง ๋น๊ต

๐ Context API
React ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์ ์ ์ญ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ง ๋ฐฉ๋ฒ.
๋ค๋ง, ๋ณธ์ง์ ์ผ๋ก๋ ์ข
์์ฑ ์ฃผ์
์ ์ํ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์, Redux๋ Recoil ๊ฐ์ ์ ์ญ ์ํ ๊ด๋ฆฌ ํด์ด๋ผ๊ณ ํ๊ธฐ ๋ค์ ์ ๋งค
โญ๏ธ Context API๋ ์ด๋ฏธ ์กด์ฌํ๋ ์ํ๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค๊ณผ ์ฝ๊ฒ ๊ณต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ (์ ์ญ ์ํ ๊ณต์ )
Context API ๊ตฌ์ฑ
- Context
- ์ ์ญ ์ํ์ ์ ์ฅ์ ๊ฐ์ ๊ฐ๋
createContext()๋ก ์์ฑ- ๋ด๋ถ์
Provider์Consumer์ ์ Consumer๋ Context ํตํด ์ํ์ ์ ๊ทผ ๊ฐ๋ฅ
- Provider
- Context์ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํ๋ ์ญํ
value์์ฑ์ ์ ๋ฌํ ๊ฐ์ด ์ ์ญ ์ํ๋ก ๊ณต์ ๋จ- ๋ณดํต ๋ฃจํธ ์ปดํฌ๋ํธ์์ ์ ์
- Consumer
- Provider๊ฐ ์ ๊ณตํ ์ ์ญ ์ํ๋ฅผ ๋ฐ์ ์ฌ์ฉํ๋ ์ญํ
- ํด๋์คํ ์ปดํฌ๋ํธ๊ฐ Hooks๋ฅผ ์ฐ์ง ์๋ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ
- ํจ์ํ ์ปดํฌ๋ํธ์์๋
useContext๋ก ๋์ฒด ๊ฐ๋ฅ - Provider์ value๋ฅผ ๋ฐ์ ์ธ ์ ์๋ ์ปดํฌ๋ํธ
- useContext (Hook)
- ์ต๊ทผ์๋
Consumer๋์useContextํ ์ ์จ์ ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ
- ์ต๊ทผ์๋
Context API ์์
-
src / store / context / useCounterContext.tsx

-
src / pages / context / ContextPage.tsx

-
src / pages / context / components / CounterDisplay.tsx

-
src / pages / context / components / CounterButtons.tsx

โ ์ฅ์
- React ๊ธฐ๋ณธ ์ ๊ณต์ผ๋ก ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ์์ด ์ฌ์ฉ ๊ฐ๋ฅ.
- ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋น๊ต์ ๋จ์ํ์ฌ ๋ฌ๋ ์ปค๋ธ๊ฐ ๋ฎ์.
โ ๋จ์
- Provider์์ value๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น Context๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง.
- ์ํ๊ฐ ๋ง์์ง์๋ก Context ํ์ผ์ด ์ปค์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง.
- ์ค์ฒฉ Provider ๊ฐ๋ ์ฑ ์ ํ.
๐ Redux
React์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํน์ง์ ๊ธฐ์กด state๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ , ์๋ก์ด state๋ฅผ ์์ฑํ์ฌ ์
๋ฐ์ดํธ
์ํ ๋ณ๊ฒฝ์ ๋ฐ๋์ Action์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ์ด๋ฃจ์ด์ง๊ณ , ์ด Action์ ์์ ํจ์์ธ Reducer๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌ๋๋๋ฐ,
์ด ๊ณผ์ ๋๋ถ์ ์ด๋ค ์ํ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ์์ธก ๊ฐ๋ฅ
Redux ์ํ ๋ณ๊ฒฝ ๊ฒฝ๋ก
-
๊ธฐ์กด ๋ฐฉ์ (props drilling)
A โ B โ C โ D โ E โ F โ G -
Redux ๋ฐฉ์
A โ Store โ G
Store๋ฅผ ํตํด ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, ๋ถํ์ํ props ์ ๋ฌ์ด ์ฌ๋ผ์ง๊ณ ์ํ๋ฅผ ์ง์ ์ฝ๊ณ ๋ณ๊ฒฝํ ์ ์์ด ํจ์ฌ ํจ์จ์
Redux ๊ตฌ์ฑ
- Store
- ์ํ๋ฅผ ๋ณด๊ดํ๋ ์ค์ ๊ณต๊ฐ
- ์ปดํฌ๋ํธ์๋ ๋ณ๊ฐ๋ก ์กด์ฌ
- ํ์ํ ์ํ Store ์์ ๋ด๊ณ , ์ปดํฌ๋ํธ๋ Store์์ ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
- Action
- ์ํ ๋ณ๊ฒฝ ์์ฒญ ๊ฐ์ฒด
- ์ผ๋ฐ์ ์ผ๋ก
{ type: "INCREASE", payload: 1 }ํ์ dispatch()ํจ์๋ฅผ ํตํด Store์ ์ ๋ฌ
- Reducer
- ์ํ ๋ณํ๋ฅผ ๋ง๋๋ ์์ ํจ์
(state, action) => newStateํํ- ๊ธฐ์กด state๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก์ด state ๊ฐ์ฒด๋ฅผ ๋ฐํ
- action์
type์ ๋ฐ๋ผ state ์ ๋ฐ์ดํธ
Redux ์์
โญ๏ธ ๋ฃจํธ ์ปดํฌ๋ํธ์ Provider๋ก store๋ฅผ ์ ์ญ์ผ๋ก ๊ณต๊ธํด์ผ ์ปดํฌ๋ํธ๋ค์ด Redux๋ฅผ ์ฌ์ฉ
-
src / Main.tsx

-
src / store / redux / counterSlice.ts

-
src / store / redux / store.ts

-
src / store / redux / ReduxPage.tsx

-
src / store / redux / CounterDisplay.tsx

-
src / store / redux / CounterButtons.tsx

โ ์ฅ์
- ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค 1์.
- ๋ชจ๋ ์ํ ์ ๋ฐ์ดํธ๋ฅผ action์ผ๋ก ์ ์ํ๊ณ action ์ ๋ณด์ ๊ธฐ๋ฐํ์ฌ reducer ์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ฝ๊ฒ ์์ธก ๊ฐ๋ฅ.
- Redux DevTools ๋ฅผ ํตํด ์ํ ๊ด๋ฆฌ์ ๋๋ฒ๊น ์ด ํธ๋ฆฌ
โ ๋จ์
- Hook ๊ธฐ๋ฐ์ด ์๋.
- ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ๋ฌ๋์ปค๋ธ๊ฐ ๋์.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ๋ง์.
- ๋น๋๊ธฐ ์์ฒญ์ ์ํ Redux-thunk, Redux-Saga ๋ฑ์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์.
๐ Recoil
Facebook์์ ๊ฐ๋ฐํ React ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉ๋ฐฉ์์ useState ์ ๋งค์ฐ ๋น์ท.
ํน์ง์ ์ํ๋ฅผ atom ๋จ์๋ก ๊ด๋ฆฌํ์ฌ ํ์ํ ์ปดํฌ๋ํธ๋ง ํด๋น ์ํ๋ฅผ ๊ตฌ๋
ํ๋๋ก ๋ง๋ค ์ ์์ด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ต์ํ
ํ์ ์ํ๋ฅผ ๊ณ์ฐํ๋ selector ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฉ๋ชจ์ด์ ์ด์
์ ์ง์ํ์ฌ ์
๋ ฅ์ด ๊ฐ์ผ๋ฉด ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ผ ์ ์์
๋ํ ๋ณ๋์ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๋น๋๊ธฐ ์ํ ๊ด๋ฆฌ ์ง์.
Recoil ๊ตฌ์ฑ
Atom, Hooks, Selector
- Atom
- Recoil์์ ๊ด๋ฆฌํ๋ ํ๋์ ์ํ ๋จ์
- ๊ณ ์ ํ key์ ๊ธฐ๋ณธ๊ฐ์ ์ค์
- ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น atom์ ๊ตฌ๋ ํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง
- ๊ฐ์ด ๋ณํ์ง ์์ผ๋ฉด ๊ตฌ๋ ์ค์ธ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋์ง ์์ useRecoilState (Hook)
- useRecoilState (Hook)
useState์ ๋์ผํ ๋ฐฉ์์ผ๋ก atom ๊ฐ์ ์ฝ๊ณ ์์ ํ ์ ์๋ ํ
- useRecoilValue (Hook)
- atom์ ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๊ฐ์ ธ์ค๋ ํ
- useSetRecoilState (Hook)
- atom ๊ฐ์ ์์ ์ ์ฉ์ผ๋ก ์ค์ ํ๋ ํ
- Selector
- atom์์ ํ์๋ ๊ฐ์ ๊ณ์ฐํ๊ฑฐ๋ ๊ฐ๊ณตํ๋ ํจ์
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๋์ผํ ์ ๋ ฅ ๊ฐ์ด๋ฉด ์ด์ ๊ณ์ฐ ๊ฐ์ ์ฌ์ฌ์ฉ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ
Recoil ์์
โญ๏ธ ๋ฃจํธ ์ปดํฌ๋ํธ์ <RecoilRoot>๋ก ๊ฐ์ธ ์ด๊ธฐ ์ธํ
-
src / Main.tsx

-
src / store / recoil / counterRecoil.ts

-
src / store / recoil / RecoilPage.tsx

-
src / pages / recoil / components / CounterDisplay.tsx

-
src / pages / recoil / components / CounterButtons.tsx

โ ์ฅ์
- useState ํ ๊ณผ ๋น์ทํ๊ฒ ๋์ํ์ฌ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ ๊ตฌ์กฐ
- Selector๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
โ ๋จ์
- redux ์ฒ๋ผ ๋ฐ๋ก ๋๋ฒ๊น ํด์ด ์์ด ์๋์ ์ผ๋ก ๋ถํธ
- ์ ์ญ ์ํ์ ์ด๋์๋ ์ง์ ์ ๊ทผํด ์์ ํ ์ ์์ด, ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ์ธ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋์ง ์ถ์ ํ๊ธฐ ์ด๋ ค์.
- ์์กด์ฑ์ด ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ์ฎ์ด๋ฉด์ ์ ์ ์์ธก ๋ถ๊ฐ
๐ Zustand
Redux์ ๊ฐ์ Flux ํจํด(Action โ Dispatcher โ Store โ View)์ ์ฌ์ฉํ์ง๋ง, ํจ์ฌ ๊ฐ์ํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
์๊ณ ๋น ๋ฅด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ๊ณ React Hooks ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง.
ํน์ง์ ํด๋ก์ ๋ฅผ ํ์ฉํ์ฌ ์คํ ์ด ๋ด๋ถ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ข ์๋์ง ์๊ณ , ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ.
Zustand ์ค์น
yarn add zustand
Zustand ์์
- ๊ธฐ๋ณธ ์ฌ์ฉ
- create ํจ์๋ก ์คํ ์ด ์์ฑ
- create ํจ์์ ์ฝ๋ฐฑ์ set, get ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์กฐํ ํ ์ ์์.
- create ํจ์์ ์ฝ๋ฐฑ์ด ๋ฐํํ๋ ๊ฐ์ฒด์์์ ์์ฑ์ ์ํ(State)์ด๊ณ , ๋ฉ์๋๋ ์ก์ (Action) ์ด๋ผ๊ณ ํจ.
- create ํจ์ ํธ์ถ์์ ๋ฐํํ๋ ์คํ ์ด ํ
(Hook)์,
useCounterStore ๊ฐ์ดuse ์ ๋์ฌ + ์ด๋ฆ + Store ์ ๋ฏธ์ฌ๋ก ๋ช ๋ช ํด์ ๊ฐ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ
1 | |
- src / store / zustand / useCounterStore.ts
- set, get ๋งค๊ฐ๋ณ์(ํจ์)๋ ์ก์ ์์ ์ฌ์ฉํ ์ ์์.
- get ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ํ์ ์ก์ ์ ๊ฐ์ง ์คํ ์ด ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์์.
- set ํจ์๋ฅผ ํธ์ถํ๋ฉด, ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์.
- set ํจ์๋ฅผ ํธ์ถํ ๋ ์ฝ๋ฐฑ์ ์ฌ์ฉํ๋ฉด, get ํจ์๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ฐ๋ก ์คํ ์ด ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์์. ๋ณ๊ฒฝํ ์ํ๋ฅผ ์์ฑ์ผ๋ก ํฌํจํ ๊ฐ์ฒด๋ฅผ ์ฝ๋ฐฑ์์ ๋ฐํ

-
src / pages / zustand / ZustandPage.tsx

- src / pages / zustand / components / CounterDisplay.tsx
- ์ปดํฌ๋ํธ์์ ์คํ ์ด ํ (use์ด๋ฆStore)์ ๊ฐ์ ธ์ ํธ์ถํ ๋ ์ ํ์ ํจ์๋ฅผ ์ ๋ฌํด ์ํ๋ ์ํ๋ ์ก์ ์ ์ป์ ์ ์์.
- ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง
- ๊ฐ์ ์คํ ์ด์ ๋ค๋ฅธ ์ํ๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ๋ถํ์ํ๊ฒ ๋ฆฌ๋ ๋๋ง ๋์ง ์๋๋ก, ํ ๋ฒ์ ํ ํธ์ถ๋ก ํ๋์ ์ํ๋ง ๊ฐ์ ธ์์ผํจ.

-
src / pages / zustand / components / CounterButtons.tsx

- ์ฃผ์ ์ฌํญ
- ์ ํ์ ํจ์ ์์ด ์คํ ์ด ํ ์ ํธ์ถํ๋ฉด ๊ฐ๋ณ ์ํ๊ฐ ์๋ ์คํ ์ด ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์์.
- ์ฌ์ฉํ์ง ์์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ํด๋น ์คํ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ ์ฃผ์

โ ์ฅ์
- redux์ Redux DevTools ๋ก ๋๋ฒ๊น ๊ฐ๋ฅ.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ๊ฐ์.
- Provider๋ก ๊ฐ์ธ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ๊ฐ ๋จ์.
- React Hook์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ Hook ํ์ ์์.
โ ๋จ์
- Redux๋ณด๋ค ๋ณด์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฏธ๋ค์จ์ด๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ณด์กฐํ ์ ์๋ ๋ค๋ฅธ ์๋จ์ด ํ์ (React Query)
โญ๏ธ ์ฌ์ฉ์ ์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์ฃผ์์ฌํญ
์ฌ์ฉ์ ์ ๊ฐ ์ฆ๊ฐํ๋ค๊ณ ํด์ zustand ์์ฒด์ ์ฑ๋ฅ์ ์ธ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ์๋.
ํ์ง๋ง zustand๋ฅผ ๋จ๋
์ ์ผ๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉ์ ์๊ฐ ๋ง์์ง์๋ก ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ก๋
- ์๋ฒ ๋ถํ์์ ์ฐ๋ ๋ฌธ์
- zustand ๋ ์๋ฒ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์ ์๊ฐ ๋๋ฉด API ํธ์ถ ํ์๊ฐ ๋์ด๋จ.
- ๊ฐ์ ๋ฐ์ดํฐ์ ๋ํด ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ ๋ถํ๊ฐ ์ปค์ง๊ณ , ์บ์ฑ/๋๊ธฐํ ๋ก์ง์ ๋ฐ๋ก ์์ฑํ์ง ์์ผ๋ฉด ์ค๋ณต ์์ฒญ ๋ฌธ์ ๋ฐ์.
โ ํธ๋ํฝ ๊ด๋ จ ๋ฌธ์ ๋ React Query๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ํด๊ฒฐ์ ๊ธฐ๋ํด ๋ณผ ์ ์์.
์บ์ฑ, ์ค๋ณต ์์ฒญ ์ ๊ฑฐ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฆฌํจ์นญ, ์๋ ๋ฆฌํธ๋ผ์ด ๊ฐ์ ๊ธฐ๋ฅ์ด ์์ด ์๋ฒ ์ํ ๊ด๋ฆฌ ๋ถ๋ด์ด ์ค์ด๋ฌ
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ฆ๊ฐ
- ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ zustand store ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์ํ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ์ปค์ง ์ ์์.
- ๋น๋ฒํ ์ํ ๋ณ๊ฒฝ
- ์ํ ๋ณ๊ฒฝ์ด ์์ฃผ ์ผ์ด๋๋ฉด ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๋ถํ์ํ๊ฒ ๋ฆฌ๋ ๋๋ง ๋ ์ ์์ (ํด๋ผ์ด์ธํธ ์ฑ๋ฅ ์ ํ ์ด๋)
โ ์ฌ์ฉ์ ์์๋ ๋ฌด๊ดํ๊ฒ ์ฝ๋๊ฐ ์ปค์ง์๋ก ๋ณต์ก์ฑ์ด ์ปค์ง๋๊ฒ ํต์ฌ ๋ฆฌ์คํฌ store ๊ตฌ์กฐํ ๋๋ ์ํํ ํ์ ์ ์ํด ํ์ค ๊ตฌ์กฐ๋ ํจํด ์๋ฆฝ ํ์.
Redux๋ ๊ตฌ์กฐ๊ฐ ํํํ์ง๋ง ๋ณต์กํ ๋ฐ๋ฉด,
Recoil์ ์ง๊ด์ ์ด๊ณ ๋ฌ๋ ์ปค๋ธ๊ฐ ๋ฎ์ ์ฌ์ฉ ๊ฒฝํ์ด ์ข์์. ๊ทธ๋ฌ๋ Recoil์ ์ด๋ ์ปดํฌ๋ํธ์์๋ ์ ์ญ ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์์ด ์ํ ๋ณ๊ฒฝ ์ถ์ ์ด ์ด๋ ต๊ณ , atom์ด ๋ง์์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ธ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค๊ณ ์๊ฐ.
๋ฐ๋ผ์, Recoil์ ์ฅ์ ๊ณผ Redux์ ์์ธก ๊ฐ๋ฅ์ฑ๊ณผ ๊ตฌ์กฐ์ ์์ ์ฑ์ ๊ฒฐํฉํ Zustand๋ฅผ ์ฌ์ฉํด๋ณด๋ ๊ฒ์ด ํจ์จ์ ์ผ ๊ฒ ๊ฐ์