개요
Spring에서 Event를 사용하여 서비스간 의존성을 분리하였다.
TransactionalEventListener 에는 phase를 통하여 이벤트가 트랜잭션의 어느 시점에서 처리될지를 결정할 수 있었다.
각 phase에 대해 궁금해졌다.
1. BEFORE_COMMIT
BEFORE_COMMIT 은 트랜잭션이 커밋되기 직전에 이벤트를 처리한다.
특징
•
트랜잭션이 커밋되기 직전에 이벤트 리스너가 호출된다. 이 시점에서는 트랜잭션이 아직 활성화 상태이므로, 트랜잭션 내의 작업을 수행할 수 있다.
•
이벤트 리스너에서 예외가 발생하면 트랜잭션이 롤백된다. 따라서 커밋 전에 데이터의 상태를 검증하거나 조정하는 작업에 적합하다.
•
커밋이 발생하지 않으면 이 이벤트는 발생하지 않는다. 즉, 트랜잭션이 롤백되면 이 리스너는 호출되지 않는다. 커밋에 대한 의존성이 있다.
2. AFTER_COMMIT
AFTER_COMMIT 은 트랜잭션이 성공적으로 커밋된 후에 이벤트를 처리한다.
특징
•
트랜잭션이 성공적으로 커밋된 이후에 이벤트 리스너가 호출된다. 이 시점에는 트랜잭션이 이미 종료된 상황이다.
•
트랜잭션이 정상적으로 완료되었음을 보장할 수 있기 때문에 트랜잭션이 커밋된 이후에만 처리해야 하는 작업을 처리하면 된다.
•
BEFORE_COMMIT 과 마찬가지로 트랜잭션이 롤백되면 이벤트 리스너는 호출되지 않는다.