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:
BackendSnapshotGatewayImpl—be.base-urlRestClient로 backend 호출. aggregatorSignalResult/RecommendationResult↔ JSON(opaque) 직렬화/역직렬화. 404는null(miss)로, 5xx는 예외로 매핑 - infrastructure/config:
BackendClientConfig—aggregator.be.base-url(application.yml에 이미 존재) 기반RestClientbean. 미사용 상태였던 설정을 활성화
backend·ML 무변경. 신규 테이블 없음.
다이어그램
클래스 의존
flowchart LR SnapGW[SnapshotGateway 인터페이스] Impl[BackendSnapshotGatewayImpl] Client[RestClient be.base-url] BE[backend snapshot API] Impl -.->|implements| SnapGW Impl --> Client Client --> BE
테스트 케이스
saveSignal→findSignal라운드트립 시 동일SignalResult로 복원된다 (MockWebServer 통합)- backend가 404 반환 시
findSignal은null을 반환한다 - backend가 5xx 반환 시 게이트웨이 예외를 던진다
saveRecommendations→findRecommendations라운드트립 정합성recommendation-snapshots/default미존재(404) 시findRecommendations는nullRestClient가be.base-url설정값으로 요청 URL을 구성한다