하나의 비즈니스 작업이 여러 DB를 동시에 바꿉니다.
주문 DB
주문 레코드 생성 예정
결제 DB
승인 레코드 반영 예정
트랜잭션은 하나처럼 보이지만, 실제 변경은 서비스별 로컬 DB에 흩어져 있습니다.
2PC는 여러 데이터베이스가 따로 놀지 않게, 함께 준비한 뒤 같은 결과를 적용하도록 묶는 방식입니다.
트랜잭션은 하나처럼 보이지만, 실제 변경은 서비스별 로컬 DB에 흩어져 있습니다.
주문 상태를 쓸 준비를 마치고, 잠금을 유지한 채 응답합니다.
결제 기록을 반영할 수 있는지 검사한 뒤, YES 또는 NO를 반환합니다.
주문 DB도 commit, 결제 DB도 commit. 분산된 변경이 하나의 성공 결과로 맞춰집니다.
한 참여자라도 NO면 모두 되돌립니다. 부분 성공 상태를 남기지 않는 것이 핵심입니다.
2PC는 각 DB가 제각각 commit하는 방식이 아니라, 함께 준비하고 함께 확정해서 일관성을 지키는 구조입니다. 대신 Prepare 이후에는 대기와 잠금이 생깁니다.