ํ๋ก ํธ์๋ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ Redux, Zustand, Jotai์ ์ฅ๋จ์ ์ ํ์ํ๊ณ , ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ก ํธ์๋ ์ํ ๊ด๋ฆฌ: Redux, Zustand, Jotai ๊ธ๋ก๋ฒ ๋น๊ต ๋ถ์
์ญ๋์ ์ธ ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ธ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋์ฑ ๋ณต์กํ๊ณ ์ํธ์์ฉ์ ์ผ๋ก ๋ณํจ์ ๋ฐ๋ผ, ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ๋ ฅํ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ ํ์์ ์ธ ๋๊ตฌ๊ฐ ๋์์ต๋๋ค. ์ด ๊ธ์์๋ ์ ๋ช ํ ์ธ ๊ฐ์ง ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Redux, Zustand, Jotai์ ๋ํด ํฌ๊ด์ ์ด๊ณ ์ธ๊ณ์ ์ธ ๊ด์ ์์ ๋น๊ต ๋ถ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ ์ฒ ํ, ์ํคํ ์ฒ ํจํด, ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ํ๋ก์ ํธ ๊ท๋ชจ์ ํ ๊ตฌ์กฐ์ ๋ํ ์ ํฉ์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.
๋์์์ด ์งํํ๋ ํ๋ก ํธ์๋ ์ํ์ ์งํ
ํ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ด์ ์ ์ ์ธ ํ์ด์ง๊ฐ ์๋๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์์์ด ํ๋ฅด๊ณ ๋ณํํ๋ ํ๋ถํ๊ณ ์ํธ์์ฉ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ์ ์ ๋ ฅ, API ์๋ต, ์ค์๊ฐ ์ ๋ฐ์ดํธ ๋ฑ ๋ชจ๋ ๊ฒ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ๋ณต์กํ ๊ทธ๋ฌผ์ ํ์ฑํฉ๋๋ค. ์ ์ ์๋ ์ ๋ต ์์ด๋ ์ด ์ํ๊ฐ ๊ธ๋ฐฉ ๋ค๋ฃจ๊ธฐ ํ๋ค์ด์ ธ ๋ฒ๊ทธ, ์ฑ๋ฅ ๋ฌธ์ , ๊ทธ๋ฆฌ๊ณ ๋ต๋ตํ ๊ฐ๋ฐ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ญํ ์ ํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ์ฅ๊ธฐ์ ์ธ ์ฑ๊ณต์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ํ ๊ฒฐ์ ์ ๋๋ค. ํ๋ก์ ํธ์ ๊ท๋ชจ, ํ์ ํน์ ํจ๋ฌ๋ค์์ ๋ํ ์ต์๋, ์ฑ๋ฅ ์๊ตฌ์ฌํญ, ์ํ๋ ๊ฐ๋ฐ์ ๊ฒฝํ๊ณผ ๊ฐ์ ์์๋ค์ด ๋ชจ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๋น๊ต๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ๋ค์ํ ํ๋ก์ ํธ ์ํฉ๊ณผ ํ์ ์ญ๋์ ๊ณ ๋ คํ์ฌ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
Redux: ํ๊ณ ํ ๊ฑฐ์ธ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์น๊ณผ Flux ์ํคํ ์ฒ์์ ์๊ฐ์ ๋ฐ์ Redux๋ ์ค๋ซ๋์ ํ๋ก ํธ์๋ ์ํ ๊ด๋ฆฌ, ํนํ React ์ํ๊ณ ๋ด์์ ์ง๋ฐฐ์ ์ธ ์์น๋ฅผ ์ฐจ์งํด ์์ต๋๋ค. ๊ทธ ํต์ฌ ์์น์ ๋จ์ผ ๋ถ๋ณ ์ํ ํธ๋ฆฌ(์คํ ์ด), ๋ณ๊ฒฝ ์ฌํญ์ ์ค๋ช ํ๋ ์ก์ , ๊ทธ๋ฆฌ๊ณ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ด๋นํ๋ ์์ ํจ์์ธ ๋ฆฌ๋์๋ฅผ ์ค์ฌ์ผ๋ก ํฉ๋๋ค.
Redux์ ํต์ฌ ๊ฐ๋
- ๋จ์ผ ์ง์ค ๊ณต๊ธ์(Single Source of Truth): ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๊ฐ ๋จ์ผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ์กด์ฌํ์ฌ ๋๋ฒ๊น ๊ณผ ์ถ๋ก ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ์ํ๋ ์ฝ๊ธฐ ์ ์ฉ: ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง๋ฅผ ์ค๋ช ํ๋ ๊ฐ์ฒด์ธ ์ก์ (action)์ ๋์คํจ์นํ๋ ๊ฒ์ ๋๋ค.
- ๋ณ๊ฒฝ์ ์์ ํจ์๋ก ์ด๋ฃจ์ด์ง: ์ก์ ์ ์ํด ์ํ ํธ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋๋์ง ๋ช ์ํ๊ธฐ ์ํด, ์ด์ ์ํ์ ์ก์ ์ ๋ฐ์ ๋ค์ ์ํ๋ฅผ ๋ฐํํ๋ ์์ ํจ์์ธ ๋ฆฌ๋์(reducer)๋ฅผ ์์ฑํฉ๋๋ค.
์ํคํ ์ฒ์ ์ํฌํ๋ก์ฐ
์ผ๋ฐ์ ์ธ Redux ์ํฌํ๋ก์ฐ๋ ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค:
- UI๊ฐ ์ก์
(์:
{ type: 'ADD_TODO', payload: 'Redux ๋ฐฐ์ฐ๊ธฐ' }
)์ ๋์คํจ์นํฉ๋๋ค. - Redux๋ ์ด ์ก์ ์ ๋ฆฌ๋์์ ์ ๋ฌํฉ๋๋ค.
- ๋ฆฌ๋์๋ ์ก์ ์ ํ์ ๊ณผ ํ์ด๋ก๋์ ๊ธฐ๋ฐํ์ฌ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- UI ์ปดํฌ๋ํธ๋ ์คํ ์ด๋ฅผ ๊ตฌ๋ ํ๊ณ ๊ด๋ จ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ค์ ๋ ๋๋ง๋ฉ๋๋ค.
Redux์ ์ฅ์
- ์์ธก ๊ฐ๋ฅ์ฑ: ์๊ฒฉํ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ๋ถ๋ณ์ฑ์ ์ํ ๋ณ๊ฒฝ์ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ๋๋ฒ๊น ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๊ฑฐ๋ํ ์ํ๊ณ์ ์ปค๋ฎค๋ํฐ: Redux๋ ๋ฐฉ๋ํ ๋ฏธ๋ค์จ์ด ์ํ๊ณ(๋น๋๊ธฐ ์์ ์ ์ํ Redux Thunk๋ Redux Saga ๋ฑ), ๊ฐ๋ฐ์ ๋๊ตฌ(Redux DevTools), ๊ทธ๋ฆฌ๊ณ ๊ด๋ฒ์ํ ๋ฌธ์๋ฅผ ์๋ํฉ๋๋ค. ์ด ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ๋ ์ถฉ๋ถํ ์ง์๊ณผ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํ์ฅ์ฑ: ๊ตฌ์กฐํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ๋ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
- ๋๋ฒ๊น ๋ฅ๋ ฅ: Redux DevTools๋ ์๊ฐ ์ฌํ ๋๋ฒ๊น , ์ก์ ๋ก๊น , ์ํ ๊ฒ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก, ๋ฌธ์ ์ง๋จ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ํ ํ์ : ๊ฐ์ ๋ ๊ตฌ์กฐ๋ ์ฝ๋ฉ ํ์ค๊ณผ ํจํด์ ์ํํ๋ ๋ฐ ๋์์ ์ฃผ์ด, ๋ค์ํ ๊ธ๋ก๋ฒ ํ ๊ฐ์ ํ์ ์ ์ด์งํ ์ ์์ต๋๋ค.
Redux์ ๋จ์
- ๋ณด์ผ๋ฌํ๋ ์ดํธ: Redux๋ ์ข ์ข ์๋นํ ์์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ํ์๋ก ํ๋ฉฐ, ํนํ ๊ฐ๋จํ ์ํ ์ ๋ฐ์ดํธ์ ๊ฒฝ์ฐ ์ฅํฉํ๊ณ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค.
- ํ์ต ๊ณก์ : ๋ฆฌ๋์, ์ก์ , ๋ฏธ๋ค์จ์ด, ๋ถ๋ณ์ฑ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ ์ด๋ฌํ ํจํด์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์์๊ฒ ๋ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ ์ ์ํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ: ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ์ด ์ข์ง๋ง, ๋ถ์ ์ ํ ๊ตฌํ์ด๋ ๋ถ๋ณ์ฑ์ ๊ณผ๋ํ ์ฌ์ฉ์ ๋๋๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ ์ ์์ผ๋ฉฐ, ํนํ ๋งค์ฐ ํฐ ์ํ ํธ๋ฆฌ๋ ๋น๋ฒํ ์ ๋ฐ์ดํธ์์ ๊ทธ๋ ์ต๋๋ค.
- ์์ ํ๋ก์ ํธ์๋ ๊ณผํจ: ๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, Redux์ ๋ณต์ก์ฑ๊ณผ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ ๋ถํ์ํ ์ ์์ผ๋ฉฐ ๊ฐ๋ฐ ์๋๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค.
Redux ์ฌ์ฉ ์์
Redux๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ ํ ํ๋ฅญํ ์ ํ์ ๋๋ค:
- ๋ณต์กํ ์ํ๋ฅผ ๊ฐ์ง ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ .
- ๊ฐ๋ ฅํ ๋๋ฒ๊น ๊ณผ ์์ธก ๊ฐ๋ฅํ ์ํ ๋ณ๊ฒฝ์ด ํ์ํ ํ๋ก์ ํธ.
- ์ํ ๊ด๋ฆฌ์ ๋ํด ๋งค์ฐ ๊ตฌ์กฐ์ ์ด๊ณ ๋ ๋จ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ํธํ๋ ํ.
- ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์๋น์์ ๋น๋๊ธฐ ์์ ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ .
Zustand: ๋จ์ํจ๊ณผ ๊ฐ๋ ฅํจ์ ๋ง๋จ
Poimandres์ ์ํด ๊ฐ๋ฐ๋ Zustand๋ ๊ทธ ๋จ์์ฑ, ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ก ์๋นํ ์ธ๊ธฐ๋ฅผ ์ป์์ต๋๋ค. React ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋งค์ฐ ์์ฐ์ค๋ฝ๊ฒ ๋๊ปด์ง๋ ํ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ฉฐ, ์ ํต์ ์ธ Redux์ ๊ด๋ จ๋ ๋ณต์ก์ฑ์ ์๋น ๋ถ๋ถ์ ์ถ์ํํฉ๋๋ค.
Zustand์ ํต์ฌ ๊ฐ๋
- ํ ๊ธฐ๋ฐ API: Zustand๋ ์ปดํฌ๋ํธ๊ฐ ์ํ ๋ณ๊ฒฝ์ ๊ตฌ๋ ํ ์ ์๋๋ก ํ๋ ๊ฐ๋จํ ํ (`useStore`)์ ์ ๊ณตํฉ๋๋ค.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์: ์ํ์ ์ก์ ์ด ๋จ์ผ ํจ์์ ํจ๊ป ์ ์๋์ด, ๋ง์ ๊ฒฝ์ฐ์ ๋ณ๋์ ์ก์ ํ์ ๊ณผ ๋ฆฌ๋์๊ฐ ํ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ์ฑ: Redux์ ๊ฐ์ด ์๊ฒฉํ๊ฒ ๊ฐ์ ๋์ง๋ ์์ง๋ง, Zustand๋ ์์ธก ๊ฐ๋ฅํ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ๋ถ๋ณ์ฑ์ ์ฅ๋ คํฉ๋๋ค.
- ์ ๋ ํฐ: Zustand๋ ์ ๋ ํฐ๋ฅผ ์ง์ํ์ฌ ์ปดํฌ๋ํธ๊ฐ ํ์ํ ์ํ ๋ถ๋ถ๋ง ๊ตฌ๋ ํ๋๋ก ํจ์ผ๋ก์จ ๋ฆฌ๋ ๋๋ง์ ์ต์ ํํฉ๋๋ค.
์ํคํ ์ฒ์ ์ํฌํ๋ก์ฐ
Zustand์ ์ํฌํ๋ก์ฐ๋ ๋๋๋๋ก ๊ฐ๋จํฉ๋๋ค:
- `create`๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ์ํ์ ์ด๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ์คํ ์ด๋ฅผ ์ ์ํฉ๋๋ค.
- ์ปดํฌ๋ํธ์์
useStore
ํ ์ ์ฌ์ฉํ์ฌ ์ํ ๋ฐ ์ ๋ฐ์ดํธ ํจ์์ ์ ๊ทผํฉ๋๋ค. - ์
๋ฐ์ดํธ ํจ์(์:
set((state) => ({ count: state.count + 1 }))
)๋ฅผ ํธ์ถํ์ฌ ์ํ๋ฅผ ์์ ํฉ๋๋ค.
Zustand์ ์ฅ์
- ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ: ์ด๊ฒ์ Zustand์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ํ๋ฅผ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ์ฝ๋์ ์์ ํฌ๊ฒ ์ค์ฌ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ๋จ์ถ์ํต๋๋ค.
- ์ฌ์ฉ ์ฉ์ด์ฑ: API๊ฐ ์ง๊ด์ ์ด๊ณ React์ ํ ํจ๋ฌ๋ค์๊ณผ ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ์ตํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: Zustand๋ ์ต์ ํ๋ ๊ตฌ๋ ๋ชจ๋ธ๊ณผ ์ ๋ ํฐ ์ฌ์ฉ ๋๋ถ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
- ์ ์ฐ์ฑ: Redux๋ณด๋ค ๋ ๋ ๋จ์ ์ด์ด์ ๊ฐ๋ฐ์๊ฐ ์ํ์ ๋ก์ง์ ๋ ์์ ๋กญ๊ฒ ๊ตฌ์กฐํํ ์ ์์ต๋๋ค.
- TypeScript ์ง์: ๋ฐ์ด๋ ๊ณต์ TypeScript ์ง์์ผ๋ก ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ ๋๋ค.
- Context Provider ๋ถํ์: ๋ค๋ฅธ ๋ง์ ์๋ฃจ์ ๊ณผ ๋ฌ๋ฆฌ Zustand๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Context Provider๋ก ๊ฐ์ ํ์๊ฐ ์์ด ์ค์ ์ด ๊ฐ๋จํฉ๋๋ค.
Zustand์ ๋จ์
- ๋ ๋ ๋จ์ ์ธ ๊ตฌ์กฐ: ์ผ๋ถ์๊ฒ๋ ์ฅ์ ์ด์ง๋ง, ์๊ฒฉํ ๊ตฌ์กฐ์ ๋ถ์ฌ๋ ๋ช ํํ ๊ท์น์ผ๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ๋๊ท๋ชจ ํ์ด๋ ํ๋ก์ ํธ์์ ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- ์์ ์ํ๊ณ: Redux์ ๋นํด ๋ฏธ๋ค์จ์ด ๋ฐ ํน์ ๋๊ตฌ์ ์ํ๊ณ๊ฐ ์์ง๋ง, ๋ง์ ๋ฒ์ฉ ์๋ฃจ์ ๊ณผ ์ ํตํฉ๋ฉ๋๋ค.
- ๋๋ฒ๊น : ์ํ๋ ๋ณผ ์ ์์ง๋ง, Redux DevTools์ฒ๋ผ ํตํฉ๋ ์๊ฐ ์ฌํ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ถ๊ณ ์์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ปค์คํ ๋ฏธ๋ค์จ์ด๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ์์ : ๋ณต์กํ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ปค์คํ ๋ฏธ๋ค์จ์ด๋ ๋น๋๊ธฐ ๋ก์ง ๋ด์์ ๋ถ๋ณ ์ ๋ฐ์ดํธ๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด `immer`์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ์ด ํ์ํ ์ ์์ต๋๋ค.
Zustand ์ฌ์ฉ ์์
Zustand๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ํ๋ฅญํ ์ ํ์ ๋๋ค:
- ๋ ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ ์ํ๋ ์๊ท๋ชจ๋ถํฐ ๋๊ท๋ชจ๊น์ง ๋ชจ๋ ํฌ๊ธฐ์ ํ๋ก์ ํธ.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ์ค์ด๊ณ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๊ณ ์ ํ๋ ํ.
- ํ ์ค์ฌ์ ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์์ ์ ํธํ๋ ๊ฐ๋ฐ์.
- ์ฑ๋ฅ๊ณผ ํจ์จ์ ์ธ ๋ฆฌ๋ ๋๋ง์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ .
- TypeScript๋ฅผ ๋ง์ด ํ์ฉํ๋ ํ๋ก์ ํธ.
Jotai: ์ํ ๋ฏน ์ํ ๊ด๋ฆฌ
์ญ์ Poimandres์์ ๊ฐ๋ฐํ Jotai๋ Recoil๊ณผ ์ํฐ ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ์์ ์๊ฐ์ ๋ฐ์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ๋จ์ผ ์ ์ญ ์คํ ์ด ๋์ , Jotai๋ ์ํฐ(atom)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ด ์ํ ๋ฏน ์ ๊ทผ ๋ฐฉ์์ ๋งค์ฐ ์ธ๋ถํ๋ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ํน์ ์๋๋ฆฌ์ค์์ ๋ ๋์ ์ฑ๋ฅ์ ์ ์ฌ์ ์ผ๋ก ์ด๋์ด๋ผ ์ ์์ต๋๋ค.
Jotai์ ํต์ฌ ๊ฐ๋
- ์ํฐ(Atoms): ์ํ์ ๊ธฐ๋ณธ ๋จ์์ ๋๋ค. ๊ฐ ์ํฐ์ ์ฝ๊ณ , ์ฐ๊ณ , ๊ตฌ๋ ํ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ์ํ ์กฐ๊ฐ์ ๋๋ค.
- ์ํ ๋ฏน ํน์ฑ: ์ปดํฌ๋ํธ๋ ์์ ์ด ์์กดํ๋ ํน์ ์ํฐ๋ง ๊ตฌ๋ ํฉ๋๋ค. ํ ์ํฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ์ํฐ(๋๋ ๊ทธ๋ก๋ถํฐ ํ์๋ ์ํฐ)์ ์ฝ๋ ์ปดํฌ๋ํธ๋ง ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค.
- ํ์ ์ํฐ(Derived Atoms): ๋ค๋ฅธ ์ํฐ์ผ๋ก๋ถํฐ ์ํฐ์ ํ์์ํฌ ์ ์์ด, ๊ณ์ฐ๋ ์ํ์ ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์: Zustand์ ์ ์ฌํ๊ฒ, Jotai๋ ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ๋ชฉํ๋ก ํฉ๋๋ค.
์ํคํ ์ฒ์ ์ํฌํ๋ก์ฐ
Jotai์ ์ํฌํ๋ก์ฐ๋ ์ํฐ์ ์ค์ฌ์ผ๋ก ํฉ๋๋ค:
- `atom()`์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ๊ฐ ๋๋ ๊ณ์ฐ ํจ์๋ฅผ ๊ฐ์ง ์ํฐ์ ์ ์ํฉ๋๋ค.
- ์ปดํฌ๋ํธ์์ `useAtom` ํ ์ ์ฌ์ฉํ์ฌ ์ํฐ์ ๊ฐ์ ์ฝ๊ณ ์๋๋ค.
- ์ด ํ ์ ์ํฐ์ ๊ฐ๊ณผ ์ธํฐ(setter) ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
Jotai์ ์ฅ์
- ์ธ๋ถํ๋ ๊ตฌ๋ : ์ํ๊ฐ ์์ ์ํฐ ๋จ์๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ํน์ ์ํฐ์ ์ค์ ๋ก ์์กดํ๋ ์ปดํฌ๋ํธ๋ง ๋ณ๊ฒฝ ์ ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค. ์ด๋ ๋ง์ ์ํธ ์์กด์ฑ์ ๊ฐ์ง ๋ณต์กํ UI์์ ๋ฐ์ด๋ ์ฑ๋ฅ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ: Jotai๋ ๋งค์ฐ ๊ฐ๋ณ๊ณ ์ค์ ์ฝ๋๊ฐ ๊ฑฐ์ ํ์ํ์ง ์์ต๋๋ค.
- ์ ์ฐ์ฑ๊ณผ ์กฐํฉ์ฑ: ์ํ ๋ฏน ํน์ฑ์ ์กฐํฉ์ฑ์ ๋งค์ฐ ๋์ฌ์ค๋๋ค. ์ํฐ์ ์ฝ๊ฒ ๊ฒฐํฉํ๊ณ ํ์์์ผ ๋ณต์กํ ์ํ ๋ก์ง์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์ ๊ฒฝํ: ๋ฐฐ์ฐ๊ณ ํตํฉํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ํนํ React ํ ์ ์ต์ํ ๊ฐ๋ฐ์์๊ฒ ์ ํฉํฉ๋๋ค.
- ๋ฐ์ด๋ TypeScript ์ง์: ๊ฐ๋ ฅํ ํ์ดํ์ ๊ฒฌ๊ณ ํ ๊ฐ๋ฐ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
- Context Provider ๋ถํ์: Zustand์ ๋ง์ฐฌ๊ฐ์ง๋ก, Jotai๋ ์ต์์ ๋ ๋ฒจ์ Context Provider๋ฅผ ํ์๋ก ํ์ง ์์ต๋๋ค.
Jotai์ ๋จ์
- ๋ฉํ ๋ชจ๋ธ์ ์ ํ: ์ํ ๋ฏน ๋ชจ๋ธ์ Redux์ ๋จ์ผ ์คํ ์ด ์ ๊ทผ ๋ฐฉ์์ด๋ Zustand์ ์คํ ์ด ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์๊ณผ๋ ๋ฌ๋ผ ์ฝ๊ฐ์ ๋ฉํ ๋ชจ๋ธ ์กฐ์ ์ด ํ์ํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น : Jotai๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, Redux DevTools๋งํผ ์ฑ์ํ๊ฑฐ๋ ๊ธฐ๋ฅ์ด ํ๋ถํ์ง ์์ ์ ์์ผ๋ฉฐ, ํนํ ๊ณ ๊ธ ๋๋ฒ๊น ์๋๋ฆฌ์ค์์ ๊ทธ๋ ์ต๋๋ค.
- ๋น๋๊ธฐ ์์ : ์ํฐ ๋ด์์ ๋น๋๊ธฐ ๋ก์ง์ ์ฒ๋ฆฌํ๋ ค๋ฉด Jotai์ ํน์ ๋น๋๊ธฐ ์์ ํจํด์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ฉฐ, ์ด๋ ์ผ๋ถ ๊ฐ๋ฐ์์๊ฒ Redux ๋ฏธ๋ค์จ์ด๋ณด๋ค ๋ ์ง๊ด์ ์ผ ์ ์์ต๋๋ค.
- ๋ ๋ ๋จ์ : Zustand์ ์ ์ฌํ๊ฒ, ์ ์ฐ์ฑ์ ํ์ด ํนํ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ํฐ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ์์ฒด์ ์ธ ๊ท์น์ ์๋ฆฝํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
Jotai ์ฌ์ฉ ์์
Jotai๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๊ฐ๋ ฅํ ๊ฒฝ์์์ ๋๋ค:
- ์ธ๋ถํ๋ ๋ฆฌ๋ ๋๋ง์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ .
- ์กฐํฉ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ์ํ ๊ด๋ฆฌ ํจํด์ ์ด์ ์ ๋๋ฆด ์ ์๋ ํ๋ก์ ํธ.
- ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ๊ฐ์ง ๊ฐ๋ฒผ์ด ํ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ์ฐพ๋ ํ.
- ์ํ ๋ก์ง์ ์๊ณ ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ๋๋ ์ ์๋ ์ํฉ.
- Recoil๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๊ฐ์ ๋ฐ์ ์ํ ๋ฏน ์ํ ๊ฐ๋ ์ ์ ํธํ๋ ๊ฐ๋ฐ์.
๋น๊ต ๋ถ์ ๋ฐ ๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
์ฃผ์ ์ฐจ์ด์ ์ ์์ฝํ๊ณ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค:
ํ์ต ๊ณก์ ๊ณผ ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ
Redux: ๋ ํนํ ๊ฐ๋ (์ก์ , ๋ฆฌ๋์, ๋ฏธ๋ค์จ์ด, ๋ถ๋ณ์ฑ)์ผ๋ก ์ธํด ๊ฐ์ฅ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ ๊ฐ์ง๋๋ค. ์ ๊ท ๊ฐ๋ฐ์, ํนํ ๋ค์ํ ๊ต์ก ๋ฐฐ๊ฒฝ์ ๊ฐ์ก๊ฑฐ๋ ์ด๋ฌํ ํจํด์ ๋ํ ์ฌ์ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๋ฅผ ์จ๋ณด๋ฉํ๋ ๋ฐ๋ ๋ ๋ง์ ์ ๋ด ๊ต์ก ์๊ฐ์ด ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ด๋ฒ์ํ ๋ฌธ์์ ํฐ ์ปค๋ฎค๋ํฐ ๋๋ถ์ ์ ์ธ๊ณ์ ์ผ๋ก ํ๋ถํ ๋ฆฌ์์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค.
Zustand: ํจ์ฌ ์๋งํ ํ์ต ๊ณก์ ์ ์ ๊ณตํฉ๋๋ค. ํ ๊ธฐ๋ฐ API๋ React ๊ฐ๋ฐ์์๊ฒ ์ง๊ด์ ์ด๋ฉฐ, ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ก ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์๋ก์ด ํ์๋ค์ ๋ ๋นจ๋ฆฌ ์จ๋ณด๋ฉํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
Jotai: ํ์ต ๊ณก์ ์ ์ค๊ฐ ์ ๋์ ๋๋ค. ์ํ ๋ฏน ๋ชจ๋ธ์ ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ง๋ง, `useAtom` ํ ์ ๊ฐ๋จํฉ๋๋ค. ๊ทธ ๋จ์์ฑ๊ณผ ์กฐํฉ์ฑ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ์ต์ํ ํ์ด ์ฑํํ๊ธฐ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ณด์ผ๋ฌํ๋ ์ดํธ์ ๊ฐ๋ฐ ์๋
Redux: ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๋ง์ต๋๋ค. ๊ฐ๋จํ ์ํ ์กฐ๊ฐ์ ์ค์ ํ๋ ๊ฒ์กฐ์ฐจ ์ก์ ํ์ , ์ก์ ์์ฑ์, ๋ฆฌ๋์๋ฅผ ์ ์ํ๋ ๊ฒ์ ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ํ๋ก์ ํธ ์ด๊ธฐ ๋จ๊ณ๋ ๋น ๋ฅธ ํ๋กํ ํ์ดํ์์ ๊ฐ๋ฐ ์๋๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค.
Zustand: ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๋งค์ฐ ์ ์ต๋๋ค. ์ํ์ ์ ๋ฐ์ดํธ ๋ก์ง์ด ์ข ์ข ํ ๊ณณ์์ ์ ์๋์ด ๊ฐ๋ฐ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ด๋ ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์น ์ ์์ผ ํ์๊ฒ ํฐ ์ฅ์ ์ ๋๋ค.
Jotai: ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ์ต์ํ๋ฉ๋๋ค. ์ํฐ์ ์ ์ํ๊ณ `useAtom`์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ๊ฐ๊ฒฐํ์ฌ ๋น ๋ฅธ ๊ฐ๋ฐ์ ๊ธฐ์ฌํฉ๋๋ค.
์ฑ๋ฅ
Redux: ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ์ด ์ข์ง๋ง, ๋ถ๋ณ์ฑ์ด ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ง ์๊ฑฐ๋ ์ํ ํธ๋ฆฌ๊ฐ ์ง๋์น๊ฒ ์ปค์ง๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์ ์คํ ์ต์ ํ๊ฐ ์ข ์ข ํ์ํฉ๋๋ค.
Zustand: ์ต์ ํ๋ ๊ตฌ๋ ๋ฉ์ปค๋์ฆ๊ณผ ํน์ ์ํ ์กฐ๊ฐ์ ์ ํํ๋ ๋ฅ๋ ฅ ๋๋ถ์ ํนํ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
Jotai: ์ธ๋ถํ๋ ์ํ ๋ฏน ์ ๋ฐ์ดํธ ๋๋ถ์ ๋ ๋ฆฝ์ ์ธ ์ํ ์กฐ๊ฐ์ด ๋ง์ ๋งค์ฐ ๋์ ์ธ UI์ ๋ํด ์ ์ฌ์ ์ผ๋ก ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ปดํฌ๋ํธ๋ ํ์ํ ๊ฒ๋ง ๊ตฌ๋ ํฉ๋๋ค.
์ํ๊ณ์ ๋๊ตฌ
Redux: ๋น๊ตํ ์ ์๋ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋น๋๊ธฐ ์์ ์ ์ํ ํ๋ถํ ๋ฏธ๋ค์จ์ด ์ต์ , ๊ด๋ฒ์ํ ๊ฐ๋ฐ ๋๊ตฌ(Redux DevTools), ๊ทธ๋ฆฌ๊ณ ์๋ง์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ์ ์๋ํฉ๋๋ค. ์ด ๊ฒฌ๊ณ ํ ์ํ๊ณ๋ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์๋นํ ์ด์ ์ ๋๋ค.
Zustand: ์ฑ์ฅํ๋ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ค ์๋ฐ์คํฌ๋ฆฝํธ ๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํตํฉ๋ฉ๋๋ค. Redux์ฒ๋ผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ ๋ฌธ ๋ฏธ๋ค์จ์ด์ ํญ์ ๋์ง ์์ง๋ง, ์ ์ฐ์ฑ์ ํตํด ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
Jotai: ๋ ์ง์ค๋ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ฐ๋ณ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. Redux๋งํผ ๋ค์ํ ๊ธฐ์ฑ ์๋ฃจ์ ์ ์ ๊ณตํ์ง๋ ์์ ์ ์์ง๋ง, ํต์ฌ ์์น์ด ๊ฒฌ๊ณ ํ๊ณ ๋ค๋ฅธ React ์ํ๊ณ ๋๊ตฌ์ ์ ํตํฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ ์ ํฉ์ฑ๊ณผ ํ ํ์
Redux: ํจํด์ ์ต์ํ ๊ธฐ์กด ํ์ด ์๋ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์์ ์ ๋๋ค. ๊ตฌ์กฐ์ ์ธ ํน์ฑ์ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ํ ๊ฐ์ ์ผ๊ด์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
Zustand: ์๊ท๋ชจ๋ถํฐ ๋๊ท๋ชจ๊น์ง ๊ด๋ฒ์ํ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค. ๋จ์ํจ์ ๊ธ๋ก๋ฒ ํ, ํนํ ๋ณต์กํ ์ํ ๊ด๋ฆฌ ํจํด ๊ฒฝํ์ด ์ ์ ํ ๋ด์์ ๋ ๋น ๋ฅธ ํ์ ๊ณผ ๋ฐ๋ณต์ ์ด์งํ ์ ์์ต๋๋ค.
Jotai: ์ธ๋ถํ๋ ์ํ ์ ์ด์ ์กฐํฉ์ฑ์ผ๋ก๋ถํฐ ์ด์ต์ ์ป์ ์ ์๋ ํ๋ก์ ํธ์ ํ์ํฉ๋๋ค. ์ฌ์ฉ ์ฉ์ด์ฑ๊ณผ ์กฐํฉ์ฑ์ ์ ์ฐ์ฑ๊ณผ ์ฑ๋ฅ ๋ฏธ์ธ ์กฐ์ ์ ์ค์ํ๋ ํ์๊ฒ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํ๋ก์ ํธ์ ์ ํฉํ ๋๊ตฌ ์ ํํ๊ธฐ
Redux, Zustand, Jotai ์ฌ์ด์ ๊ฒฐ์ ์ ์ด๋ ๊ฒ์ด ๋ณดํธ์ ์ผ๋ก "๋ ๋ซ๋ค"๋ ๊ฒ์ด ์๋๋ผ, ํน์ ํ๋ก์ ํธ์ ํ ์ํฉ์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ด ๋ฌด์์ธ์ง์ ๋ํ ๊ฒ์ ๋๋ค. ๋ค์ ์ง์นจ ์ง๋ฌธ์ ๊ณ ๋ คํด ๋ณด์ธ์:
- ํ๋ก์ ํธ ๊ท๋ชจ์ ๋ณต์ก์ฑ: ์ค์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๊ฐ์, ์๋๋ฉด ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ๊ธ ์์คํ ์ธ๊ฐ์? ๋ ๊ฐ๋จํ ์ฑ์ ๊ฒฝ์ฐ Zustand๋ Jotai๋ก ์ถฉ๋ถํ ๋๊ฐ ๋ง์ต๋๋ค. ๋ณต์กํ ์ํ ์์กด์ฑ์ ๊ฐ์ง ๊ฑฐ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Redux์ ๊ตฌ์กฐ๊ฐ ๋ ์ ์ตํ ์ ์์ต๋๋ค.
- ํ ๊ฒฝํ: ํ์ด ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฌํ ํจํด(์: Flux, ๋ถ๋ณ ๋ฐ์ดํฐ)์ ์ผ๋ง๋ ์ต์ํ๊ฐ์? ํ์ด ์ํ ๊ด๋ฆฌ์ ์ฒ์์ด๋ผ๋ฉด Zustand์ ์ฌ์ฉ ์ฉ์ด์ฑ์ด๋ Jotai์ ์ํ ๋ฏน ๋ชจ๋ธ์ด ๋ ์ ๊ทผํ๊ธฐ ์ฌ์ธ ์ ์์ต๋๋ค. ๋ง์ฝ ๊น์ Redux ๊ฒฝํ์ด ์๋ค๋ฉด, ๊ทธ๊ฒ์ ๊ณ ์ํ๋ ๊ฒ์ด ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ์๊ตฌ์ฌํญ: ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์์ญ์ด ๋งค์ฐ ๋์ ์ด๊ณ ์ฆ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๊ธฐ ์ฌ์ด๊ฐ์? Jotai์ ์ํ ๋ฏน ํน์ฑ์ ์ฌ๊ธฐ์ ์๋นํ ์ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค. Zustand ์ญ์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
- ๊ฐ๋ฐ ์๋: ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ต์ํ๊ฐ ์ผ๋ง๋ ์ค์ํ๊ฐ์? Zustand์ Jotai๋ ์ด ๋ถ์ผ์์ ๋ฐ์ด๋ฉ๋๋ค.
- ๋๋ฒ๊น ํ์์ฑ: ์๊ฐ ์ฌํ ๋๋ฒ๊น ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๋๋ฒ๊น ๋๊ตฌ๊ฐ ์ผ๋ง๋ ์ค์ํ๊ฐ์? Redux๋ ์ด ์ ์์ ๊ฐ์ฅ ์ฑ์ํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฏธ๋์ ์ ์ง๋ณด์์ฑ: ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฝ๋๋ฒ ์ด์ค์ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง, ํนํ ์ ์ฌ์ ์ผ๋ก ์ ๋์ ์ธ ๊ธ๋ก๋ฒ ์ธ๋ ฅ์ ๊ณ ๋ คํ์ฌ ์๊ฐํด๋ณด์ธ์.
๊ฒฐ๋ก : ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ ์ญ๋ ๊ฐํํ๊ธฐ
Redux, Zustand, Jotai๋ ๊ฐ๊ฐ ํ๋ก ํธ์๋ ์ํ ๊ด๋ฆฌ์ ๋๋ ทํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฒฌ๊ณ ํ ๊ตฌ์กฐ์ ๋ฐฉ๋ํ ์ํ๊ณ๋ฅผ ๊ฐ์ถ Redux๋ ๋ณต์กํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ฐ๋ ฅํ ์ ํ์ผ๋ก ๋จ์ ์์ต๋๋ค. Zustand๋ ๋จ์์ฑ, ์ฑ๋ฅ, ์ต์ํ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ์ ๋งค๋ ฅ์ ์ธ ๊ท ํ์ ์ ๊ณตํ์ฌ ๋ค๋ฐฉ๋ฉด์ผ๋ก ํ๋ฅญํ ์ต์ ์ด ๋ฉ๋๋ค. Jotai๋ ์ํ ๋ฏน ์ํ ๊ด๋ฆฌ์ ํ์ ๋์ ํ์ฌ, ๋์ ์ธ UI์ ๋ํ ์ธ๋ถํ๋ ์ ์ด์ ์ ์ฌ์ ์ผ๋ก ์ฐ์ํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ด ๊ตญ๊ฒฝ๊ณผ ์๊ฐ๋๋ฅผ ๋์ด ๊ณ์ ํ๋ ฅํจ์ ๋ฐ๋ผ, ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ์ ์์ฐ์ฑ, ์ฝ๋ ํ์ง ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๊ฐ๊ฐ์ ํต์ฌ ์์น, ์ฅ์ ๋ฐ ๋จ์ ์ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ํ๋ก์ ํธ์ ๊ณ ์ ํ ์๊ตฌ์ ๊ฐ์ฅ ์ ํฉํ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ผ๋ฉฐ, ์ ์ธ๊ณ์ ์ผ๋ก ํจ์จ์ ์ด๊ณ ์ฑ๊ณต์ ์ธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด์งํ ์ ์์ต๋๋ค.
๊ถ๊ทน์ ์ผ๋ก, ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ํ ๊ด๋ฆฌ ์ ๋ต์ ํ์ด ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ์ํ ๊ณ ํ์ง์ ์ฑ๋ฅ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋ ๊ฒ์ ๋๋ค.