[BE-11] 정리 후보 탐지 스케줄러 (FR-14, P2)

작업 내용 (설계 의도)

변경 사항

90일 무변경 ACTIVE RELEASE 플래그를 정리 후보로 탐지·통지(FR-14, P2). 근거 TDD: ../TDD.md Observability. 노출 카운트(FR-13) 지표는 BE-06(EvaluatorImpl)에서 이미 집계 — 본 티켓은 정리 탐지만.

  • FeatureFlagCleanupScheduler (presentation, @Scheduled 일 1회): findAllActive 중 type=RELEASE이고 updated_at이 90일 이전인 플래그를 후보로 식별 → 옵저버빌리티 대시보드 또는 ⑥ 지능형 장애 알림 채널(source=feature-flag)로 통지. UseCase 경유.
  • DetectStaleFeatureFlagsUseCase (application) → DomainService 조회 위임(신규 조회 메서드 필요 시 추가).
  • 임계값(90일)은 상수/설정으로. 통지는 결과 미추적(fire-and-forget) 로그·메트릭.
  • 독립 파일이므로 wave 4 병렬 배치 가능.

의존

  • BE-02 (findAllActive), BE-04 (DomainService 조회) — 조회 메서드 재사용

다이어그램

클래스 의존

flowchart LR
    Scheduler["FeatureFlagCleanupScheduler"] --> UC["DetectStaleFeatureFlagsUseCase"]
    UC --> DS["FeatureFlagDomainService"]
    DS --> Repo["FeatureFlagRepository"]

테스트 케이스

  • 90일 이전 updated_at의 ACTIVE RELEASE 플래그가 후보로 식별된다
  • 90일 이내 변경된 RELEASE 플래그는 후보에서 제외된다
  • OPERATIONAL/EXPERIMENT/ENTITLEMENT는 정리 후보 대상이 아니다
  • ARCHIVED 플래그는 대상에서 제외된다
  • 후보가 0건이면 통지를 발생시키지 않는다