transaction

트랜잭션은 여러 변경을 하나의 성공/실패 단위로 묶는다

주문 처리처럼 재고 감소, 주문 생성, 결제 기록이 함께 움직이는 작업은 부분 성공을 남기면 데이터 정합성이 깨진다.

원칙: 모두 성공하면 Commit, 하나라도 실패하면 Rollback중간 상태를 DB에 남기지 않는 것이 목적이다.

하나의 트랜잭션으로 묶는 작업

1재고 감소

상품 수량을 줄인다.

2주문 생성

주문과 주문 항목을 저장한다.

3결제 기록

결제 결과를 저장한다.

4결과 확정

모두 성공하면 커밋하고 실패하면 되돌린다.

결과 판정

CommitCommit

세 작업이 모두 성공하면 변경을 함께 확정한다.

RollbackRollback

하나라도 실패하면 이미 수행된 DB 변경까지 원래 상태로 되돌린다.

설계 주의설계 주의

결제 승인 같은 외부 부작용은 트랜잭션 안팎 경계를 따로 설계한다.