
๐ป Zustand๋?
React์์ ์ฌ์ฉํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Zustand๋ React ์ฑ์์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ ํธํ๊ฒ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค.
์ด ๊ธ์์๋ Zustand๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง, ์ ํ์ํ์ง, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ณ ์ ํ๋ค.
โจ ์ํ ๊ด๋ฆฌ๋?
React์์๋ ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ state (์ํ)๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, ๋ก๊ทธ์ธ ์ฌ๋ถ๋ ๋คํฌ ๋ชจ๋ ์ค์ ์ฒ๋ผ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฐ์ด ์๋ค๋ฉด ์ด๋ฅผ ์ํ๋ก ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด๋ค.
const [isLoggedIn, setIsLoggedIn] = useState(false);
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ์ํ๊ฐ ์ ์ ๋ง์์ง๊ณ , ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ํจ๊ป ์จ์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๐ ์ด๋ด ๋ ํ์ํ ๊ฒ์ด ๋ฐ๋ก ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๐ต ๊ธฐ์กด ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ์
React๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋๋ค์ ์ข ์ข ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ก Redux๋ฅผ ์ ํ๊ฒ ๋๋๋ฐ,
Redux๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์ฌ์ฉํ๊ธฐ์ ์๋์ ๊ฐ์ ๋จ์ ๋ค์ด ์๋ค.
- ์ค์ ํด์ผ ํ ๊ฒ ๋ง๋ค.
- ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ณต์กํ๋ค.
- ๋ฌ๋ ์ปค๋ธ๊ฐ ๋์์ ์ด๋ณด์์๊ฒ๋ ๋ถ๋ด์ด ํฌ๋ค.
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด Zustand์ด๋ค.
Zustand๋ ๋ ์ผ์ด๋ก '์ํ'๋ผ๋ ๋ป์ผ๋ก,
React 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ react-three-fiber๋ฅผ ๋ง๋ ํ PMNDRS์์ ๊ฐ๋ฐํ๋ค.
๐ ํต์ฌ ํน์ง
| ํน์ง | ์ค๋ช |
| ๐ง ์์ฃผ ์ฌํํ API | ๋ช ์ค๋ง์ผ๋ก ์คํ ์ด ์์ฑ ์๋ฃ |
| ๐งต Context ํ์ ์์ | Provider ์์ด๋ ์ํ ๊ณต์ ๊ฐ๋ฅ |
| ๐ ๋น ๋ฅธ ์๋ | ๋ถํ์ํ ๋ ๋๋ง ์ต์ํ, ์ฑ๋ฅ ์ต์ ํ |
| ๐ฏ ํ์ ์คํฌ๋ฆฝํธ ์๋ฒฝ ์ง์ | ์ ๋ค๋ฆญ ๊ธฐ๋ฐ์ผ๋ก ์ถ๋ก ์ ๋จ |
| ๐ ๋ฏธ๋ค์จ์ด๋ ๊ฐ๋ฅ | Persist (๋ก์ปฌ ์ ์ฅ), Devtools ์ฐ๋ ๋ฑ |
๐ ์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
1๏ธโฃ ์ค์น
pnpm install zustand
# ๋๋
npm install zustand
2๏ธโฃ ์ํ ๋ง๋ค๊ธฐ (์คํ ์ด ์์ฑ)
// store.ts
import { create } from 'zustand';
type BearState = {
bears: number;
increase: () => void;
};
export const useBearStore = create<BearState>((set) => ({
bears: 0,
increase: () => set((state) => ({ bears: state.bears + 1 })),
}));
3๏ธโฃ ์ํ ์ฌ์ฉํ๊ธฐ
// App.tsx
import { useBearStore } from './store';
function App() {
const bears = useBearStore((state) => state.bears);
const increase = useBearStore((state) => state.increase);
return (
<div>
<h1>๊ณฐ์ ์: {bears}</h1>
<button onClick={increase}>๊ณฐ ์ถ๊ฐํ๊ธฐ ๐ป</button>
</div>
);
}
๐ค Zustand๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
| ํญ๋ชฉ | Redux | Zustand |
| ์ฝ๋๋ | ๋ง์ | ๋งค์ฐ ์ ์ |
| ๋ฌ๋์ปค๋ธ | ๋์ | ๋ฎ์ |
| Provider ํ์ ์ฌ๋ถ | โญ | โ |
| ์ฑ๋ฅ ์ต์ ํ | ์ง์ ํด์ผ ํจ | ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ ์ ๋จ |
| Devtools | ์์ | ์์ |
๐ ๊ฒฐ๋ก
Zustand๋ ์ํ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ณ๊ณ ์ฌํํ๊ฒ ํ๊ณ ์ถ์ React ๊ฐ๋ฐ์์๊ฒ ์์ฃผ ์ข์ ์ ํ์ผ ๊ฒ์ด๋ค.
- Redux๊ฐ ๋๋ฌด ๋ณต์กํ๋ค๊ณ ๋๋ผ๋ ์ฌ๋ ๐๐ป
- ๊ฐ๋จํ ๊ธ๋ก๋ฒ ์ํ๊ฐ ํ์ํ ์ฌ๋ ๐๐ป
- ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ์ฑ๋ฅ์ ๋ชจ๋ ์ฑ๊ธฐ๊ณ ์ถ์ ์ฌ๋ ๐๐ป
๐๐ป Zustand๋ฅผ ์ฌ์ฉํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Frontend] sessionStorage (1) | 2025.06.28 |
|---|---|
| [Frontend] localStorage์ Cookies (0) | 2025.06.28 |
| [Frontend] ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด ํ ๋น (Array Destructuring) (0) | 2025.06.16 |
| [Frontend] ํ์ ์คํฌ๋ฆฝํธ์์ const ๋? (0) | 2025.06.16 |
| [Frontend] ์ปดํฌ๋ํธ๋ (1) | 2025.06.16 |