---
id: adr-0004-sequential-dispatch
title: "ADR-0004 순차 디스패치 채택"
category: "Architecture_Decision"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["ADR sequential dispatch", "왜 순차 실행", "한 번에 한 모델"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.9
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["adr", "concurrency", "decision", "resource", "astraai"]
raw_sources: ["AstraAI/src/features/company/dispatcher.ts", "AstraAI/src/lmstudio/lifecycleManager.ts"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[ADR-0004 순차 디스패치 채택]]

## 🎯 한 줄 통찰 (One-line insight)
다중 에이전트/모델 작업을 **순차로 실행하고 한 번에 정확히 하나의 모델만 메모리에 상주**시키기로 결정했다 — 단일 GPU/제한 RAM 에서 병렬은 여러 모델 동시 로드를 강요해 OOM·스왑을 부르기 때문 [S1].

## 🧠 핵심 개념 (Core concepts)
- **결정:** company 턴은 전문가를 순차 실행, LM Studio lifecycle 가 이전 모델 unload → 다음 load.
- 무거운 LLM 작업은 `missionId` 락으로도 직렬화.

## 📖 세부 내용 (Details · ADR)
### Problem
병렬 에이전트는 동시에 여러 모델을 상주시켜야 하는데, 타깃 사용자는 단일 GPU/제한 RAM 으로 Astra 를 돌린다 → 동시 로드 시 메모리 초과/스왑/로드 실패 [S1].

### Context
로컬 우선 설계, 작은 모델, LM Studio SDK 의 load/unload 수명관리. 응답 지연보다 *동작 보장* 이 우선.

### Options Considered
1. **병렬 실행** — 빠르지만 다중 모델 상주 필요(자원 초과).
2. **순차 + 매번 같은 모델** — 단순하나 역할별 특화 모델 사용 불가.
3. **순차 + 에이전트별 모델 override(lifecycle unload/load)** — 한 번에 하나, 역할별 모델 가능.

### Chosen Solution
3번. 전문가마다 모델 override 가능, 디스패처가 순차로 돌며 lifecycle 가 교체. peer-context 를 잘라 다음 에이전트에 전달 [S1].

### Why It Was Chosen
"한 모델만 상주" 불변식이 자원 안전을 보장하고, 그러면서도 단계별 최적 모델을 쓸 수 있다.

### Benefits
OOM 회피, 예측 가능한 메모리, 역할별 모델 유연성, 진행 단계 가시화 용이.

### Drawbacks
총 시간이 길다(모델 교체 오버헤드 포함). 병렬 처리량 포기.

### Future Risks
멀티 GPU/대용량 RAM 이 표준이 되면 과도한 제약. 작업 수가 많으면 누적 지연이 사용자 인내를 초과.

### Alternative Approaches
자원 충분 시 워커 풀 + 모델 핀닝으로 병렬. 또는 빠른 단계는 작은 모델로 병렬, 합성만 큰 모델로 직렬(하이브리드).

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
처리량 최적화와 정면 충돌하는 결정 — 환경(자원)이 전제이므로, 서버 배포 시엔 [[엔지니어링 트레이드오프 분석]] 기준으로 재검토.

## 🛠️ 적용 사례 (Applied in summary)
`company/dispatcher.ts` 의 순차 루프 + lifecycle [S1].

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[AstraAI 아키텍처 개요]]
- **관련 개념:** [[ADR-0003 단일작성자 다중역할 멀티에이전트]], [[동시성 제어 Lock Queue Transaction]], [[Background Worker Pattern]]
- **참조 맥락:** 로컬 LLM 이 자원 제약 환경에서 병렬 vs 순차를 결정할 때 참조.

## 📚 출처 (Sources)
- [S1] AstraAI/src/features/company/dispatcher.ts — "Why sequential?" 근거 주석
- [S2] AstraAI/src/lmstudio/lifecycleManager.ts — 모델 load/unload 수명관리

## 📝 변경 이력 (Change history)
- 2026-06-13: AstraAI 코드 분석 기반 ADR 작성.
