Backend

Spring - TransactionalEventListener

GOMJ 2024. 10. 20. 23:48

관리자 페이지를 구현하면서 회원가입이나, 회원탈퇴등 특정 이벤트마다 메일 템플릿을 구현하여 발송하는 작업을 해야했다.

 

이를 어떻게 처리할까 하다가 우선 AOP에 대해 알아보다가 이벤트 방식으로 처리가 가능하다는것을 알게 되었다.

 

TransactionalEventListener과 Async를 동시에 사용하면 특정 이벤트의 트랜잭션이 커밋되고 난 후에 비동기 작업을 처리할 수 있다고 한다.

 

즉 현재 내가 필요한 작업은 회원가입 -> 축하 메일 발송이다.

 

메일 발송이 실패해도 회원가입은 롤백이 되면 안된다는걸 중점에 두고 개발을 했다.

 

@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, classes = UserRegisteredEvent.class)

 

해당 코드를 보면 phase TransactionPhase.AFTER_COMMIT이 있다.

 

즉 트랜잭션이 종료된 시점에 작동하므로 회원가입에 영향을 끼치지 않고 메일을 발송할 수 있게 된다.