[BE-07] 변경 전파 연결 (AFTER_COMMIT 리스너 + PropagateUseCase)

작업 내용 (설계 의도)

변경 사항

관리 쓰기 커밋 후 캐시 갱신 + pub/sub 브로드캐스트를 트리거하는 연결부(FR-6). 근거 TDD: ../TDD.md Sequence(변경 전파). EventListener는 presentation, 전파는 UseCase 경유(컨벤션 준수).

  • FeatureFlagChangedEventListener (presentation, ~EventWorker.kt류): @TransactionalEventListener(phase = AFTER_COMMIT)FeatureFlagChangedEvent 수신 → PropagateFeatureFlagChangeUseCase.execute(key) 호출. 트랜잭션 커밋 후 실행이라 미커밋 상태 발행 방지.
  • PropagateFeatureFlagChangeUseCase (application): FeatureFlagDomainService.propagate(key) 위임(캐시 put + broadcast). @Transactional 불필요(읽기+외부 발행).
  • 롤백: 전파 실패는 SSOT 무영향(커밋 완료 상태). LocalStore @Scheduled 리프레시가 드리프트 수렴. 피처 관점 롤백은 플래그 자체를 archive/OFF.

의존

  • BE-04 (FeatureFlagDomainService.propagate·FeatureFlagChangedEvent)
  • (런타임) BE-03 (CacheStore·Broadcaster 구현 빈)

다이어그램

처리 흐름

sequenceDiagram
    participant D as DomainService(커밋)
    participant L as ChangedEventListener
    participant U as PropagateUseCase
    participant DS as DomainService
    D-->>L: FeatureFlagChangedEvent (AFTER_COMMIT)
    L->>U: execute(key)
    U->>DS: propagate(key)
    DS->>DS: cacheStore.put + broadcast

테스트 케이스

  • 플래그 생성 트랜잭션 커밋 후 리스너가 PropagateUseCase.execute를 호출한다
  • 트랜잭션 롤백 시 리스너가 전파를 트리거하지 않는다(AFTER_COMMIT)
  • PropagateUseCase.execute는 DomainService.propagate에 key를 위임한다
  • 아카이브 이벤트도 동일하게 전파가 트리거된다(상태 변경 전파 보장)