--- 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 트레이드오프 종합 분석 초안 생성.