[STK4-05] 가격 배치 조회 API
작업 내용 (설계 의도)
변경 사항
현재가 REST 스냅샷 API(GET /api/v1/stocks/prices?symbols=)와 SSE 스트리밍 API(GET /api/v1/stocks/prices/stream)를 구현한다. REST 스냅샷은 페이지 마운트 시 SSE 첫 이벤트 전 공백을 채우는 용도다. SSE 엔드포인트는 SseEmitterRegistry에 emitter를 등록하고 연결을 유지한다.
선행: STK4-03
다이어그램
처리 흐름
sequenceDiagram participant FE as FE participant Ctrl as StockApiController participant UC as GetStockPricesUseCase participant Cache as StockPriceCacheRepository participant Registry as SseEmitterRegistry FE->>Ctrl: GET /api/v1/stocks/prices?symbols=005930,035720 Ctrl->>UC: execute(symbols) UC->>Cache: findBySymbols(symbols) Cache-->>UC: List<StockPriceCache> UC-->>Ctrl: List<StockPriceResponse> Ctrl-->>FE: 200 [{symbol, lastPrice, changeRate, updatedAt}] FE->>Ctrl: GET /api/v1/stocks/prices/stream Ctrl->>Registry: register(emitter) Ctrl-->>FE: SseEmitter 연결 수립
클래스 의존
flowchart LR StockApiController --> GetStockPricesUseCase StockApiController --> SseEmitterRegistry GetStockPricesUseCase --> StockDomainService
테스트 케이스
GET /api/v1/stocks/prices?symbols=005930호출 시 캐시 데이터를 반환한다- 캐시에 없는 심볼이 포함된 배치 요청 시 해당 심볼은 빈 값으로 처리된다
GET /api/v1/stocks/prices/stream연결 후 스케줄러 실행 시 SSE 이벤트가 수신된다- FE가 연결을 끊으면
SseEmitterRegistry에서 emitter가 제거된다 - SSE 연결이 없는 상태에서 스케줄러 실행 시 오류 없이 동작한다