[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를 위임한다
- 아카이브 이벤트도 동일하게 전파가 트리거된다(상태 변경 전파 보장)