둘 중 하나만 저장되면 실제 돈의 흐름과 DB 상태가 어긋난다.
돈, 재고, 좌석처럼 실제 세계의 수량이나 소유권을 직접 바꾸는 작업은 잠깐의 중간 상태도 문제를 만든다. 이때는 처리 속도보다 잘못된 상태를 아예 보이지 않게 하는 것이 우선이다.
두 계좌의 합계가 항상 보존되어야 한다.
둘 중 하나만 저장되면 실제 돈의 흐름과 DB 상태가 어긋난다.
잔액 조회 순간마다 다른 진실이 보이면 신뢰를 잃는다.
트랜잭션이 둘을 묶어서 중간 상태 노출을 막는다.
동시에 결제 요청이 와도 남은 수량은 음수가 되면 안 된다.
차감보다 주문 확정이 먼저 보이면 초과 판매가 생긴다.
실제 창고보다 더 많이 판 상태가 되어 복구 비용이 커진다.
한 번에 한 주문만 최종 재고를 확정하게 만든다.
같은 좌석을 여러 사용자가 동시에 선택할 수 있다.
점유 표시가 늦으면 같은 좌석을 두 번 팔게 된다.
사후 환불보다 애초에 충돌을 막는 편이 훨씬 싸다.
한 좌석의 소유권을 단 하나의 커밋만 통과시킨다.