e2c5471046
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.1 KiB
6.1 KiB
id, title, category, status, verification_status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, created_at, updated_at, review_reason, merge_history, tags, raw_sources, applied_in, github_commit
| id | title | category | status | verification_status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | created_at | updated_at | review_reason | merge_history | tags | raw_sources | applied_in | github_commit | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| engineering-tradeoff-analysis | 엔지니어링 트레이드오프 분석 | Software_Engineering | draft | applied |
|
A | 0.9 | 2026-06-13 | 2026-06-13 |
|
|
|
엔지니어링 트레이드오프 분석
🎯 한 줄 통찰 (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 트레이드오프 종합 분석 초안 생성.