계층을 나눈 기준은 하나다. AI 판단, 데이터 조회, 주문 실행이 섞이면 실패했을 때 어디서 멈췄는지 찾을 수 없다.

전체 아키텍처
| 영역 | 구성 | 책임 |
|---|---|---|
| Frontend | React, Vite, TanStack Query, Recharts | 대시보드, 포트폴리오, AI 뱅커, 백테스트 UI |
| Backend | FastAPI, async SQLAlchemy, APScheduler | API, 스케줄러, 주문/분석 흐름 제어 |
| Safety (2026.07) | 중앙 주문 서비스, Kill Switch Gate, 주문 의도 원장, 거래 모드 원장 | 실주문 멱등성, 신규 주문 차단, 모드 판정 fail-closed |
| Data | PostgreSQL, Alembic | 포지션, 주문, 설정, 분석 로그, 스냅샷 저장 |
| Search/RAG | OpenSearch, kNN, BM25 | 뉴스 문서 저장, chunk 검색, source health 관측 |
| AI/Ops | Gemini, OpenAI fallback, LangGraph | AI 분석, provider fallback, reviewer 흐름 |
| External | Upbit, Slack, RSS/News | 거래소, 운영 명령, 시장 데이터 연동 |
2026.07에 생긴 층이고, 거래소로 나가는 모든 POST가 지나는 단일 경로다.
주문 흐름: Engine → 중앙 주문 서비스 → Kill Switch Gate → 주문 의도 원장 → Upbit → 15초 대사 → 원장 반영
AI 뱅커는 단일 응답 생성으로 끝나는 챗봇이 아니다. supervisor가 요청을 분류해 worker로 분기하고 reviewer가 근거 부족과 과도한 확신을 검토한 뒤에야 답이 나간다.