스프링 이벤트를 발행하여 트랜잭션과 관심사 분리하기
·
Backend/Spring Boot
Introduce 내가 개발중인 서비스에서 특정 상품을 결제하면 FCM을 통해 결제한 유저에게 알림을 전송하는 비즈니스 로직이 있다.결제 내역을 바탕으로 사용자에게 알림을 전송해야 함으로 결제 처리와 알림 전송이 같은 트랜잭션에 묶이게 된다. 현재 비즈니스 로직의 흐름을 살펴보면 1. 사용자가 상품을 주문한다.2. 상품을 조회하고, 결제를 진행한다.3. 재고를 차감하고, 결제 내역을 저장한다.4. 결제가 완료되면 사용자에게 FCM을 전송하고, 알림내역을 저장한다. 다음과 같은 순서로 동작한다. 그리고 다음 로직들은 같은 트랜잭션으로 묶여있다. 결제는 외부 API를 통해 이루어진다. 그러므로 우리 서비스의 트랜잭션과는 무관하다.그런데 만약 FCM 알림 저장 과정에서 예외가 발생하면, 전체 트랜잭션이 롤백..