[BE-41] 수집 v2 설정·scheduler 통합·릴리즈 검증

작업 내용 (설계 의도)

변경 사항

공통 application.yml budget/lease/tick 설정, runtime feature flag, BE-34 최소 trigger의 cron/config wiring, 모든 adapter wiring을 마지막에 통합한다. 기존 00:00/00:10 legacy 수집 scheduler와 v2 dispatcher가 동시에 외부 호출하지 않도록 release 순서를 코드/운영 절차로 검증한다. 09:00 SLA capture/MISSED 기록이 notification dispatch보다 먼저 끝나는 ordering을 실제 scheduler 구성으로 보장한다. 09:00 이전 미종료 cycle을 operations summary/log metric으로 표면화한다. 롤백은 flag OFF, lease expiry 확인, 다음 KST 일자의 legacy 재개다.

의존

  • BE-34
  • BE-35
  • BE-36
  • BE-37
  • BE-38
  • BE-39
  • BE-40
  • BE-42
  • BE-43

다이어그램

처리 흐름

sequenceDiagram
    participant O as Operator
    participant F as Feature Flag
    participant S as Scheduler
    participant D as Dispatcher
    O->>F: enable v2 after legacy disabled
    S->>D: each minute tick
    D-->>S: progress metrics
    O->>F: disable on incident

클래스 의존

flowchart LR
    SchedulingConfig --> DispatcherScheduler
    DispatcherScheduler --> CollectionDispatchUseCase
    CollectionDispatchUseCase --> FeatureFlagGateway
    OperationAPI --> CollectionSummary

테스트 케이스

  • v2 ON 상태에서 legacy collection scheduler는 외부 수집을 시작하지 않는다.
  • v2 OFF 상태에서 기존 scheduler와 기존 결과 API가 동작한다.
  • 동일 source를 두 application context가 동시에 tick해도 하루 cycle은 하나만 claim한다.
  • 2,594건 fixture는 slice/daily budget을 넘지 않고 09:00 이전 상태를 summary에 남긴다.
  • 모든 source adapter의 request delay, UA, whitelist, page-size 상한 regression test가 통과한다.
  • 09:00에는 SLA capture 또는 MISSED 기록이 notification dispatch보다 먼저 단 한 번 완료된다.
  • legacy collection scheduler와 v2 dispatcher scheduler가 같은 활성 source에 동시 HTTP를 발행하지 않는다.