목록 보기
@TransactionalEventListener는 왜 조용히 무시될까
백엔드

@TransactionalEventListener는 왜 조용히 무시될까

flex
flex
2026년 9월 15일

두줄요약

`@TransactionalEventListener`는 커밋 이후 실행이 아니라 트랜잭션이 있을 때만 등록됩니다. 트랜잭션 밖 발행 누락은 `fallbackExecution`과 발행 지점의 트랜잭션 검사를 성격에 맞게 선택해야 합니다.

문제 상황

  • @TransactionalEventListener 사용 시 이벤트가 예외 없이 조용히 사라지는 현상
  • 저장 경로에 따라 색인 갱신 리스너가 실행되기도 하고 누락되기도 하는 차이

원인 분석

  • 커밋 이후 실행이 아니라 활성 트랜잭션이 있을 때만 등록되는 계약
  • 트랜잭션 밖에서 이벤트를 발행하면 리스너가 등록되지 않고 무시됨

해결 방법

  • 멱등한 부수효과에는 fallbackExecution = true로 트랜잭션 밖 경로도 즉시 실행
  • 커밋 상태에 의존하는 리스너는 발행 지점에서 트랜잭션 활성 여부를 검사해 위반을 조기 노출

다음 읽기

#transaction 주제를 다룬 다른 회사 글

기능 테스트 전환 이야기

기능 테스트로 전환한 배경과 통합 테스트의 한계를 설명한 글입니다. Hibernate와 Spring 이벤트 처리로 인한 실제 버그 사례를 통해 전환 이유를 정리했습니다.

spoqa
spoqa
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...