Order Transaction

재고, 주문, 결제 기록은 하나의 성공/실패 단위다

주문 처리에서는 마지막 쓰기까지 성공해야 commit한다. 중간에 실패하면 이미 줄인 재고와 생성한 주문도 함께 rollback한다.

01 Request 주문 요청 수신 상품, 수량, 결제 정보를 검증한다.
02 Begin tx client 확보 이후 쓰기를 같은 DB 연결과 트랜잭션에 묶는다.
03 Write 재고·주문·결제 기록 한 단계라도 실패하면 확정하지 않는다.
04 Decide commit 또는 rollback 모든 쓰기 성공이면 commit, 예외면 rollback한다.
05 Response 확정된 결과만 응답 부분 주문 번호나 결제 흔적을 남기지 않는다.
실패 지점 되돌릴 대상 응답 기준
재고 감소 실패 주문과 결제 기록을 만들지 않는다. 품절 또는 수량 부족으로 실패한다.
주문 생성 실패 이미 줄인 재고를 rollback한다. 부분 주문 번호를 노출하지 않는다.
결제 기록 실패 재고, 주문, 항목 기록을 모두 되돌린다. 결제 실패 사유만 매핑한다.

원칙: 외부 호출은 트랜잭션 밖에 두고, 같은 tx client를 끝까지 전달한다.