🎟️ 결제 실패 보상 이벤트 유실 방지하기 - Outbox 패턴 적용기
·
프로젝트/공연 티켓팅 프로젝트
배경콘서트 티켓 예매 시스템 TicketFlow는 대기열 기반의 예매 흐름을 갖습니다.사용자 진입 → Redis 대기열(Queue) → 입장권 발급 → 예매(Booking) 생성 → 결제(Payment)초기 구현에서 결제는 항상 성공하는 단순한 구조였습니다. 그러다 결제 실패 시나리오를 추가하면서 자연스럽게 설계 질문이 생겼습니다.결제가 실패하면 앞 단계에서 점유한 자원을 어떻게 되돌릴 것인가?결제 실패 시 되돌려야 할 자원은 두 가지였습니다.Booking 상태: PENDING_PAYMENT -> CANCELLED좌석 복구: 차감된 bookedCount 원상복귀, SOLD_OUT이었다면 OPEN으로 전환가장 단순한 방법은 결제 실패 시점에 바로 보상 메서드를 호출하는 것이었습니다.if (shouldFai..