계층을 나눈 기준은 하나다. 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 거래소, 운영 명령, 시장 데이터 연동

Safety 층을 왜 따로 뺐나

2026.07에 생긴 층이고, 거래소로 나가는 모든 POST가 지나는 단일 경로다.

주문 흐름: Engine → 중앙 주문 서비스 → Kill Switch Gate → 주문 의도 원장 → Upbit → 15초 대사 → 원장 반영


기술 선택 이유


멀티 에이전트 구조

AI 뱅커는 단일 응답 생성으로 끝나는 챗봇이 아니다. supervisor가 요청을 분류해 worker로 분기하고 reviewer가 근거 부족과 과도한 확신을 검토한 뒤에야 답이 나간다.