๐ง 01. Zustand ๋ฉํ ๋ชจ๋ธ: ๋ฆฌ๋ ๋๋ง ํญํ์์ ํ์ถํ๊ธฐ
๐ ๊ฐ์
Redux์ Context API์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๋ Zustand์ ํต์ฌ ๋์ ์๋ฆฌ์ ๋ฉํ ๋ชจ๋ธ
๐ฏ ์ด ์น์ ์ ์ฝ๊ณ ๋๋ฉด:
- Context API์ ๊ตฌ์กฐ์ ํ๊ณ์ ๋ฆฌ๋ ๋๋ง ํญ๋ฐ์ ์์ธ์ ์ดํดํ ์ ์๋ค.
- Zustand์ ํต์ฌ์ธ '๋ ๋ฆฝ์ ์ธ ์คํ ์ด'์ '์ ํ์ ๊ตฌ๋ (Select)' ๋ฉํ ๋ชจ๋ธ์ ์ฅ์ฐฉํ ์ ์๋ค.
๐ ๋ชฉ์ฐจ
- ๐ค ์ ์์์ผ ํ๋๊ฐ
- ๐๏ธ 1. Context API์ ํ๊ณ์ Zustand์ ์ฒ ํ
- ๐ง 2. ๋ฆฌ์กํธ ๋ฐ๊นฅ์ ๋ ๋ฆฝ์ ์ธ ์คํ ์ด
- ๐ฏ 3. Action๊ณผ State์ ๊ณต์กด
- ๐๏ธโโ๏ธ ์์ฒ ์ ํ ์คํธ ํ์ (Q&A)
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 10๋ถ / ํต์ฌ ํํธ: 5๋ถ
๐บ๏ธ ์ด ๋ฌธ์์ ํ๋ฆ
Context API์ ํ๊ณ์ ํ์ธ โ Zustand์ ์ ๋ฐ ํ๊ฒฉ ๋ชจ๋ธ ์ดํด โ ์คํ ์ด์ ๋
๋ฆฝ์ฑ ํ์
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'
- ๐ฃ ์์ฒ ( ์ ์
): "์ ํฌ ์ปค๋ฎค๋ํฐ ์ฑ ํค๋์ ์ ์ ํ๋กํ ์์ด์ฝ ๋์ฐ๋ ค๊ณ
UserContext๋ฅผ ๋ง๋ค์๊ฑฐ๋ ์? ๊ทผ๋ฐ ๋ก๊ทธ์ธ ์ํ ๊ด๋ฆฌํ๋ ค๊ณ ๊ฐ์ผ ๊ฑด๋ฐ, ํค๋๋ฟ๋ง ์๋๋ผ ํ์์ ๋ฉ์ธ ํผ๋๊น์ง ๊ณ์ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์. ์ปจํ ์คํธ๋ฅผ ๋๋ฉ์ธ๋ณ๋ก ๋ค ์ชผ๊ฐ์ผ ํ ๊น์? Redux๋ ์ธํ ์ด ๋๋ฌด ๋ณต์กํด์ ๋ฌด์์์..." - ๐ฆ ์ํธ ( ๋ฆฌ๋ ): "์์ฒ ๋, Context API๋ก ์ ์ญ ์ํ๋ฅผ ํต์ ํ๋ ค๋ ์๋ ์์ฒด๋ ์ข์ ์ถ๋ฐ์ด์์. ํ์ง๋ง Context๋ ๊ฐ ํ๋๊ฐ ๋ฐ๋๋ฉด ํ์ ํธ๋ฆฌ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ ๋๋ง์ํค๋ ๊ตฌ์กฐ์ ํ๊ณ๊ฐ ์์ฃ . ๋ฌด์กฐ๊ฑด ํฐ ๋ง์น(Redux)๋ฅผ ๊บผ๋ผ ํ์๋ ์์ด์. ์์ฃผ ๊ฐ๋ณ์ง๋ง ๊ฐ๋ ฅํ ์ ๊ฒฉ์ด, Zustand๋ฅผ ์ฅ์ด ๋๋ฆด๊ฒ์."
๐ค ์ ์์์ผ ํ๋๊ฐ
React์ ๊ธฐ๋ณธ ์คํ ๋ฆฌ์ง์ธ useState์ Context API๋ ์ง์ญ์ ์ธ ์ํ ๊ด๋ฆฌ๋ '์์ฃผ ๋ณํ์ง ์๋ ๊ฐ(์: ํ
๋ง)'์ ๋ด๋ ค์ฃผ๊ธฐ์ ํ๋ฅญํฉ๋๋ค. ํ์ง๋ง ์ ์ ์ ๋ณด ์ธ์ฆ ์ํ, ๋ชจ๋ฌ ์ด๋ฆผ ์ฌ๋ถ, ์์ฑ ์ค์ธ ํผ ์์ ๋ฐ์ดํฐ ๋ฑ ๋น๋ฒํ๊ฒ ๋ณํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ์ฝ๊ณ ์จ์ผ ํ๋ ํด๋ผ์ด์ธํธ ์ํ๋ฅผ Context API๋ก ๋ค์ค๋ฆฌ๋ ค๋ฉด, 'Provider ์ง์ฅ'๊ณผ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ํญ๋ฐ์ด๋ผ๋ ํ์ธ ํฌ์ธํธ๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋ฐ๋๋ก ๊ธฐ์กด์ Redux๋ ๊ฐ๋ ฅํ์ง๋ง, ํ๋์ ์ํ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด Action Type, Action Creator, Reducer๊น์ง ์ธํ ํด์ผ ํ๋ ๊ฑฐ๋ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ์์ฒ ์ด ๊ฐ์ ์ฃผ๋์ด์ ๊ธฐ๋์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค.
์ด๋ Zustand๊ฐ ๋ฑ์ฅํฉ๋๋ค. ๋ ์ผ์ด๋ก '์ํ'๋ฅผ ๋ปํ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Redux์ ์ฅ์ ์ธ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ณ์นํ๋ฉด์๋, ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ 0์ ์๋ ดํ๊ฒ ๋ง๋ค๊ณ ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ ๋ฐ๊นฅ์ ์คํ ์ด๋ฅผ ์์น์ํด์ผ๋ก์จ ๋ฆฌ๋ ๋๋ง ํญ๋ฐ์ ์์ฒ ๋ด์ํฉ๋๋ค.
๐๏ธ 1. Context API์ ํ๊ณ์ Zustand์ ์ฒ ํ
Zustand๋ฅผ ์ดํดํ๋ ค๋ฉด, ๋จผ์ ์ฐ๋ฆฌ๊ฐ ์ ๊ธฐ์กด ๋๊ตฌ์์ ๋ถํธํจ์ ๋๊ผ๋์ง ๋์ง์ด๋ด์ผ ํฉ๋๋ค.
Context API์ '๋์ ๊ณต๊ฒฉ ๋ฒ์'
Context API๋ Provider ๋ด๋ถ์ ์ปดํฌ๋ํธ๋ค์ด useContext๋ฅผ ํตํด ๊ฐ์ ์ฝ์ต๋๋ค. ๋ฌธ์ ๋ Provider์ value๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ํด๋น ์ปจํ
์คํธ๋ฅผ ๊ตฌ๋
ํ๋ ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ค๋ ์ ์
๋๋ค.
// ๐ฃ ์์ฒ : ์ํ ํ์ ๊ตฌ์กฐ ์ค theme๋ง ์ฐ๊ณ ์ถ์๋ฐ, user๊ฐ ๋ฐ๋์ด๋ ์ ๊น์ง ๋ฆฌ๋ ๋๋ง ๋ผ์!
const { theme } = useContext(AppStoreContext); Zustand์ '์ ๋ฐ ํ๊ฒฉ(Select)'
Zustand๋ ์ด์ ๋ฌ๋ฆฌ, ๋ ๋๋ง ์ํ๊ณ ๋ฐ๊นฅ(React ์ธ๊ณฝ) ์ ๊ฑฐ๋ํ ๋ณด๊ด์๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ๊ฐ ๊ทธ ๋ณด๊ด์ ์์ ํน์ ๊ฐ ํ๋๋ง ์ฝ ์ง์ด์(Select) ๊ตฌ๋ ํ ์ ์๊ฒ ํด์ค๋๋ค.
// ๐ฆ ์ํธ: Zustand๋ก๋ 'theme'๋ง ๊ตฌ๋
ํ ์ ์์ด์. user๊ฐ ๋ฐ๋์ด๋ ์๋ ์กฐ์ฉํฉ๋๋ค.
const theme = useAppStore((state) => state.theme);์ด๊ฒ์ด Zustand์ ํต์ฌ ๋ฉํ ๋ชจ๋ธ์ ๋๋ค. ๋จ์ผ ์คํ ์ด(Single Source of Truth)๋ฅผ ์ ์งํ๋, ๊ตฌ๋ ์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ํ์ํ ๊ณณ์๋ง ์๊ฒ ๋ฐ๋ฅด๋ ๊ฒ(Selector).
๐ง 2. ๋ฆฌ์กํธ ๋ฐ๊นฅ์ ๋ ๋ฆฝ์ ์ธ ์คํ ์ด
Zustand๊ฐ ๋ค๋ฅธ React ์ ์ฉ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ๋ณํ๋๋ ๊ฐ์ฅ ํฐ ํน์ง์ ์คํ ์ด๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ์ข ์๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
Redux๋ Context API๋ ๋ฐ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ต์๋จ์ <Provider>๋ก ์ฑ์ ๊ฐ์ธ์ผ ํฉ๋๋ค. ์ด ๋ง์ ์ํ๊ฐ React ํธ๋ฆฌ์ ๋งฅ๋ฝ(Context) ์์ ๊ฐํ ์๋ค๋ ๋ป์
๋๋ค.
๋ฐ๋ฉด Zustand ์คํ ์ด๋ ์์ํ JavaScript ํด๋ก์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค.
// ๐ฃ ์์ฒ : Provider๊ฐ ์์ด์?! ๊ทธ๋ผ ์ธ์ ์ด๋์ ์ด ์ํ๋ฅผ ์ฐ์ฃ ?
import { create } from 'zustand';
export const useBearStore = create((set) => ({
bears: 0,
increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}));<Provider>ํธ๋ฆฌ๋ก ๊ฐ์ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ฑ ์ง์ ์ ์ด ๊น๋ํด์ง๋๋ค.- ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ : React ์ปดํฌ๋ํธ๊ฐ ์๋ ์์ JS ํจ์(์: Axios ์ธํฐ์
ํฐ ๋ด๋ถ, ์น์์ผ ์ ํธ ํจ์ ์)์์๋ ์ ์ฅ์์ ๊ฐ์ ์ง์ ์ฝ๊ณ (
useBearStore.getState()) ์ ๋ฐ์ดํธ(useBearStore.setState()) ํ ์ ์์ต๋๋ค.
๐ฏ 3. Action๊ณผ State์ ๊ณต์กด
Redux ๋ฉํ ๋ชจ๋ธ์ ์ต์ํ ์ฌ๋๋ค์ ๊ดด๋กญํ๋ ๊ฒ์ ์ํ ๋ณด๊ด ๊ณต๊ฐ(Reducer)๊ณผ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์(Action/Dispatch)๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ค๋ ๊ฐ๋ฐ์ ๋๋ค.
Zustand๋ ์ด ๋์ ํ ๊ณต๊ฐ์ ๋ก๋๋ค. ์ํ ๊ฐ(bears)๊ณผ ๊ทธ ๊ฐ์ ๋ฐ๊พธ๋ ํจ์(increasePopulation)๊ฐ ํ๋์ ์คํ ์ด ์ค๋ธ์ ํธ ์์ ๋๊ฑฐํฉ๋๋ค.
// ๐ฆ ์ํธ: Zustand๋ ์ํ ๋ณด๊ด ๋ฐ์ค ์์, ๊ทธ ๋ฐ์ค๋ฅผ ์กฐ์ํ๋ ๋ช
์ธ์(ํจ์)๋ ๊ฐ์ด ๋ฃ์ด๋๋ ๋ฐฉ์์ด์์.
const bears = useBearStore((state) => state.bears); // ์ํ๋ง ์!
const increasePopulation = useBearStore((state) => state.increasePopulation); // ํจ์๋ง ์!์ด๋ก ์ธํด ์ฝ๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ญ์ถ์ (Debugging)ํ๋ ๊ณผ์ ์ด ๋จ์ผ ํ์ผ ์์์ ๋๋๋ฉฐ, ์ฝ๋๋์ด ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ญ๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. Context API์ ๊ฐ์ฅ ํฐ ๊ตฌ์กฐ์ ๋จ์ ์ ๋ฌด์์ธ๊ฐ์?
- A) ํ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด Provider๊ฐ ํ์์ ์ด์ง ์๋ค.
- B) ๊ตฌ๋ ์ค์ธ ์ํ์ ํน์ ๊ฐ์ด ์๋๋ผ, ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ ๋ฐ๋๋ฉด ํด๋น Context๋ฅผ ์ฝ๋ ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ค.
- C) Redux๋ณด๋ค ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๊ฐ ๋ง์ ์ค์ ์ด ๋ณต์กํ๋ค.
- D) ์ธ๋ถ(React ํธ๋ฆฌ ๋ฐ๊นฅ) ์คํ ๋ฆฌ์ง์์ ์ฐ๋์ด ๋ถ๊ฐ๋ฅํ๋ค.
โ
์ ๋ต: B
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
: Context API๋
valueํ๋กํผํฐ๋ก ์ ๋ฌ๋๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉดuseContext๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํฉ๋๋ค. ํน์ ํ๋กํผํฐ๋ง ๊ณจ๋ผ์ ๊ตฌ๋ (Select)ํ๋ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์์ต๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, Context๋ ๊ฐ์ ๋ฌถ์ด์ ๋์ง๋ ๊ด์ญ ๋ง๋ฒ์ด์์. A, C, D๋ ๋ค ํ๋ฆฐ ์ค๋ช ์ ๋๋ค. ์คํ๋ ค ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ์ ๊ณ ์ง๊ด์ ์ด์ง๋ง ์ ๋ฐ ํ๊ฒฉ์ด ์ ๋๋ ๊ฒ ๋ฌธ์ ์ฃ ."
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: ๐ฆ ์ํธ: "Context๋ ์ค์์น ํ๋ ์ผ๋ฉด ์ง์ ์ ์ฒด ๋ถ์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ ๊ตฌ์กฐ์ ๋๋ค."
Q2. Zustand ์คํ ์ด์ ๊ฐ์ฅ ํฐ ํน์ง์ด์ ์ฅ์ ์ ๋ฌด์์ธ๊ฐ์?
- A) React์ Context API๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๊ตฌํ๋์๋ค.
- B) ์ ํ๋ฆฌ์ผ์ด์
์ต์๋จ์ ๋ฐ๋์
<Provider>๋ฅผ ์ ์ธํด์ผ๋ง ์๋ํ๋ค. - C) ์ํ ๋ณ๊ฒฝ์ ์ํ Reducer ํจ์๋ฅผ ๊ฐ์ ํ์ฌ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ์๊ฒฉํ๊ฒ ์งํจ๋ค.
- D) ์คํ ์ด๊ฐ React ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ฐ๊นฅ(๋ ๋ฆฝ๋ ํด๋ก์ )์ ์กด์ฌํ๋ฉฐ, ํ์ํ ์ํ๋ง ์ ํ์ (Selector)์ผ๋ก ๊ตฌ๋ ํ ์ ์๋ค.
โ
์ ๋ต: D
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช : Zustand๋ ๋ด๋ถ์ ์ผ๋ก ํด๋ก์ ์ ๊ตฌ๋ (Publish/Subscribe) ํจํด์ ์ด์ฉํด React ํธ๋ฆฌ ๋ฐ๊นฅ์ ์คํ ์ด๋ฅผ ๋ง๋ญ๋๋ค. ๋๋ถ์ Provider๊ฐ ํ์ ์๊ณ , ์์ JS ํจ์์์๋ ์คํ ์ด ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์ํ ๊ด๋ฆฌ๋ฅผ ๊ผญ React ์์ ๊ฐ๋ฌ๋์ ํ์๋ ์์ด์. ๋ฐ๊นฅ์ ๋นผ๋ฉด ์คํ๋ ค ์์ ๋ก์์ ธ์!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: ๐ฆ ์ํธ: "Zustand๋ React ์ปดํฌ๋ํธ๋ค์ด ์ธ์ ๋ ์ ํํด์ ๋ฌผ์ด๋ณผ ์ ์๋ '๋ฐ๊นฅ ์ฌ๋ฌด์ค'์ ๋๋ค."
Q3. ๐๏ธโโ๏ธ ์์ฒ ์ ํ ์คํธ ํ์ (Q&A)
์์ฒ ์ด๊ฐ ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ ๋ชฉ๋ก ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด์, Context API๋ก ๋ก๊ทธ์ธ ์ ์ ์ ๋ณด๋ฅผ ๋ฟ๋ ค์ฃผ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๊ธ ์์ฑ ๋ชจ๋ฌ ์ํ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์๋ง์, ๋ก๊ทธ์ธ ์ ์ ์ปจํ ์คํธ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ฒ์๊ธ ๋ชฉ๋ก์ด ๋ฆฌ๋ ๋๋ง๋๊ธฐ ์์ํ์ต๋๋ค. ์์ฒ ์ด๊ฐ Zustand๋ก ์ด ์ํฉ์ ํด๊ฒฐํ๋ค๋ฉด ์ด๋ค ์๋ฆฌ๋ฅผ ํตํด ๋ฆฌ๋ ๋๋ง์ ๋ง์ ์ ์์๊น์?
โ
์ ๋ต: Selector(์ ํ์ ๊ตฌ๋
)๋ฅผ ํตํด ํ์ํ ์ํ๋ง ์๋ผ์ ์ฌ์ฉํ๋ค.
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
: Context API๋
value๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ๋ฐ๋๋ฉด ํ์ ํธ๋ฆฌ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ฆฌ๋ ๋๋ง์ํต๋๋ค. ํ์ง๋ง Zustand๋useStore((state) => state.user)์ฒ๋ผ ์ํ์ ํน์ ํํธ(Slice)๋ง ์ ํ(Select)ํ์ฌ ๊ตฌ๋ ํฉ๋๋ค. Zustand ๋ด๋ถ๋ ์ด ์ ํ๋ ๊ฐ์ด ๋ฐ๋ ๋๋ง ๋ฆฌ์กํธ์ ๋ ๋๋ง ์ ํธ๋ฅผ ๋ณด๋ด๊ธฐ ๋๋ฌธ์, ๋ชจ๋ฌ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ ์ ์ ๋ณด๋ง ๊ตฌ๋ ์ค์ธ ์ปดํฌ๋ํธ๋ ์ฌํ๊ฐ๋์ง ์์ต๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, Context ์์์ ๋ฉ๋ชจ์ด์ ์ด์
(
useMemo)์ ์ด์ฌํ ๊ฑฐ๋ ๊ฑด ์์๋ฐฉํธ์ด์์. ์ ์ด์ ๊ฐ์ ์ด์๋ฅผ ์ค์์น ํ๋ ๋จ์๋ก ์ขํ๋ Zustand์ Selector ํจํด์ด ๋ ๊ทผ๋ณธ์ ์ธ ์ฑ๋ฅ ๊ฐ์ ์ฑ ์ด๋๋๋ค." - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: ๐ฆ ์ํธ: "Zustand๋ ๋ทํ์์ ์ํ๋ ์ ์๋ง ํผ์ค๋ ๊ฑฐ๊ณ , Context API๋ ๋ทํ ์ํ์ ํต์งธ๋ก ์์๋๊ณ ๋ค๊ฐ ์์์ ๊ณจ๋ผ ๋จน์ผ๋ผ๋ ๋ฐฉ์์ ๋๋ค."
๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
๋งจ๋ ์ต์๋จ์ Provider ๋ฐ์๋ฃ๊ณ "์ ๋ค ๋ฆฌ์ผํ์์ผ๋ก ๊น๋นก๊ฑฐ๋ฆฌ์ง?" ์ ๋งํ๋ ๋ ๋ค์ ์ด์ ์๋ ์ด๋ค! ์ ์ญ ์ํ๋ฅผ ๋ฆฌ์กํธ ๋ฐ๊นฅ์ ์คํ ์ด๋ก ๋นผ๋ฒ๋ฆฌ๋๊น ํ์ผ ๊ตฌ์กฐ๋ ์คํ๋ ค ํจ์ฌ ์์ํด์ก๋ค. ๋ด์ผ์ ์ด ๊ณฐํก์ด ๋ Context ๋ก์ง๋ค ์น ๋ค Zustand๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ์ง. ๊ทธ๋์ ๋ ํด๊ทผ๊ธธ์ ๋ง๋ผํ์ ๊ฟ๋ฐ๋ก์ฐ ๋จน๊ณ ์ถ์๋ฐ, ์ํธ ๋ฆฌ๋ ๋์ด๋ ๊ฐ์ด ๊ฐ๊น ๋ฌผ์ด๋ณผ๊น. (์๋ง ์๋ฆฌ ์ค๋ช ํ์๋ฉฐ ๊ฑฐ์ ํ์๊ฒ ์ง ๐ค)
๐ก "์ํ ๊ด๋ฆฌ๋ ์ฑ์ ์ปค๋ค๋ ๋ณด์๊ธฐ๋ก ๊ฐ์ธ๋ ๊ฒ ์๋๋ผ, ํ์ํ ์ปดํฌ๋ํธ์๋ง ์์ ํ์ดํ๋ผ์ธ์ ๊ฝ์ ๋ฃ๋ ๊ฒ์ด๋ค."