분산 트랜잭션은 두 개 이상의 네트워크로 연결된 시스템(데이터베이스, 메시지 큐 등)에 걸쳐 있는 트랜잭션을 의미한다.
핵심은 원자성을 보장하는 것이다. 즉, 모든 서비스의 작업이 성공하거나, 하나라도 실패하면 모두 이전 상태로 되돌려야 한다.
BettingStarted 이벤트를 발행한다.GameResultCalculated 이벤트를 발행한다.BettingFaild 이벤트를 보내 차감했던 금액을 다시 복구(보상 트랜잭션)한다.Tip: Kafka나 RabbitMQ와 같은 메시지 브로커를 활용하고, Transactional Outbox 패턴을 적용해 "DB 업데이트와 메시지 발행"이 원자적으로 일어나도록 설계하는 것이 정석이다.
분산 시스템의 핵심인 결합도 분리와 장애 전파 차단관점에서 위험 요소를 안고 있다.
betting 요청을 보냈는데, 유저 서버는 처리를 완료했지만 네트워크 이슈로 응답만 슬롯 서버에 전달되지 못한 경우유저 조회(GET) + 베팅 처리(POST)라는 최소 두 번의 네트워크 왕복이 발생한다