ADR-DS-061_결제 진행 중 슬롯 임시 확보 정책
1. 기본 정보
Conforms to: ADR-DS-000 v1 Effective from: ADR-DS-060+ If conflict: ADR-DS-000 wins. Deprecated terms in this scope:
arrived,checkin/check_in.
- ADR ID: ADR-DS-061
- 제목: 결제 진행 중 슬롯 임시 확보 정책
- 상태: Accepted
- 작성일: 2026-03-07
- 작성자: YSY
- 관련 ADR: ADR-DS-060 (선결제 기능 도입)
2. 배경 (Context)
플랫폼은 선결제 기반 슬롯 기능을 도입하였다.
선결제 구조에서는 다음 흐름이 발생한다.
슬롯 선택
→ 결제 진행
→ 결제 완료
→ 슬롯 사용그러나 결제는 일반적으로 10~40초 정도의 시간이 소요된다.
이 시간 동안 다음 문제가 발생할 수 있다.
문제 1 — 동시 확보 경쟁
슬롯 수량이 제한된 경우 여러 사용자가 동시에 슬롯을 선택할 수 있다.
예:
슬롯 수량 = 1동시에
사용자 A → 결제 시작
사용자 B → 결제 시작두 사용자 모두 결제를 시도할 수 있다.
이 경우 시스템에 따라 슬롯이 중복 판매되는 문제가 발생할 수 있다.
문제 2 — 결제 진행 중 슬롯 점유
사용자가 결제 화면에서 다음 행동을 할 수 있다.
결제 취소
앱 종료
브라우저 종료
네트워크 오류이 경우 슬롯이 계속 점유 상태로 남아 다른 사용자가 접근할 수 없는 상태가 발생한다.
문제 3 — 결제 시간과 슬롯 수량 불일치
결제 진행 동안 슬롯이 잠기지 않으면 다음 문제가 발생한다.
결제 성공
하지만 슬롯 수량 초과이는 플랫폼 신뢰성에 치명적인 오류가 된다.
따라서 결제 진행 중 슬롯을 임시 확보하는 정책이 필요하다.
3. 결정 (Decision)
플랫폼은 결제 시작 시 **슬롯을 임시 확보(reserved 상태)**로 전환한다.
3.1 상태 전이
선결제 슬롯의 기본 상태 모델은 다음과 같다.
issued
→ reserved
→ paid
→ redeemed예외 상태
reserved → expired
reserved → payment_failed
paid → no_show3.2 결제 시작 시 동작
사용자가 선결제 슬롯을 선택하면 다음 과정이 수행된다.
슬롯 선택
→ reservation 생성
→ 상태 reserved
→ 결제 시작reserved 상태에서는 슬롯 수량이 차감된 것으로 간주한다.
3.3 임시 확보 시간 (TTL)
reserved 상태는 일정 시간 동안만 유지된다.
기본 정책
reserved TTL = 3분이 시간 안에 결제가 완료되지 않으면 슬롯은 자동 해제된다.
3.4 만료 처리
TTL이 초과되면 다음 처리가 수행된다.
reserved → expired이때 슬롯 수량은 다시 사용 가능 상태로 복구된다.
3.5 결제 성공 처리
PG 결제가 성공하면 다음 상태 전이가 발생한다.
reserved → paidpaid 상태에서는 슬롯이 확정되며 매장 준비가 시작될 수 있다.
3.6 결제 실패 처리
결제 실패 또는 사용자 취소 시
reserved → payment_failed슬롯 수량은 즉시 복구된다.
4. 수량 관리 정책
본 ADR은 결제 시작 시 임시 확보(reserved 전환) 규칙만 정의한다.
수량 계산의 정식 규칙(점유 상태 집합, capacity_consuming_count, 트랜잭션 조건)은
ADR-DS-064를 단일 원천(SoT)으로 따른다.
5. 결과 (Consequences)
긍정적 영향
- 동시 결제 충돌 방지
- 슬롯 중복 판매 방지
- 결제 진행 중 슬롯 보호
- 결제 UX 안정성 확보
제한 사항
- reserved 상태 관리 로직 필요
- 만료 처리 배치 작업 필요
- 결제 실패 처리 로직 필요
6. 구조적 의미
본 정책은 슬롯 시스템의 동시성 안정성 확보를 위한 핵심 구조이다.
슬롯 시스템은 다음 원칙을 따른다.
슬롯은 제한된 자원이다
결제는 시간이 걸린다
결제 중 자원은 보호되어야 한다따라서
결제 시작은 슬롯 확보를 의미한다.
이 정책은 선결제 슬롯뿐 아니라 향후 예약형 서비스 확장에도 동일하게 적용될 수 있다.
Template v2 Addendum
In Scope
- Prepaid slot operations (reservation, payment confirmation, pickup, quantity, PG connection)
Out of Scope
- Order brokering, settlement handling, refund amount calculation
Boundaries
- Payment responsibility is on publisher. Time/state management is on platform.
Source of Truth (SoT)
- Base: ADR-DS-060; Temporary hold: ADR-DS-061; Payment verification/reconcile: ADR-DS-062; Pickup ops: ADR-DS-063; Quantity/concurrency: ADR-DS-064; PG registration/secret handling: ADR-DS-065.
Validation
- Detect state/constraint violations via tests and batch checks.
- Recovery and reprocessing must be idempotent.
Revisit Conditions
- KPI threshold breach (reservation failure, expiry ratio, payment confirmation failure)
- External dependency change (PG, regulation, location API)
DS-000 v1 정합성 개정 (2026-03-08)
이 문서는 ADR-DS-000 v1에 정합되도록 다음 규칙을 우선 적용한다.
- Reservation 상태 집합은
reserved | redeemed | expired | cancelled만 사용한다. paid,payment_failed,no_show는 Reservation 상태로 사용하지 않는다.- 결제 중 임시 점유는 Reservation 상태가 아니라
hold도메인으로 분리한다. - 수량 차감은
reserved -> redeemed전이 트랜잭션에서만 수행한다. prepaid + verification_method=none은 결제 성공 시 즉시redeemed전이를 허용할 수 있다.prepaid + (location|qr)는 결제 성공 후 검증 성공 시redeemed로 전이한다.- 만료 시각은 운영 상한을 강제한다:
expires_at <= store_close_at.
본 섹션과 기존 본문이 충돌하면 본 섹션(DS-000 정합성 개정)이 우선한다.