# [[State Management]] ## πŸ“Œ Brief Summary μƒνƒœ 관리(State Management)λŠ” ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°μ΄ν„°μ˜ 흐름과 μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 데이터 곡유λ₯Ό λ‹€λ£¨λŠ” 핡심 κ°œλ…μž…λ‹ˆλ‹€ [1, 2]. 과거의 단일 μŠ€ν† μ–΄(monolithic) λ°©μ‹μ—μ„œ λ²—μ–΄λ‚˜, ν˜„λŒ€μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 둜컬 μƒνƒœ, μ „μ—­ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ, μ„œλ²„ μƒνƒœ 등을 λΆ„λ¦¬ν•˜μ—¬ 각각에 νŠΉν™”λœ 도ꡬλ₯Ό μ‚¬μš©ν•˜λŠ” λ°©ν–₯으둜 λ°œμ „ν–ˆμŠ΅λ‹ˆλ‹€ [1]. μƒνƒœλ₯Ό λͺ…ν™•ν•˜κ²Œ λΆ„λ₯˜ν•˜κ³  μ•„ν‚€ν…μ²˜ κ·œμΉ™μ„ μ€€μˆ˜ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 것은 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜κ³  μ•±μ˜ μ„±λŠ₯κ³Ό ν™•μž₯성을 보μž₯ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content * **μƒνƒœμ˜ λΆ„λ₯˜μ™€ μ†Œμœ κΆŒ (State Categories & Ownership)** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 컀질수둝 μƒνƒœλ₯Ό μ„Έ κ°€μ§€ μ£Όμš” μΉ΄ν…Œκ³ λ¦¬λ‘œ λͺ…ν™•νžˆ λ‚˜λˆ„μ–΄ 관리해야 ν•©λ‹ˆλ‹€: μ‹œκ°μ  ν† κΈ€μ΄λ‚˜ μž…λ ₯값을 λ‹€λ£¨λŠ” **둜컬 UI μƒνƒœ**, νŠΉμ • μ‚¬μš©μž μƒν˜Έμž‘μš©κ³Ό μ—°κ²°λœ **κΈ°λŠ₯(Feature) μƒνƒœ**, μ‚¬μš©μžλ‚˜ μƒν’ˆκ³Ό 같은 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 데이터λ₯Ό λ‹€λ£¨λŠ” **μ—”ν‹°ν‹°(Entity) μƒνƒœ**μž…λ‹ˆλ‹€ [3]. FSD(Feature-Sliced Design) μ•„ν‚€ν…μ²˜λŠ” μ—”ν‹°ν‹° μƒνƒœλŠ” `entities` 계측에, κΈ°λŠ₯ μƒνƒœλŠ” `features` 계측에, μ „μ—­ 인프라 μƒνƒœλŠ” `app` 계측에 λ‘λŠ” λ“± λͺ…ν™•ν•œ μ†Œμœ κΆŒ κ·œμΉ™μ„ κ°•μ œν•©λ‹ˆλ‹€ [5]. * **μ„œλ²„ μƒνƒœμ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœμ˜ 뢄리** APIμ—μ„œ κ°€μ Έμ˜¨ 데이터(μ„œλ²„ μƒνƒœ)λŠ” ν΄λΌμ΄μ–ΈνŠΈ 츑의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœμ™€ 근본적으둜 λ‹€λ₯΄λ©° 캐싱, 동기화, λ‘œλ”© 및 μ—λŸ¬ 사이클 μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [4, 6]. 이 λ•Œλ¬Έμ— 2025λ…„ ν”„λ‘ νŠΈμ—”λ“œ ν‘œμ€€μ—μ„œλŠ” **TanStack Query (React Query)** 와 같은 라이브러리λ₯Ό ν™œμš©ν•΄ μ„œλ²„ μƒνƒœλ₯Ό μ „μ—­ μƒνƒœ 관리도ꡬ와 λΆ„λ¦¬ν•˜μ—¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€ [4, 6-8]. * **Context API의 νŠΉμ„±κ³Ό ν•œκ³„** React에 λ‚΄μž₯된 Context APIλŠ” Props Drilling을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ 데이터 전솑 λ©”μ»€λ‹ˆμ¦˜μœΌλ‘œ, κ·Έ μžμ²΄λ§ŒμœΌλ‘œλŠ” μƒνƒœ 관리 μ†”λ£¨μ…˜μ΄ μ•„λ‹ˆλ©° `useState`λ‚˜ `useReducer`와 ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 9]. ν…Œλ§ˆ, λ‘œμΌ€μΌ, κΈ°λŠ₯ ν”Œλž˜κ·Έμ™€ 같이 **λ“œλ¬Όκ²Œ λ³€κ²½λ˜λŠ” 정적인 μ „μ—­ μƒνƒœ**λ₯Ό κ΅¬μ„±ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€ [10, 11]. ν•˜μ§€λ§Œ, μƒνƒœ λ³€κ²½ μ‹œ 이λ₯Ό ꡬ독 쀑인 λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ λΆˆν•„μš”ν•˜κ²Œ λ¦¬λ Œλ”λ§λ˜λŠ” "λΈŒλ‘œλ“œμΊμŠ€νŠΈ μ‹œμŠ€ν…œ"μ΄λ―€λ‘œ 자주 λ³€κ²½λ˜λŠ” 동적 λ°μ΄ν„°μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [4, 12, 13]. * **Zustandλ₯Ό ν™œμš©ν•œ μ΅œμ ν™”** ZustandλŠ” μ€‘μ†Œκ·œλͺ¨ μ•±(50-500개 μ»΄ν¬λ„ŒνŠΈ)에 μ ν•©ν•œ 가볍고 μœ μ—°ν•œ μ „μ—­ μƒνƒœ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€ [14-16]. **"μ„ νƒμž(Selector) νŒ¨ν„΄"**을 μ§€μ›ν•˜μ—¬, μ»΄ν¬λ„ŒνŠΈκ°€ κ΅¬λ…ν•œ νŠΉμ • μƒνƒœ 쑰각(slice)이 변경될 λ•Œλ§Œ λ¦¬λ Œλ”λ§λ˜λ„λ‘ ν•¨μœΌλ‘œμ¨ Context API의 μ„±λŠ₯ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•©λ‹ˆλ‹€ [4, 17, 18]. 단, κ·œμΉ™μ΄ 맀우 자유둭기 λ•Œλ¬Έμ— 비동기 νŒ¨ν„΄ μ²˜λ¦¬μ— λŒ€ν•΄ νŒ€ λ‚΄ μ—„κ²©ν•œ κ·œμΉ™μ΄ μ—†λ‹€λ©΄ μ½”λ“œλ² μ΄μŠ€κ°€ ν˜Όλž€μŠ€λŸ¬μ›Œμ§ˆ 수 μžˆλŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€ [15, 19, 20]. * **λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ„ μœ„ν•œ Redux** ReduxλŠ” 500개 μ΄μƒμ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ°€μ§„ λŒ€κ·œλͺ¨ μ•±, λ³΅μž‘ν•œ νŒŒμƒ/계산 μƒνƒœ, 10λͺ… μ΄μƒμ˜ νŒ€μ›μ΄ ν˜‘μ—…ν•˜λŠ” ν™˜κ²½μ—μ„œ μ‚°μ—… ν‘œμ€€μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€ [21, 22]. λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈκ°€ λ§Žμ•„ 보일 수 μžˆμœΌλ‚˜, 였히렀 μ΄λŸ¬ν•œ ꡬ쑰적 μ œμ•½μ΄ 일관성을 λΆ€μ—¬ν•˜μ—¬ 버그λ₯Ό 사전에 μ°¨λ‹¨ν•˜κ³  RTK Queryλ₯Ό 톡해 λ³΅μž‘ν•œ 비동기 μž‘μ—…μ„ μˆ˜μ›”ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [21, 23, 24]. λ˜ν•œ Time-Travel 디버깅 같은 ν›Œλ₯­ν•œ DevTools 톡합 ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [22, 23, 25]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Context API]], [[Zustand]], [[Redux]], [[TanStack Query]], [[Feature-Sliced Design]] - **Projects/Contexts:** [[Scalable React Architecture]], [[React Performance Optimization]] - **Contradictions/Notes:** μƒνƒœ 관리 라이브러리의 선택에 μžˆμ–΄, λ²ˆλ“€ 크기(Bundle Size)λ§Œμ„ κΈ°μ€€μœΌλ‘œ κ²°μ •ν•˜λŠ” 것은 잘λͺ»λœ μ΅œμ ν™” 방식이며, μ•±μ˜ μ‚¬μš© 사둀, νŒ€μ˜ 규λͺ¨ 및 μƒνƒœμ˜ λ³΅μž‘μ„±μ„ 기반으둜 평가해야 ν•©λ‹ˆλ‹€ [26, 27]. λ˜ν•œ, ν•œ ν”„λ‘œμ νŠΈμ—μ„œ 두 κ°€μ§€ 도ꡬλ₯Ό λ³‘ν–‰ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것도 ν›Œλ₯­ν•œ μ ‘κ·Όλ²•μž…λ‹ˆλ‹€(예: 정적 μ„€μ •μ—λŠ” Context API, 동적 μ•± μƒνƒœμ—λŠ” Zustand) [28]. --- *Last updated: 2026-04-26*