---
id: engineering-tradeoff-analysis
title: "엔지니어링 트레이드오프 분석"
category: "Software_Engineering"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["tradeoff analysis", "트레이드오프", "무엇을 최적화 무엇을 희생", "설계 절충", "언제 실패하나"]
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: ["tradeoff", "engineering", "decision", "architecture", "astraai"]
raw_sources: ["AstraAI 전체 서브시스템 분석", "AstraAI/src/core/*", "AstraAI/src/retrieval/*", "AstraAI/src/intelligence/*"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[엔지니어링 트레이드오프 분석]]

## 🎯 한 줄 통찰 (One-line insight)
모든 설계는 "무언가를 최적화하기 위해 무언가를 희생"한 결과다 — AstraAI 의 각 서브시스템이 *무엇을 얻고 무엇을 포기했으며, 언제 그 선택이 깨지는지* 를 명시하면, 작은 모델이 맥락에 맞는 설계를 고를 수 있다.

## 🧠 핵심 개념 (Core concepts)
- 트레이드오프 분석 = (최적화한 것 / 희생한 것 / 더 단순한 대안 / 더 확장적인 대안 / 이 설계가 실패하는 조건 / 다른 설계가 나은 조건).
- 정답은 *맥락 의존* — 같은 결정도 환경이 바뀌면 오답이 된다.

## 📖 세부 내용 (Details · 서브시스템별 트레이드오프)

### 1. 이벤트 소싱 JSONL 저장 ([[이벤트 소싱 스토어 패턴]])
- **최적화:** 이력 보존, 내결함, 코드 중복 제거, 무의존.
- **희생:** 저장 공간(단조 증가), 상태 재생 비용, 복잡 쿼리.
- **더 단순한 대안:** 상태 JSON 1개 덮어쓰기(이력 불필요 시).
- **더 확장적인 대안:** SQLite/이벤트 스토어 DB + 스냅샷 compaction.
- **실패 조건:** 이벤트가 수만 건↑, 멀티프로세스 동시 쓰기, 복잡 조인 필요.
- **다른 설계가 나을 때:** 마지막 값만 중요하거나, 분석 쿼리가 핵심일 때.

### 2. 5계층 메모리 ([[5계층 메모리 시스템]])
- **최적화:** 컨텍스트 정밀 선별, 계층별 정책(만료/승급).
- **희생:** 분류 결정 비용, 매니저 복잡도, 다중 저장 파일.
- **더 단순한 대안:** 최근 N 메시지 버퍼 + 단일 노트 저장.
- **더 확장적인 대안:** 계층별 임베딩 + 벡터 DB 메타 필터.
- **실패 조건:** 분류 규칙이 모호해 "어디 저장?" 이 매번 논쟁, 관련도 휴리스틱 오선별.
- **다른 설계가 나을 때:** 단발성 도구(기억 불필요), 또는 순수 의미검색이 전부일 때.

### 3. 멀티에이전트(단일 작성자/순차) ([[Agent 오케스트레이터 분해]])
- **최적화:** 자원 안전(한 모델 상주), 본문 보존, 컨텍스트 절약.
- **희생:** 처리량/속도(순차), 단일 모델 품질 의존, 병렬 다양성.
- **더 단순한 대안:** 단일 프롬프트 1회 호출(짧은 작업).
- **더 확장적인 대안:** 워커 풀 병렬 + judge panel 합의(자원 충분 시).
- **실패 조건:** 멀티 GPU 표준화, 대규모 병렬 리서치 요구, 누적 지연이 인내 초과.
- **다른 설계가 나을 때:** 서버 배포·속도 critical.

### 4. 하이브리드 검색(결정론 우선) ([[RAG 검색 파이프라인]])
- **최적화:** 가용성(임베딩 없어도 동작), 설명가능성.
- **희생:** 스케일 정규화 복잡, 수작업 동의어 유지, 형태소 미분석.
- **더 단순한 대안:** 키워드 includes 매칭.
- **더 확장적인 대안:** BM25 + 벡터 DB + reranker 모델.
- **실패 조건:** brain 규모 폭증(sparse 인덱스 부담), 동의어 사전 누락 누적.
- **다른 설계가 나을 때:** 대규모·고품질 임베딩 상시 가용.

### 5. 검증(결정론 항상/LLM 조건부) ([[Intelligence 검증 레이어]])
- **최적화:** 낮은 평균 latency, 위험 시 정밀 검수.
- **희생:** 임계 오설정 시 미탐/오탐, 휴리스틱 가중치, 1-pass 약함.
- **더 단순한 대안:** 검증 없음(빠르나 환각 방치).
- **더 확장적인 대안:** 골든셋 학습 가중치 + 다회전 debate.
- **실패 조건:** 모델 교체로 신호 분포 변화, 위험 도메인에서 1-pass 부족.
- **다른 설계가 나을 때:** 대형 모델/서버에서 상시 LLM 검수 감당 가능.

### 6. 파일 저장(투명성 우선) ([[ADR-0005 파일 기반 저장 채택]])
- **최적화:** 투명성, 무의존, git 친화.
- **희생:** 쿼리 성능, 동시쓰기 잠금 직접, 인덱스 자가구축.
- **실패 조건:** 멀티유저, 수만 파일, 복잡 분석.
- **다른 설계가 나을 때:** 다중 사용자 SaaS, 대규모 분석.

### 7. 수동 DI(단일 composition root) ([[ADR-0006 수동 의존성주입 인터페이스 서비스]])
- **최적화:** 투명한 조립, 테스트성, 무의존.
- **희생:** 조립 코드 장황, 배선 수작업.
- **실패 조건:** 모듈/조립 지점 폭증.
- **다른 설계가 나을 때:** 대규모 팀/모듈, 동적 수명관리 필요 시 컨테이너.

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
이 표의 모든 "희생" 은 *현재 환경(로컬·단일 사용자·작은 모델)* 전제다. 환경이 바뀌면 같은 표의 우열이 뒤집힌다 — 트레이드오프는 절대값이 아니라 *맥락 함수*.

## 🛠️ 적용 사례 (Applied in summary)
각 행은 대응 ADR/서브시스템 문서의 결정 요약. 신규 설계 시 "내 환경에서 이 희생을 감당할 수 있나?" 를 먼저 묻는다.

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[AstraAI 아키텍처 개요]]
- **관련 개념:** [[아키텍처 휴리스틱]], [[안티패턴 카탈로그]], [[ADR-0001 이벤트 소싱 채택]], [[리팩토링 플레이북]]
- **참조 맥락:** 로컬 LLM 이 설계 선택 시 "무엇을 희생하는지" 와 "언제 깨지는지" 를 평가할 때 참조.

## 📚 출처 (Sources)
- [S1] AstraAI 서브시스템 분석(core/retrieval/intelligence/memory) 및 본 위키의 ADR 모음

## 📝 변경 이력 (Change history)
- 2026-06-13: AstraAI 트레이드오프 종합 분석 초안 생성.
