Files
system-specs/diagram.md

15 KiB

QuantBench System Architecture - Mermaid Diagrams

1. 전체 시스템 아키텍처 (All Phases)

graph TB
    subgraph "User Layer"
        UI[User Interface<br/>Web/Mobile/Desktop]
    end
    
    subgraph "API Layer"
        Gateway[API Gateway<br/>Authentication & Rate Limiting]
    end
    
    subgraph "Phase 1 - Core Components"
        Balance[balance<br/>계좌 관리]
        Mgmt[mgmt<br/>컨테이너 관리]
        Strategy[strategy<br/>전략 관리]
        Scheduler[scheduler<br/>실행 스케줄러]
        Risk[risk<br/>리스크 관리]
        Data[data<br/>데이터 관리]
    end
    
    subgraph "Phase 2 - Production Ready"
        Analytics[analytics<br/>성과 분석]
        Monitor[monitor<br/>모니터링 & 알림]
    end
    
    subgraph "Phase 3 - Enterprise Grade"
        Audit[audit<br/>감사 로깅]
        Simulation[simulation<br/>시뮬레이션]
    end
    
    subgraph "Infrastructure"
        MQ[Message Queue<br/>Kafka/RabbitMQ]
        DB[(Database<br/>PostgreSQL)]
        Cache[(Cache<br/>Redis)]
        Storage[(Object Storage<br/>S3)]
    end
    
    subgraph "External Systems"
        Broker1[한국투자증권 API]
        Broker2[삼성증권 API]
        Broker3[키움증권 API]
        DataProvider[Data Providers<br/>Yahoo/Alpha Vantage]
    end
    
    UI --> Gateway
    Gateway --> Mgmt
    Gateway --> Strategy
    Gateway --> Scheduler
    Gateway --> Analytics
    Gateway --> Monitor
    Gateway --> Simulation
    
    Scheduler --> Strategy
    Scheduler --> Mgmt
    Scheduler --> Risk
    Scheduler --> Balance
    
    Strategy --> Data
    Strategy --> Risk
    
    Mgmt --> Balance
    Mgmt --> Risk
    
    Analytics --> Mgmt
    Analytics --> Data
    
    Monitor --> Mgmt
    Monitor --> Balance
    Monitor --> Scheduler
    
    Simulation --> Strategy
    Simulation --> Data
    Simulation --> Risk
    
    Audit -.-> Mgmt
    Audit -.-> Strategy
    Audit -.-> Scheduler
    Audit -.-> Balance
    
    Balance --> Broker1
    Balance --> Broker2
    Balance --> Broker3
    
    Data --> DataProvider
    Data --> Broker1
    
    Mgmt --> DB
    Strategy --> DB
    Analytics --> DB
    Audit --> DB
    
    Data --> Cache
    Monitor --> Cache
    
    Analytics --> Storage
    Audit --> Storage
    
    Scheduler --> MQ
    Monitor --> MQ
    
    style Balance fill:#e1f5ff
    style Mgmt fill:#e1f5ff
    style Strategy fill:#e1f5ff
    style Scheduler fill:#e1f5ff
    style Risk fill:#e1f5ff
    style Data fill:#e1f5ff
    
    style Analytics fill:#fff4e1
    style Monitor fill:#fff4e1
    
    style Audit fill:#f0e1ff
    style Simulation fill:#f0e1ff

2. Phase 1 컴포넌트 관계도

graph LR
    subgraph "Phase 1: MVP"
        subgraph "Core Trading"
            Mgmt[mgmt<br/>컨테이너 관리]
            Strategy[strategy<br/>전략 엔진]
            Scheduler[scheduler<br/>스케줄러]
        end
        
        subgraph "Safety & Control"
            Risk[risk<br/>리스크 관리]
            Data[data<br/>데이터 수집]
        end
        
        subgraph "Broker Integration"
            Balance[balance<br/>계좌 연동]
        end
    end
    
    Scheduler -->|1. 트리거| Strategy
    Strategy -->|2. 신호 생성| Risk
    Risk -->|3. 검증 통과| Scheduler
    Scheduler -->|4. 주문 생성| Balance
    Balance -->|5. 체결 결과| Mgmt
    
    Strategy -->|시세 조회| Data
    Risk -->|리스크 데이터| Data
    Mgmt -->|자산 할당| Balance
    
    style Mgmt fill:#4CAF50,color:#fff
    style Strategy fill:#2196F3,color:#fff
    style Scheduler fill:#FF9800,color:#fff
    style Risk fill:#F44336,color:#fff
    style Data fill:#9C27B0,color:#fff
    style Balance fill:#00BCD4,color:#fff

3. 전체 Phase별 구성

graph TB
    subgraph "Phase 3: Enterprise Grade"
        P3_1[audit<br/>감사 추적]
        P3_2[simulation<br/>Paper Trading]
    end
    
    subgraph "Phase 2: Production Ready"
        P2_1[analytics<br/>성과 분석]
        P2_2[monitor<br/>모니터링]
    end
    
    subgraph "Phase 1: MVP"
        P1_1[balance<br/>계좌 관리]
        P1_2[mgmt<br/>컨테이너]
        P1_3[strategy<br/>전략]
        P1_4[scheduler<br/>스케줄러]
        P1_5[risk<br/>리스크]
        P1_6[data<br/>데이터]
    end
    
    P1_1 --> P2_1
    P1_2 --> P2_1
    P1_3 --> P2_1
    P1_6 --> P2_1
    
    P1_1 --> P2_2
    P1_2 --> P2_2
    P1_4 --> P2_2
    
    P2_1 --> P3_1
    P1_4 --> P3_1
    P1_1 --> P3_1
    
    P1_3 --> P3_2
    P1_6 --> P3_2
    P1_5 --> P3_2
    
    style P1_1 fill:#e3f2fd
    style P1_2 fill:#e3f2fd
    style P1_3 fill:#e3f2fd
    style P1_4 fill:#e3f2fd
    style P1_5 fill:#e3f2fd
    style P1_6 fill:#e3f2fd
    
    style P2_1 fill:#fff9c4
    style P2_2 fill:#fff9c4
    
    style P3_1 fill:#f3e5f5
    style P3_2 fill:#f3e5f5

4. 전략 실행 워크플로우 (Sequence Diagram)

sequenceDiagram
    participant S as Scheduler
    participant M as Mgmt
    participant ST as Strategy
    participant D as Data
    participant R as Risk
    participant B as Balance
    participant A as Analytics
    participant MO as Monitor
    
    Note over S: 스케줄 트리거 발생
    
    S->>M: 1. 컨테이너 정보 조회
    M-->>S: 컨테이너 설정 & 현재 포지션
    
    S->>ST: 2. 전략 실행 요청
    ST->>D: 2.1 시장 데이터 조회
    D-->>ST: 최신 시세 데이터
    ST->>ST: 2.2 신호 생성
    ST-->>S: 매매 신호 반환
    
    S->>R: 3. 리스크 체크
    R->>R: 3.1 포지션 사이즈 검증
    R->>R: 3.2 VaR 계산
    R->>R: 3.3 한도 확인
    
    alt 리스크 체크 실패
        R-->>S: 검증 실패
        S->>MO: 알림 발송
        MO-->>S: 알림 완료
        Note over S: 실행 중단
    else 리스크 체크 통과
        R-->>S: 검증 통과
        
        alt 승인 필요 모드
            S->>S: 승인 요청 생성
            S->>MO: 사용자에게 알림
            Note over S: 사용자 승인 대기
            S->>S: 승인 완료
        end
        
        S->>B: 4. 주문 제출
        B->>B: 4.1 증권사 API 호출
        B-->>S: 주문 접수 완료
        
        Note over B: 체결 대기...
        
        B->>B: 4.2 체결 확인
        B->>M: 5. 포지션 업데이트
        M->>M: 5.1 컨테이너 밸런스 갱신
        
        M->>A: 6. 성과 계산 트리거
        A->>A: 6.1 수익률 계산
        A->>A: 6.2 리스크 지표 갱신
        
        A->>MO: 7. 메트릭 업데이트
        MO->>MO: 7.1 대시보드 갱신
        MO->>MO: 7.2 이상 탐지
        
        alt 이상 탐지 시
            MO->>MO: 알림 발송
        end
        
        S->>S: 8. 실행 완료 기록
    end

5. 리스크 관리 플로우

graph TB
    Start([주문 요청]) --> GetPosition[현재 포지션 조회]
    GetPosition --> CalcNewPosition[신규 포지션 계산]
    
    CalcNewPosition --> CheckBalance{잔고 충분?}
    CheckBalance -->|No| Reject1[주문 거부:<br/>잔고 부족]
    CheckBalance -->|Yes| CheckSize
    
    CheckSize{포지션 사이즈<br/>한도 내?}
    CheckSize -->|No| Reject2[주문 거부:<br/>사이즈 초과]
    CheckSize -->|Yes| CheckConcentration
    
    CheckConcentration{집중도<br/>한도 내?}
    CheckConcentration -->|No| Reject3[주문 거부:<br/>집중도 초과]
    CheckConcentration -->|Yes| CalcVaR
    
    CalcVaR[VaR 계산]
    CalcVaR --> CheckVaR{VaR<br/>한도 내?}
    CheckVaR -->|No| Warning1[경고 발생<br/>계속 진행]
    CheckVaR -->|Yes| CheckDrawdown
    
    Warning1 --> CheckDrawdown
    
    CheckDrawdown{최대 낙폭<br/>한도 내?}
    CheckDrawdown -->|No| Reject4[주문 거부:<br/>MDD 초과]
    CheckDrawdown -->|Yes| CheckLeverage
    
    CheckLeverage{레버리지<br/>한도 내?}
    CheckLeverage -->|No| Reject5[주문 거부:<br/>레버리지 초과]
    CheckLeverage -->|Yes| Approve
    
    Approve([검증 통과:<br/>주문 실행])
    
    Reject1 --> Log[리스크 로그 기록]
    Reject2 --> Log
    Reject3 --> Log
    Reject4 --> Log
    Reject5 --> Log
    
    Approve --> ExecuteOrder[주문 제출]
    ExecuteOrder --> Monitor[실시간 모니터링]
    
    Monitor --> CheckStop{손절/익절<br/>조건 충족?}
    CheckStop -->|Yes| AutoClose[자동 청산]
    CheckStop -->|No| Monitor
    
    style Start fill:#4CAF50,color:#fff
    style Approve fill:#4CAF50,color:#fff
    style Reject1 fill:#F44336,color:#fff
    style Reject2 fill:#F44336,color:#fff
    style Reject3 fill:#F44336,color:#fff
    style Reject4 fill:#F44336,color:#fff
    style Reject5 fill:#F44336,color:#fff
    style Warning1 fill:#FF9800,color:#fff

6. 데이터 흐름도

graph LR
    subgraph "External Sources"
        Broker[증권사 API]
        YahooAPI[Yahoo Finance]
        AlphaAPI[Alpha Vantage]
    end
    
    subgraph "Data Collection"
        Collector[Data Collector]
        RealTime[Real-time Stream]
        Historical[Historical Fetch]
    end
    
    subgraph "Data Processing"
        Validator[Data Validator]
        Adjuster[Corporate Action Adjuster]
        QualityCheck[Quality Check]
    end
    
    subgraph "Storage"
        Cache[(Redis Cache<br/>실시간 시세)]
        TimeSeries[(Time Series DB<br/>과거 데이터)]
        Metadata[(Metadata DB<br/>종목 정보)]
    end
    
    subgraph "Consumers"
        Strategy[Strategy Engine]
        Backtest[Backtest Engine]
        Analytics[Analytics]
        Monitor[Monitor]
    end
    
    Broker --> RealTime
    YahooAPI --> Historical
    AlphaAPI --> Historical
    
    RealTime --> Collector
    Historical --> Collector
    
    Collector --> Validator
    Validator --> QualityCheck
    QualityCheck -->|Pass| Adjuster
    QualityCheck -->|Fail| Alert[Quality Alert]
    
    Adjuster --> Cache
    Adjuster --> TimeSeries
    Adjuster --> Metadata
    
    Cache --> Strategy
    Cache --> Monitor
    
    TimeSeries --> Backtest
    TimeSeries --> Analytics
    
    Metadata --> Strategy
    
    style Cache fill:#FF6B6B,color:#fff
    style TimeSeries fill:#4ECDC4,color:#fff
    style Metadata fill:#45B7D1,color:#fff

7. 컨테이너 생명주기

stateDiagram-v2
    [*] --> Created: createContainer()
    
    Created --> Active: activate()
    Created --> [*]: delete()
    
    Active --> Running: scheduler trigger
    Active --> Paused: pause()
    Active --> [*]: delete()
    
    Running --> Active: execution complete
    Running --> Error: execution failed
    Running --> Paused: emergency stop
    
    Paused --> Active: resume()
    Paused --> [*]: delete()
    
    Error --> Active: resolve & restart
    Error --> Paused: manual intervention
    Error --> [*]: delete()
    
    state Running {
        [*] --> GenerateSignals
        GenerateSignals --> RiskCheck
        RiskCheck --> PlaceOrders: pass
        RiskCheck --> [*]: fail
        PlaceOrders --> AwaitFill
        AwaitFill --> UpdatePosition
        UpdatePosition --> [*]
    }

8. 승인 워크플로우

graph TB
    Trigger[스케줄 트리거] --> GenerateSignals[신호 생성]
    GenerateSignals --> RiskCheck[리스크 체크]
    
    RiskCheck --> CheckMode{실행 모드}
    
    CheckMode -->|AUTO| AutoExecute[자동 실행]
    CheckMode -->|APPROVAL| CreateRequest
    
    CreateRequest[승인 요청 생성]
    CreateRequest --> SendNotification[알림 발송]
    SendNotification --> WaitApproval[승인 대기]
    
    WaitApproval --> CheckTimeout{타임아웃?}
    CheckTimeout -->|Yes| Expired[요청 만료]
    CheckTimeout -->|No| WaitApproval
    
    WaitApproval --> UserDecision{사용자 결정}
    
    UserDecision -->|승인| Execute[주문 실행]
    UserDecision -->|거부| Rejected[실행 거부]
    
    AutoExecute --> Execute
    
    Execute --> PlaceOrders[주문 제출]
    PlaceOrders --> Success{성공?}
    
    Success -->|Yes| NotifySuccess[성공 알림]
    Success -->|No| NotifyFail[실패 알림]
    
    Rejected --> LogRejection[거부 로그]
    Expired --> LogExpired[만료 로그]
    
    NotifySuccess --> End([완료])
    NotifyFail --> End
    LogRejection --> End
    LogExpired --> End
    
    style Execute fill:#4CAF50,color:#fff
    style Rejected fill:#F44336,color:#fff
    style Expired fill:#FF9800,color:#fff
    style AutoExecute fill:#2196F3,color:#fff

9. 모니터링 & 알림 시스템

graph TB
    subgraph "Data Sources"
        Positions[포지션 데이터]
        Orders[주문 데이터]
        PnL[손익 데이터]
        System[시스템 메트릭]
    end
    
    subgraph "Monitoring Engine"
        Collector[Metrics Collector]
        Anomaly[Anomaly Detector]
        Health[Health Checker]
        Rules[Alert Rules Engine]
    end
    
    subgraph "Alert Processing"
        Evaluator[Alert Evaluator]
        Throttle[Throttle Manager]
        Router[Channel Router]
    end
    
    subgraph "Notification Channels"
        Email[Email]
        SMS[SMS]
        Push[Push Notification]
        Slack[Slack]
    end
    
    subgraph "Storage & Dashboard"
        Metrics[(Metrics DB)]
        Dashboard[Real-time Dashboard]
        History[Alert History]
    end
    
    Positions --> Collector
    Orders --> Collector
    PnL --> Collector
    System --> Collector
    
    Collector --> Anomaly
    Collector --> Health
    Collector --> Rules
    Collector --> Metrics
    
    Anomaly --> Evaluator
    Health --> Evaluator
    Rules --> Evaluator
    
    Evaluator --> Throttle
    Throttle --> Router
    
    Router --> Email
    Router --> SMS
    Router --> Push
    Router --> Slack
    
    Evaluator --> History
    Metrics --> Dashboard
    
    style Anomaly fill:#F44336,color:#fff
    style Health fill:#4CAF50,color:#fff
    style Rules fill:#FF9800,color:#fff

10. Simulation 환경 구조

graph TB
    subgraph "Real Environment"
        RealAccount[실제 계좌]
        RealBroker[증권사 API]
        RealData[실시간 시세]
    end
    
    subgraph "Simulation Environment"
        PaperAccount[가상 계좌]
        
        subgraph "Simulation Engine"
            OrderSim[주문 시뮬레이터]
            FillSim[체결 시뮬레이터]
            Slippage[슬리피지 모델]
            Commission[수수료 계산]
        end
        
        subgraph "Test Scenarios"
            Historical[과거 데이터 리플레이]
            MonteCarlo[몬테카를로 시뮬레이션]
            Stress[스트레스 테스트]
        end
    end
    
    subgraph "Shared Components"
        Strategy[전략 엔진]
        Risk[리스크 관리]
        Analytics[성과 분석]
    end
    
    RealData --> Historical
    RealData --> OrderSim
    
    Strategy --> OrderSim
    Strategy --> RealBroker
    
    OrderSim --> FillSim
    FillSim --> Slippage
    Slippage --> Commission
    Commission --> PaperAccount
    
    Historical --> MonteCarlo
    Historical --> Stress
    
    PaperAccount --> Analytics
    RealAccount --> Analytics
    
    Risk --> OrderSim
    Risk --> RealBroker
    
    Analytics --> Validation{검증 통과?}
    Validation -->|Yes| Promote[실계좌 전환]
    Validation -->|No| Refine[전략 개선]
    
    Promote --> RealAccount
    Refine --> Strategy
    
    style PaperAccount fill:#FFF9C4
    style RealAccount fill:#C8E6C9
    style Validation fill:#FF9800,color:#fff