ORDER TRANSACTION

주문 트랜잭션 처리

주문 처리 중 재고 감소, 주문 생성, 주문 항목과 결제 기록 저장이 모두 성공하면 commit, 어느 지점에서든 실패하면 rollback으로 되돌립니다.

모든 쓰기가 성공해야 commit, 어느 지점에서든 실패하면 rollback request 주문 요청 begin 트랜잭션 열기 write set 재고/주문/결제 commit 확정 rollback F1/F2/F3 실패는 발생 위치만 다르고 결과는 모두 부분 쓰기 제거로 수렴한다.

요청 레인

client
POST /orders

사용자, 상품, 수량, 결제 정보를 서비스로 전달합니다.

성공 응답

commit 이후 주문 번호와 결제 기록을 반환합니다.

실패 응답

품절, 결제 기록 실패 등 원인을 사용자 응답으로 매핑합니다.

서비스 트랜잭션 레인

tx
1
begin

같은 manager 또는 tx client로 처리 범위를 엽니다.

2
재고 감소

상품을 잠그거나 확인한 뒤 수량을 차감합니다.

3
주문 생성

주문 헤더를 만들고 사용자와 결제 기준 정보를 연결합니다.

4
항목 및 결제 기록

주문 항목과 결제 기록까지 저장되어야 성공입니다.

5
commit 또는 rollback

예외가 없으면 확정하고, 예외가 있으면 전체 변경을 취소합니다.

데이터베이스 레인

db
products.stock

차감된 재고는 commit 전까지 트랜잭션 안의 변경입니다.

orders

주문 헤더가 생성되어도 후속 단계 실패 시 남기지 않습니다.

order_items / payments

항목과 결제 기록까지 맞아야 데이터 정합성이 유지됩니다.

중간 쓰기는 임시 상태이고, 최종 결과는 하나만 남는다

임시 쓰기 -> 취소/확정
BEGIN 트랜잭션 안에서만 보이는 변경

재고 차감과 주문 생성은 아직 확정된 데이터가 아닙니다.

WRITE SET products, orders, payments 묶음

한 단계라도 실패하면 앞 단계 성공도 함께 취소 대상이 됩니다.

ROLLBACK 부분 쓰기를 남기지 않음

재고만 줄거나 주문 헤더만 남는 어긋난 상태를 제거합니다.

COMMIT 모든 테이블이 같은 주문을 가리킴

재고, 주문, 항목, 결제가 하나의 성공 결과로 확정됩니다.

F1 재고 감소 실패

품절이거나 동시 주문으로 차감할 수 없으면 주문을 만들지 않고 rollback합니다.

F2 주문 생성 실패

주문 저장 중 제약 조건이 깨지면 앞에서 줄인 재고도 함께 되돌립니다.

F3 항목·결제 기록 실패

마지막 기록 단계에서 실패해도 재고와 주문 헤더를 모두 취소합니다.

OK 모든 쓰기 성공

재고, 주문, 항목, 결제 기록을 하나의 성공 결과로 commit합니다.