Skip to content

๐Ÿ‘€์ƒํƒœ ๊ด€๋ฆฌ (State Management)

shlee9999 edited this page Oct 2, 2024 · 4 revisions

Zustand

  1. ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ API: Zustand๋Š” Redux์— ๋น„ํ•ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์—†์–ด ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
  2. ํ›… ๊ธฐ๋ฐ˜์˜ ์‚ฌ์šฉ๋ฒ•: Zustand๋Š” React์˜ ํ›…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ์ž˜ ์–ด์šธ๋ฆฌ๋ฉฐ, ์ปค์Šคํ…€ ํ›…์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  3. Flux ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋ฉด์„œ๋„ ๊ฐ„๋‹จํ•จ: Zustand๋Š” Redux์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Flux ํŒจํ„ด์„ ๋”ฐ๋ฅด์ง€๋งŒ, ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์Šคํ† ์–ด์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.
  4. ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ์Œ: Redux์— ๋น„ํ•ด Zustand๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ํ•™์Šต์ด ์‰ฝ๊ณ , ํ”„๋กœ์ ํŠธ์— ๋น ๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ์ ์  ์ธ๊ธฐ๊ฐ€ ๋†’์•„์ง€๋Š” ์ถ”์„ธ: Zustand๋Š” ์ตœ๊ทผ React ์ƒํƒœ๊ณ„์—์„œ ๊ธ‰๋ถ€์ƒํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ, ์ ์  ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž๋ฅผ ํ™•๋ณดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

  1. ์Šคํ† ์–ด ์ƒ์„ฑํ•˜๊ธฐ:

    • createย ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์Šคํ† ์–ด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ์Šคํ† ์–ด ๋‚ด๋ถ€์—๋Š” ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    import { create } from 'zustand'
    
    const useStore = create((set) => ({
      bears: 0,
      increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
      removeAllBears: () => set({ bears: 0 }),
    }))
  2. ์ปดํฌ๋„ŒํŠธ์—์„œ ์Šคํ† ์–ด ์‚ฌ์šฉํ•˜๊ธฐ:

    • ์ƒ์„ฑํ•œ ์Šคํ† ์–ด๋ฅผ ํ›…์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ์™€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    • ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง ๋ฉ๋‹ˆ๋‹ค.

    function BearCounter() {
      const bears = useStore((state) => state.bears)
      return <h1>{bears} around here ...</h1>  
    }
    
    function Controls() {
      const increasePopulation = useStore((state) => state.increasePopulation)
      return <button onClick={increasePopulation}>one up</button>
    }

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

์ฐธ๊ณ 

Zustand ๊ณต์‹ ๋ฌธ์„œ