1. PaymentOrchestrator 흐름


핵심 목표

대용량 선착순 트래픽 상황에서도 데이터 정합성이 지켜져야 하며, 최대한의 재고 회전율을 보장해야 한다.

  1. 준비
  2. 외부 client request
  3. 저장

2. 왜 PAYMENT_IN_PROGRESS 상태를 추가했는가?


기존 세 가지 OrderStatus PENDING, CANCELLED, PAID 에서 왜 PENDINGPAID로 가지 않고 PAYMENT_IN_PROGRESS 를 추가해주었을까?

Why

  1. 중복 결제(따닥) 위험 방지 : 낙관적 락 역할

    상태 변경 그 자체를 논리적인 락으로 사용하여 동시성 문제를 데이터베이스 레벨에서 해결한다.

  2. 명확한 의도와 구분

    비즈니스 관점에서 사용자의 의도를 파악하는 데에 도움이 되고, 각각 두 상태가 갖는 의미를 다르게 해석하여, 이에 맞는 만료 시간 및 그에 따른 스케줄링 정책 등을 비즈니스 적으로 다르게 가져갈 수 있다.

3. 왜 JPA 낙관락(@Version) 사용은 안했는지?


위에서 낙관적 락 역할로서 조건부 update 문을 명시적으로 사용했다. 낙관적 락 역할이면 JPA 에 이미 @Version 을 사용할 수 있을텐데 왜 사용하지 않았을까?

Why