STK11-01 aggregator 스냅샷 게이트웨이·BE RestClient

작업 내용 (설계 의도)

변경 사항

aggregator가 backend 스냅샷 API(PUT/GET /signal-snapshots/{symbol}, /recommendation-snapshots/default)를 호출하는 영속화 포트를 신설한다. STK11-02(읽기)·STK11-03(쓰기)이 공통으로 의존하는 선행 병목 계약이다.

  • domain: SnapshotGateway 인터페이스
    • findSignal(symbol): SignalResult? / saveSignal(symbol, SignalResult)
    • findRecommendations(): RecommendationResult? / saveRecommendations(RecommendationResult)
  • infrastructure: BackendSnapshotGatewayImplbe.base-url RestClient로 backend 호출. aggregator SignalResult/RecommendationResult ↔ JSON(opaque) 직렬화/역직렬화. 404는 null(miss)로, 5xx는 예외로 매핑
  • infrastructure/config: BackendClientConfigaggregator.be.base-url(application.yml에 이미 존재) 기반 RestClient bean. 미사용 상태였던 설정을 활성화

backend·ML 무변경. 신규 테이블 없음.

다이어그램

클래스 의존

flowchart LR
    SnapGW[SnapshotGateway 인터페이스] 
    Impl[BackendSnapshotGatewayImpl]
    Client[RestClient be.base-url]
    BE[backend snapshot API]
    Impl -.->|implements| SnapGW
    Impl --> Client
    Client --> BE

테스트 케이스

  • saveSignalfindSignal 라운드트립 시 동일 SignalResult로 복원된다 (MockWebServer 통합)
  • backend가 404 반환 시 findSignalnull을 반환한다
  • backend가 5xx 반환 시 게이트웨이 예외를 던진다
  • saveRecommendationsfindRecommendations 라운드트립 정합성
  • recommendation-snapshots/default 미존재(404) 시 findRecommendationsnull
  • RestClientbe.base-url 설정값으로 요청 URL을 구성한다