๐Ÿป 8. Zustand ์ƒํƒœ๊ด€๋ฆฌ โ€” Redux๋ฅผ ์“ฐ๋‹ค๊ฐ€ ์ด๊ฑธ ์•Œ๊ฒŒ ๋œ ์ˆœ๊ฐ„ ๋„ˆ๋ฌด ๊ฐ€๋ฒผ์›Œ์„œ ๊นœ์ง ๋†€๋ž๋‹ค

JM_Devยท2025๋…„ 4์›” 21์ผ
1
post-thumbnail

ํ”„๋กœ์ ํŠธ์— ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๋„์ž…ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ค๋ฅด๋Š” ๊ฑด Redux,
ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋ฌด๊ฒ๊ณ  ์„ธํŒ…์ด ๋งŽ์•„์„œ ๋ญ”๊ฐ€ ๊ฐ„๋‹จํ•œ ๋Œ€์•ˆ์ด ์—†์„๊นŒ ์ฐพ๋‹ค๊ฐ€ Zustand๋ฅผ ๋งŒ๋‚ฌ๋‹ค.
๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, ์ •๋ง ๊ฐ€๋ณ๊ณ  ์ง๊ด€์ ์ธ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€๋‹ค.


โœ… Zustand๋ž€?

๋…์ผ์–ด๋กœ '์ƒํƒœ(state)'๋ผ๋Š” ๋œป.
Redux ์ฐฝ์‹œ์ž Dan Abramov๋„ ์–ธ๊ธ‰ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

  • ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • Context API ์•ˆ ์จ๋„ ๋จ
  • ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ๊ฑฐ์˜ ์—†์Œ
  • immer์™€ devtools๋„ ์ง€์›

โœ… ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

import { create } from 'zustand'

interface BearState {
  bears: number
  increase: () => void
}

const useBearStore = create<BearState>((set) => ({
  bears: 0,
  increase: () => set((state) => ({ bears: state.bears + 1 })),
}));

// ์‚ฌ์šฉ
function Component() {
  const bears = useBearStore((state) => state.bears);
  const increase = useBearStore((state) => state.increase);

  return <button onClick={increase}>๊ณฐ์ด {bears}๋งˆ๋ฆฌ ์žˆ์Šต๋‹ˆ๋‹ค</button>;
}

โœ… ํŠน์ง• ์š”์•ฝ

ํ•ญ๋ชฉZustandRedux
์„ค์ •๊ฑฐ์˜ ์—†์Œstore, reducer, provider ๋“ฑ ํ•„์š”
์„ฑ๋Šฅ ์ตœ์ ํ™”selector๋กœ ์ž๋™ ๋ถ„๋ฆฌ ๋ฆฌ๋ Œ๋”๋งuseSelector + memo ์ตœ์ ํ™” ํ•„์š”
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ธฐ๋ณธ ์ง€์› (๋งค์šฐ ๊ฐ•๋ ฅํ•จ)์„ค์ • ๋งŽ์ง€๋งŒ ์ปค์Šคํ…€ ๊ฐ€๋Šฅ
๋ฏธ๋“ค์›จ์–ดdevtools, persist, immer ๋“ฑ ์„ ํƒํ˜•redux-saga, thunk ๋“ฑ ์™ธ๋ถ€ ์‚ฌ์šฉ

โœ… ์–ธ์ œ ์“ฐ๋ฉด ์ข‹์„๊นŒ?

  • ํŽ˜์ด์ง€๊ฐ€ ๋งŽ์ง€ ์•Š๊ณ , ์ƒํƒœ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š์„ ๋•Œ
  • ๋น ๋ฅด๊ฒŒ ํ”„๋กœํ† ํƒ€์ž… ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ํ•  ๋•Œ
  • ์ƒํƒœ ๊ณต์œ  ๋ฒ”์œ„๊ฐ€ ๋ช…ํ™•ํ•  ๋•Œ

๐Ÿ“ ๋‚ด๊ฐ€ ๋А๋‚€ ์ 

Zustand๋Š” ์ •๋ง "React์™€ ํ•จ๊ป˜ ์“ฐ๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ"๋ผ๋Š” ๋ง์ด ๋”ฑ ๋งž๋Š” ๋А๋‚Œ์ด์—ˆ๋‹ค.
Redux๋ฅผ ์ด๋ฏธ ์“ด ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ํŽธํ•œ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๊ณ ,
Selector ๋ฐฉ์‹ ๋•๋ถ„์— ๋ฆฌ๋ Œ๋”๋ง๋„ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๊น”๋”ํ•˜๊ฒŒ ์ปจํŠธ๋กค ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด ์ธ์ƒ์ ์ด์—ˆ๋‹ค.


๐Ÿง  "Zustand๋Š” โ€˜์ƒ๊ฐ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ์ž‘์€ ๋„๊ตฌโ€™์ด๋‹ค."

profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€