STK10-13 worker 서버 스캐폴드·이벤트 소비
작업 내용
신규 worker 서버(:8091, Spring Boot, Hexagonal)를 만들고 marketflow.collected.v1을 소비하는 진입점을 구현한다. 후행 도메인 재계산(STK10-14~16)이 공유하는 선행이다.
- 신규 모듈
worker/(build.gradle.kts, application, OTel Java agent 적용 — STK-OBS 자동계측) - presentation:
MarketFlowCollectedEventWorker—@KafkaListener(marketflow.collected.v1), DTO 직접 매핑 - consumer 설정:
JsonDeserializer+trusted.packages, 재시도 + DLQ(DefaultErrorHandler+ DeadLetterPublishingRecoverer) - 소비 시 도메인 Refresh UseCase를 호출하는 골격 (실제 재계산은 STK10-14~16)
be-code-convention 준수: Consumer는 presentation ~EventWorker.kt, UseCase 경유, Repository/DomainService 직접 호출 금지.
다이어그램
처리 흐름
sequenceDiagram participant Topic as collected.v1 participant EW as MarketFlowCollectedEventWorker participant UC as Refresh UseCases participant Dlq as DLQ Topic->>EW: consume(event) EW->>UC: refresh(baseDate) alt 성공 UC-->>EW: done else 재시도 초과 EW->>Dlq: 격리 end
클래스 의존
flowchart LR EW[MarketFlowCollectedEventWorker] --> UC[Refresh UseCases] EW --> ErrorHandler[DefaultErrorHandler] ErrorHandler --> Dlq[collected.v1.DLQ]
테스트 케이스
- worker가 collected.v1을 소비해 Refresh UseCase를 호출한다 (TestContainers Kafka)
- 이벤트 DTO가 JsonDeserializer로 매핑된다
- 처리 실패 시 재시도 후 DLQ로 격리된다
- 동일 이벤트 재수신 시 멱등하게 처리된다 (재계산이 덮어쓰기)
- worker 기동 시 OTel 자동계측으로 consumer lag이 노출된다