[BE-09] 자동매매 Discord 알림 어댑터

작업 내용 (설계 의도)

변경 사항

AutoTradingAlertGateway 구현체를 만든다. 기존 DiscordMarketFlowAlertGateway·DiscordNotificationGateway 패턴을 따라 autotrading/infrastructure/notification/에 둔다.

알림 대상은 PRD “Operations” 표를 따른다 — 자동 체결·승인 대기·손절 발동·일일 한도 80% 사전 경고·한도 도달 중단·킬 스위치 작동·단계 승강급은 stock-alert, 주문 실패·상태 확인 불가·서킷 오픈은 error-alert.

메시지에 계좌번호·토큰을 넣지 않는다(PRD 보안 요구사항). 알림 실패가 집행을 막지 않도록 best-effort로 처리하되, 실패 자체는 로그로 남긴다.

의존

  • BE-01 (도메인 계약 — AutoTradingAlertGateway)

다이어그램

처리 흐름

sequenceDiagram
    participant Svc as AutoTradingDomainService
    participant Gw as DiscordAutoTradingAlertGateway
    participant Discord as Discord Webhook
    Svc->>Gw: notifyExecuted(fill)
    Gw->>Discord: stock-alert 전송
    Gw-->>Svc: 실패해도 예외를 전파하지 않음

클래스 의존

flowchart LR
    Iface[AutoTradingAlertGateway] -.->|implements| Impl[DiscordAutoTradingAlertGateway]
    Impl --> Webhook[Discord Webhook Client]

테스트 케이스

  • 체결 알림이 종목·수량·체결가·손절가를 포함해 전송된다.
  • 일일 한도 80% 도달 시 사전 경고가 전송된다(경계값).
  • 주문 실패 알림이 error-alert 채널로 전송된다.
  • 계좌번호가 메시지 본문에 포함되지 않는다(보안).
  • Discord 전송이 실패해도 예외를 전파하지 않는다(best-effort).