Transactional Outbox Pattern: 이벤트를 절대 잃지 않는 방법(부재: At-least-once)
·
Pattern
외부 API를 호출하거나 다른 모듈에 이벤트를 전달할 때, 이런 고민을 해본 적 있을 것이다.DB에는 저장됐는데 이벤트 전달이 실패하면 어떻게 하지? 반대로 이벤트는 나갔는데 DB가 롤백되면? Outbox 패턴은 이 두 가지 불안을 동시에 해결하는 방법이다.1. 왜 이 패턴이 필요한가우리가 흔히 작성하는 코드@Transactionalfun placeOrder(request: OrderRequest) { val order = orderRepository.save(Order(request)) // DB 저장 paymentGateway.charge(order) // 외부 결제 API 호출}코드 자체는 문제없어 보인다. 그런데 실제 운영 환경에서는 이런 상황이 ..