ADR-DS-020_슬롯 수량 및 동시성 SoT

ADR-DS-020_슬롯 수량 및 동시성 SoT

ADR-DS-020 슬롯 수량 및 동시성 SoT

1. Metadata

  • ADR ID: ADR-DS-020
  • Title: Slot Quantity and Concurrency Source of Truth
  • Status: draft
  • Date: 2026-03-08
  • Owner: YSY
  • Related ADRs: ADR-DS-000, ADR-DS-010, ADR-DS-030
  • Supersedes:
  • Superseded By:

2. Context

슬롯 가용 수량 계산 기준이 분산되면 경합 상황에서 과점유와 표시 불일치가 발생한다.

3. Decision

슬롯 가용 수량 계산의 SoT를 서버로 고정한다.

  1. 가용 수량 계산: total_quantity - active_hold - active_reserved
  2. active_hold: reservation_holds.status='active' and expires_at > now()
  3. active_reserved: reservations.status='reserved' and (expires_at is null or expires_at > now())
  4. 가용 수량은 0 미만으로 내려가지 않도록 greatest(..., 0) 적용
  5. 앱은 계산 결과를 표시만 하고 자체 계산으로 확정하지 않는다.

4. Consequences / Impact

  1. 경합 상황에서 초과 점유를 줄일 수 있다.
  2. 앱/서버 수량 불일치를 줄일 수 있다.
  3. 수량 집계 기준 변경 시 DB 함수와 배치 로직 동시 수정이 필요하다.

5. Validation

  • 같은 시점 요청에서 가용 수량이 일관되게 계산된다.
  • hold 만료 후 가용 수량이 자동 복구된다.
  • reserved 전환 후 가용 수량이 감소 상태를 유지한다.