# [[State Management Libraries]] ## πŸ“Œ Brief Summary **State Management Libraries(μƒνƒœ 관리 라이브러리)**λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈ 간에 κ³΅μœ λ˜λŠ” μƒνƒœ(State)λ₯Ό 예츑 κ°€λŠ₯ν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰¬μš΄ λ°©μ‹μœΌλ‘œ 쀑앙 μ§‘μ€‘ν™”ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 도ꡬ 및 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μž…λ‹ˆλ‹€. λ‹€μˆ˜μ˜ λ·°(View)κ°€ λ™μΌν•œ μƒνƒœμ— μ˜μ‘΄ν•˜κ±°λ‚˜ μƒνƒœλ₯Ό λ³€κ²½ν•΄μ•Ό ν•  λ•Œ λ°œμƒν•˜λŠ” 'Prop Drilling' 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ ˆμž„μ›Œν¬λ³„λ‘œ React의 Context API 및 React Query, Vue의 Pinia, Flutter의 BLoC 및 Riverpod λ“±μœΌλ‘œ κ³ λ„λ‘œ λ°œμ „ν•˜λ©° λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ˜ λ Œλ”λ§ μ„±λŠ₯κ³Ό 둜직 μž¬μ‚¬μš©μ„±μ„ κ·ΉλŒ€ν™”ν•˜λŠ” 핡심 기술둜 ν™œμš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ## πŸ“– Core Content μ†ŒμŠ€ 데이터에 κΈ°λ°˜ν•œ ν”„λ ˆμž„μ›Œν¬λ³„ μƒνƒœ 관리 νŒ¨ν„΄κ³Ό 핡심 μ›λ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. * **Vue μƒνƒœκ³„μ˜ 쀑앙 집쀑식 μƒνƒœ 관리 (Pinia)** * κ³Όκ±° 곡식 λΌμ΄λΈŒλŸ¬λ¦¬μ˜€λ˜ Vuexλ₯Ό λŒ€μ²΄ν•˜μ—¬ **Pinia**κ°€ μƒˆλ‘œμš΄ ν‘œμ€€μœΌλ‘œ μ •μ°©ν–ˆμŠ΅λ‹ˆλ‹€. * Composition API μŠ€νƒ€μΌμ„ μ§€μ›ν•˜λ©° 덜 λ³΅μž‘ν•œ API(λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ κ°μ†Œ)와 **TypeScript μ‚¬μš© μ‹œ κ°•λ ₯ν•œ νƒ€μž… μΆ”λ‘ **을 μ œκ³΅ν•©λ‹ˆλ‹€. * λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ PiniaλŠ” μ „μ—­ μƒνƒœλΏλ§Œ μ•„λ‹ˆλΌ μ•‘μ…˜(Action) 내뢀에 비동기 λ‘œμ§μ„ ν¬ν•¨μ‹œμΌœ, μ»΄ν¬λ„ŒνŠΈμ˜ μ±…μž„μ„ μˆœμˆ˜ν•œ UI λ Œλ”λ§μœΌλ‘œ ν•œμ •μ‹œν‚€λŠ” 핡심 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. * **React μƒνƒœκ³„μ˜ μƒνƒœ 관리 νŒ¨λŸ¬λ‹€μž„** * **Context API ν™œμš©**: 'Prop Drilling'을 막기 μœ„ν•΄ Context APIλ₯Ό ν†΅ν•œ μ•”μ‹œμ  μƒνƒœ κ³΅μœ κ°€ ν™œμš©λ©λ‹ˆλ‹€. 특히 볡합 μ»΄ν¬λ„ŒνŠΈ(Compound Components) νŒ¨ν„΄μ€ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ ν•˜λ‚˜μ˜ μ‘μ§‘λœ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ„λ‘ μƒνƒœλ₯Ό κ³΅μœ ν•˜μ—¬ UI μœ μ—°μ„±μ„ λ†’μž…λ‹ˆλ‹€. * **ν΄λΌμ΄μ–ΈνŠΈ 및 μ„œλ²„ μƒνƒœ μœ„μž„**: React μƒνƒœκ³„μ—μ„œλŠ” Redux Toolkit, Zustand, Jotai λ“±μ˜ 도ꡬ가 널리 쓰이며, 특히 μ„œλ²„ 데이터 동기화와 캐싱 λ‘œμ§μ€ **TanStack Query (React Query)**와 같은 λΌμ΄λΈŒλŸ¬λ¦¬μ— μœ„μž„ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ λ‘œμ§μ„ λ‹¨μˆœν™”ν•˜λŠ” νŒ¨ν„΄μ΄ μ‹€μ „ ν‘œμ€€μœΌλ‘œ 자리 μž‘μ•˜μŠ΅λ‹ˆλ‹€. * **Flutter의 μƒνƒœ 관리 μ•„ν‚€ν…μ²˜** * ν”„λ‘œμ νŠΈμ˜ 규λͺ¨μ™€ μš”κ΅¬μ‚¬ν•­μ— 따라 λ‹€μ–‘ν•œ μƒνƒœ 관리 νŒ¨ν„΄μ΄ 경쟁적으둜 μ‚¬μš©λ©λ‹ˆλ‹€. * **BLoC (Business Logic Component)**: 슀트림(Stream) 기반의 이벀트 쀑심 μƒνƒœ 관리 λ°©μ‹μœΌλ‘œ μ—„κ²©ν•œ 관심사 뢄리λ₯Ό μš”κ΅¬ν•˜μ—¬ λŒ€κ·œλͺ¨ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν”„λ‘œμ νŠΈμ—μ„œ μ„ ν˜Έλ©λ‹ˆλ‹€. * **Provider & Riverpod**: μƒλŒ€μ μœΌλ‘œ 배우기 쉽고 μœ μ—°ν•œ μ˜μ‘΄μ„± μ£Όμž…μ„ μ œκ³΅ν•˜μ—¬ μ€‘μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ 높은 생산성을 λ³΄μž…λ‹ˆλ‹€. 특히 Riverpod은 MVVM μ•„ν‚€ν…μ²˜μ™€μ˜ 결합도가 높은 ν˜„λŒ€μ μΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. ## βš–οΈ Trade-offs & Caveats μƒνƒœ 관리 라이브러리 및 νŒ¨ν„΄μ„ λ„μž…ν•  λ•Œ κ³ λ €ν•΄μ•Ό ν•  기술적 μ œμ•½κ³Ό λΆ€μž‘μš©μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. * **SSR(Server-Side Rendering) ν™˜κ²½μ—μ„œμ˜ 데이터 유좜 μœ„ν—˜**: μ „μ—­ μƒνƒœλ₯Ό λ‹¨μˆœν•œ 싱글톀(Singleton) νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„ν•  경우, SSR ν™˜κ²½μ—μ„œλŠ” μ—¬λŸ¬ μ„œλ²„ μš”μ²­ 간에 μŠ€ν† μ–΄ μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ λ˜μ–΄ λ‹€λ₯Έ μ‚¬μš©μžμ˜ 데이터가 유좜(Cross-request state pollution)될 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ Pinia 등은 μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ μŠ€ν† μ–΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 방식을 κ°•μ œν•©λ‹ˆλ‹€. * **λ³΅μž‘μ„±κ³Ό λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ 증가**: Flutter의 BLoCλ‚˜ 일뢀 μ—„κ²©ν•œ μƒνƒœ 관리 νŒ¨ν„΄μ€ 도메인 둜직과 UI κ°„μ˜ κ°•ν•œ 관심사 뢄리 및 ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ, 이λ₯Ό μœ„ν•΄ μž‘μ„±ν•΄μ•Ό ν•  λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œκ°€ 크게 λŠ˜μ–΄λ‚˜λ©° 초기 ν•™μŠ΅ 곑선(Learning Curve)이 κ°€νŒŒλ₯΄λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€. * **λ Œλ”λ§ μ„±λŠ₯ μ΅œμ ν™”μ˜ ν•œκ³„**: μƒνƒœ 관리 μŠ€ν† μ–΄λ₯Ό 잘λͺ» κ΅¬μ‘°ν™”ν•˜κ±°λ‚˜ Contextλ₯Ό 넓은 λ²”μœ„μ— κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•  경우, μ—°κ΄€ μ—†λŠ” ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ λΆˆν•„μš”ν•˜κ²Œ λ¦¬λ Œλ”λ§(Re-rendering)λ˜μ–΄ μ‹œμŠ€ν…œ μ„±λŠ₯이 μ €ν•˜λ˜λŠ” λΆ€μž‘μš©μ΄ 생길 수 μžˆμŠ΅λ‹ˆλ‹€. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜/기반 기술] * [[One-way Data Flow]] * μ—°κ²° 이유: Vue 및 Reactμ—μ„œ 단일 μ§„μ‹€ 곡급원(Single source of truth)을 기반으둜 ν•œ λ·°(View)와 μ•‘μ…˜(Action)의 μƒν˜Έμž‘μš© 원리λ₯Ό κ·œμ •ν•©λ‹ˆλ‹€. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μƒνƒœκ°€ 였직 예츑 κ°€λŠ₯ν•œ λ°©μ‹μœΌλ‘œλ§Œ 변이(Mutation)λ˜μ–΄μ•Ό ν•˜λŠ” 근본적인 μ΄μœ μ™€ μ•„ν‚€ν…μ²˜ 섀계 사상을 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. * [[Server-Side Rendering (SSR)]] * μ—°κ²° 이유: λŒ€κ·œλͺ¨ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ „μ—­ μƒνƒœ 라이브러리(Pinia λ“±)λ₯Ό λ‹€λ£° λ•Œ ν•„μˆ˜μ μœΌλ‘œ κ³ λ €ν•΄μ•Ό ν•˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμž…λ‹ˆλ‹€. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μƒνƒœ 관리 도ꡬ가 ν΄λΌμ΄μ–ΈνŠΈ ν™˜κ²½κ³Ό μ„œλ²„ ν™˜κ²½ μ–‘μͺ½μ—μ„œ ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration) 및 고립성을 μœ μ§€ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. #### [κ΅¬ν˜„/ν™œμš© 도ꡬ] * [[Pinia]] * μ—°κ²° 이유: Vue 3 ν™˜κ²½μ—μ„œ Vuexλ₯Ό λŒ€μ²΄ν•˜λŠ” ν˜„λŒ€μ μΈ 곡식 μƒνƒœ 관리 κ΅¬ν˜„μ²΄μž…λ‹ˆλ‹€. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: Composition APIμ™€μ˜ λ§€λ„λŸ¬μš΄ κ²°ν•© 방식과 TypeScript ν™˜κ²½μ—μ„œμ˜ ν–₯μƒλœ νƒ€μž… μΆ”λ‘  기법을 ν•™μŠ΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. * [[TanStack Query (React Query)]] * μ—°κ²° 이유: React(및 λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬)μ—μ„œ μ„œλ²„μ˜ 데이터λ₯Ό νŽ˜μΉ­ν•˜κ³  μΊμ‹±ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœ 관리 뢀담을 λΆ„λ¦¬μ‹œν‚€λŠ” λŒ€ν‘œμ μΈ λ„κ΅¬μž…λ‹ˆλ‹€. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 순수 UI μ€‘μ‹¬μ˜ ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœμ™€, μ™ΈλΆ€ 비동기 μš”μ²­ μ€‘μ‹¬μ˜ μ„œλ²„ μƒνƒœλ₯Ό λΆ„λ¦¬ν•˜λŠ” μ „λž΅μ  νŒ¨ν„΄μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. * [[BLoC]] * μ—°κ²° 이유: Flutter μƒνƒœκ³„μ—μ„œ 널리 μ“°μ΄λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λͺ¨λ°”일 ν™˜κ²½μ—μ„œ 슀트림(Stream)을 ν†΅ν•œ 이벀트 쀑심 λ°˜μ‘ν˜• μƒνƒœ 관리와 μ—„κ²©ν•œ 관심사 뢄리λ₯Ό λ‹¬μ„±ν•˜λŠ” 법을 배울 수 μžˆμŠ΅λ‹ˆλ‹€. ### Deeper Research Questions * λŒ€κ·œλͺ¨ SSR(Server-Side Rendering) μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ „μ—­ μƒνƒœ 관리 도ꡬ(예: Pinia)κ°€ μš”μ²­ κ°„ 데이터 유좜(Cross-request state pollution)을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ•„ν‚€ν…μ²˜μ  격리 λ©”μ»€λ‹ˆμ¦˜μ€ 무엇인가? * ν΄λΌμ΄μ–ΈνŠΈ UI μ „μ—­ μƒνƒœ 관리와 μ™ΈλΆ€ API 캐싱/동기화λ₯Ό μœ„ν•œ μ„œλ²„ μƒνƒœ 관리(예: React Query)λ₯Ό λΆ„λ¦¬ν–ˆμ„ λ•Œ μ–»κ²Œ λ˜λŠ” λ Œλ”λ§ μ„±λŠ₯적 이점과 μ•„ν‚€ν…μ²˜μ  λ³΅μž‘μ„±(ν•œκ³„)은 무엇인가? * Flutter ν”„λ‘œμ νŠΈμ˜ λ³΅μž‘μ„±μ— 따라 BLoC νŒ¨ν„΄μ˜ 엄격함과 Riverpod νŒ¨ν„΄μ˜ μœ μ—°ν•œ μ˜μ‘΄μ„± μ£Όμž…μ€ 각각 μ–΄λ–€ λΉ„μ¦ˆλ‹ˆμŠ€ μ‹œλ‚˜λ¦¬μ˜€(예: μ—”ν„°ν”„λΌμ΄μ¦ˆ vs μŠ€νƒ€νŠΈμ—… MVP)μ—μ„œ 졜적의 효과λ₯Ό λ°œνœ˜ν•˜λŠ”κ°€? * Reactμ—μ„œ Context APIλ₯Ό ν™œμš©ν•œ 볡합 μ»΄ν¬λ„ŒνŠΈ(Compound Components) νŒ¨ν„΄μ΄ Prop Drilling을 해결함과 λ™μ‹œμ— μž¬μ‚¬μš© κ°€λŠ₯ν•œ λŒ€κ·œλͺ¨ λ””μžμΈ μ‹œμŠ€ν…œ ꡬ좕에 κΈ°μ—¬ν•˜λŠ” λ°”λŠ” 무엇인가? * Vue 2μ—μ„œ Vue 3둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ‹œ, κΈ°μ‘΄ Vuex μŠ€ν† μ–΄λ₯Ό Pinia둜 이관할 λ•Œ `@vue/compat` λͺ¨λ“œμ™€ ν”Όμ²˜ ν”Œλž˜κ·Έλ₯Ό κ²°ν•©ν•œ 점진적 μ „ν™˜ μ „λž΅μ€ ꡬ체적으둜 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜λŠ”κ°€? ### Practical Application Contexts * **Implementation:** μ»΄ν¬λ„ŒνŠΈ 계측이 κΉŠμ–΄μ§€λ©΄μ„œ 데이터λ₯Ό ν•˜μœ„λ‘œ 계속 전달해야 ν•˜λŠ” Prop Drilling ν˜„μƒμ„ μ œκ±°ν•˜κ³ , 쀑앙 싱글톀 νŒ¨ν„΄(λ˜λŠ” Context)을 μ΄μš©ν•΄ ν•„μš”ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό 직접 μ£Όμž…λ°›μ•„ κ΅¬ν˜„ν•©λ‹ˆλ‹€. * **System Design:** μ‹œμŠ€ν…œ λ‚΄ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, μ™ΈλΆ€ μ„œλ²„ 데이터 페칭 둜직, 순수 UI μƒνƒœ 둜직의 도메인 경계λ₯Ό μ„€μ •ν•˜κ³ , 각 λ ˆμ΄μ–΄κ°€ 단일 μ±…μž„λ§Œμ„ 가지도둝 μƒνƒœ 관리 μ‹œμŠ€ν…œμ„ 뢄리 μ„€κ³„ν•©λ‹ˆλ‹€. * **Operation / Maintenance:** μƒνƒœ 변경을 μœ λ°œν•˜λŠ” μ•‘μ…˜(Action)이 쀑앙에 μΊ‘μŠν™”λ˜λ―€λ‘œ, 예기치 μ•Šμ€ 데이터 λ³€μ΄λ‘œ μΈν•œ 버그 λ°œμƒ μ‹œ μƒνƒœ 관리 μŠ€ν† μ–΄λ₯Ό λ””λ²„κΉ…ν•˜μ—¬ 였λ₯˜μ˜ 원인을 μ‹ μ†ν•˜κ²Œ μΆ”μ ν•˜κ³  μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. * **Learning Path:** 단일 μ»΄ν¬λ„ŒνŠΈμ˜ 둜컬 μƒνƒœ 닀루기 -> μƒμœ„ μ»΄ν¬λ„ŒνŠΈλ‘œ μƒνƒœ λŒμ–΄μ˜¬λ¦¬κΈ° -> Contextλ‚˜ Provide/Injectλ₯Ό ν†΅ν•œ μƒνƒœ 곡유 -> μ „μ—­ μƒνƒœ κ΄€λ¦¬μž(Pinia, BLoC λ“±) λ„μž… -> 비동기/μ„œλ²„ μƒνƒœ νŠΉν™” 라이브러리(React Query) 뢄리 ν•™μŠ΅ 순으둜 μ΄μ–΄μ§‘λ‹ˆλ‹€. * **My Project Relevance:** ν˜„μž¬ 개발 쀑인 ν”„λ‘ νŠΈμ—”λ“œλ‚˜ λͺ¨λ°”일(React, Vue, Flutter) μ•„ν‚€ν…μ²˜ 섀계 μ‹œ, ν”„λ‘œμ νŠΈμ˜ 규λͺ¨μ™€ νŒ€μ›μ˜ μˆ™λ ¨λ„μ— κ°€μž₯ μ ν•©ν•œ μƒνƒœ 관리 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ „λž΅μ„ μ±„νƒν•˜κ³  기술 뢀채λ₯Ό λ°©μ§€ν•˜λŠ” 평가 κΈ°μ€€μœΌλ‘œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Adjacent Topics * [[Micro-frontends]] * ν™•μž₯ λ°©ν–₯: κ±°λŒ€ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 독립적인 μ—¬λŸ¬ ν•˜μœ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λΆ„ν• ν•  λ•Œ, λΆ„ν• λœ 마이크둜 ν”„λ‘ νŠΈμ—”λ“œ λͺ¨λ“ˆ κ°„μ˜ μ „μ—­ μƒνƒœ κ³΅μœ μ™€ 동기화λ₯Ό μ–΄λ–»κ²Œ 보μž₯ν•  것인지에 λŒ€ν•œ μ•„ν‚€ν…μ²˜ ν™•μž₯ 연ꡬ. * [[Composition API]] * ν™•μž₯ λ°©ν–₯: κ±°λŒ€ν•œ 쀑앙 μƒνƒœ 관리 라이브러리 없이도, ν”„λ ˆμž„μ›Œν¬ 자체의 λ°˜μ‘μ„± λͺ¨λΈ(예: Composables, Custom Hooks)을 μ‚¬μš©ν•˜μ—¬ 둜직과 μƒνƒœλ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  μΊ‘μŠν™”ν•˜λŠ” κ²½λŸ‰ μƒνƒœ 관리 νŒ¨ν„΄μœΌλ‘œμ˜ ν™•μž₯. --- *Last updated: 2026-05-03*