---
id: pattern-state-management
title: "State Management Pattern"
category: "Pattern_CrossCutting"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: ["state management", "상태 관리", "single source of truth", "unidirectional data flow"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.88
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "cross-cutting", "state", "platform-independent"]
raw_sources: ["일반 소프트웨어 공학 지식", "AstraAI/src/sidebar/managers/* (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[State Management Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
상태 관리의 본질은 플랫폼(웹/모바일/데스크탑)을 막론하고 "**단일 진실 원천(Single Source of Truth) + 단방향 데이터 흐름 + 명시적 변경**" 으로, 상태가 흩어지고 양방향으로 얽힐수록 버그가 기하급수로 는다.

## 🧠 핵심 개념 (Core concepts)
1. **Single Source of Truth:** 같은 데이터를 한 곳에만 둔다(중복 상태 = 동기화 버그).
2. **단방향 흐름:** 상태→뷰 렌더, 이벤트→상태 변경(역류 금지).
3. **파생 상태 vs 원천 상태:** 계산 가능한 건 저장하지 말고 derive.
4. **로컬 vs 전역:** 한 컴포넌트만 쓰면 로컬, 여러 곳이 공유하면 전역(끌어올림).
5. **불변 업데이트:** 상태를 *교체* 로 갱신해 변경 추적/되돌리기 용이.

## 📖 세부 내용 (Details · 패턴 명세)
- **Problem (언제 쓰나):** UI/세션/도메인 상태가 여러 곳에서 읽고 쓰일 때.
- **사용 조건:** 상태 소유자를 정할 수 있을 때; 변경 경로를 한정할 수 있을 때.
- **장점:** 예측 가능, 디버깅 용이(변경 추적), 동기화 버그↓, 테스트 용이.
- **단점:** 보일러플레이트, 과한 전역화는 결합↑, 작은 앱엔 과설계.
- **대안:** 로컬 상태만(소규모), 서버 상태를 진실로(react-query류), 이벤트 소싱(이력 필요 시).
- **실패 사례:** 같은 데이터를 두 곳에 저장→불일치; 파생값을 저장→stale; 컴포넌트가 부모 상태 직접 변경(역류); 전역 store 에 모든 걸 넣어 결합 폭증.

## 💻 코드 패턴 (Code patterns)
```text
state = SingleStore(initial)
view  = render(state)                 # 상태 → 뷰
onEvent(e): state = reducer(state, e) # 이벤트 → 새 상태(불변 교체) → 재렌더
derived = useMemo(() => compute(state))# 파생은 저장 말고 계산
```
적용 예: AstraAI 의 sessionStateStore/chatSessionStore 등 manager 가 상태 소유, webview 는 메시지로만 변경 요청([[VSCode 확장 구조와 생명주기]]).

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
전역 상태 라이브러리(Redux 등)가 항상 답은 아니다 — 서버 상태는 캐시 라이브러리에, UI 지역 상태는 로컬에, 진짜 공유 도메인 상태만 전역에.

## 🛠️ 적용 사례 (Applied in summary)
AstraAI sidebar managers(상태 소유 + 메시지 변경).

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Data Flow Pattern]], [[React State Pattern]], [[Caching Pattern]], [[프로젝트 독립 설계 원칙]]
- **참조 맥락:** 작은 모델이 어떤 플랫폼이든 UI/앱 상태를 설계할 때 1차 원리.

## 📚 출처 (Sources)
- [S1] 일반 상태 관리 공학 지식
- [S2] AstraAI/src/sidebar/managers/* — 적용 예

## 📝 변경 이력 (Change history)
- 2026-06-13: 프로젝트 독립 패턴 카드 작성.
