알림 개발을 하면서 FCM을 사용했는데, 한 가지 질문을 마주했다. DB에 알림을 저장하는 것과 실제 외부API로 알림을 발송하는 것이 원자적으로 동작하는가? 알림 발송이 내부 동작이라면 트랜잭션으로 원자적으로 묶을 수 있다. 알림 발송이 실패하더라도 롤백되기 때문에 정합성이 보장되는데, 실제 알림 발송은 외부 시스템을 사용하기 때문에 이 방식으로는 원자성을 보장할 수 없다. 여기서 나온 패턴이 바로 아웃박스 패턴이다. 해당 게시글에서 이 아웃박스 패턴에 대해 정리해보려고 한다. 문제상황 실제 알림을 발송하는 상황을 예로 들어 살펴보자.@Transactionalpublic void createOrder(OrderRequest request) { Order order = orderRepository..