[BE-16] Controller·스케줄러 통합 배선
작업 내용 (설계 의도)
변경 사항
공통 파일을 수정하는 유일한 티켓이다 — 마지막 wave에 단독 배치해 머지 충돌을 원천 차단한다.
AutoTradingApiController—GET /api/v1/autotrading/status·GET /api/v1/autotrading/proposals·POST /api/v1/autotrading/proposals/{id}/approve·POST .../reject·POST /api/v1/autotrading/kill-switch. 전부 신규 경로라 기존 API 계약과 충돌하지 않는다.- 스케줄러 2종 — 장중 사이클, 장 마감 후 정산·단계평가
application.yml— 사이클 cron·비용 파라미터(수수료율·거래세율·슬리피지율) 추가
보안: 주문 실행 API는 인증 없이 노출하지 않는다. 킬 스위치와 live 전환은 별도 인증을 요구한다(PRD 보안 요구사항).
스케줄러는 @ConditionalOnProperty로 빈을 토글하지 않는다 — 무조건 등록하고, 실행 여부는 정책 행의 킬 스위치·모드 조회로 런타임에 분기한다(no-conditional-on-property).
롤백: 스케줄러가 등록돼도 킬 스위치를 켜면 아무 주문도 나가지 않는다. 재배포 없이 정지 가능하다.
의존
- BE-13, BE-14, BE-15
다이어그램
처리 흐름
sequenceDiagram participant Sch as AutoTradingCycleScheduler participant UC as RunAutoTradingCycleUseCase participant User as 사용자 participant Api as AutoTradingApiController Sch->>UC: execute(오늘) User->>Api: POST /kill-switch Api->>UC: ToggleKillSwitchUseCase
클래스 의존
flowchart LR Api[AutoTradingApiController] --> Approve[ApproveOrderProposalUseCase] Api --> Kill[ToggleKillSwitchUseCase] Api --> Status[GetAutoTradingStatusUseCase] CycleSch[AutoTradingCycleScheduler] --> Cycle[RunAutoTradingCycleUseCase] SettleSch[AutoTradingSettlementScheduler] --> Settle[SettleTradingDayUseCase] SettleSch --> Eval[EvaluateRiskTierUseCase]
테스트 케이스
- 상태 조회 API가 모드·단계·킬스위치·한도 소진율을 반환한다.
- 킬 스위치 API가 인증 없이 호출되면 거부된다(보안).
- 존재하지 않는 제안 ID로 승인하면 404를 반환한다.
- 스케줄러가 정책의 킬 스위치가 켜진 상태에서는 사이클을 실행하지 않는다.
- 스케줄러 빈이 프로퍼티와 무관하게 항상 등록된다(no-conditional-on-property 검증).