발행 제한 계산 규칙 통합

발행 제한 계산 규칙 통합

ADR-090 발행 제한 계산 규칙 통합

1. Metadata

  • ADR ID: ADR-090
  • Status: draft
  • Date: 2026-03-09
  • Owner: YSY

2. Domain Decision

  1. 발행 가능량은 플랜 한도와 사용량 기반으로 계산한다.
  2. 한도 계산 SoT는 서버로 고정한다.
  3. 한도 초과 발행은 거부한다.
  4. 한도 계산 기준 시각은 서버 UTC 시각으로 고정한다.
  5. 한도 계산 결과는 요청 시점 스냅샷으로 반환한다.
  6. 월 발행 횟수는 merchant_id + 월 경계(Asia/Seoul) + slot.created_at 기준으로 계산한다.
  7. 동시 노출 제한(concurrent_active_slots)은 발행 검사 선행 조건으로 적용한다.
  8. 동일 조건 재발행 최소 간격은 플랜 파라미터(reissue_interval)로 계산한다.
  9. 발행 검사 우선순위는 동시 노출 제한 -> 재발행 간격 -> 월 한도 순서로 고정한다.

3. Product Decision

  1. 플랜별 발행 한도 정책을 명시한다.
  2. 한도 소진 시 발행 차단과 안내를 제공한다.
  3. 한도 정책 변경은 버전으로 관리한다.
  4. 한도 계산 결과 이의제기 경로를 파트너에게 제공한다.
  5. 플랜 수치표(monthly_limit, concurrent_active_slots, reissue_interval)는 ADR-270에서 단일 관리한다.

4. UX Decision

  • 해당 없음

5. Tech Decision

  1. 플랜 한도 계산 쿼리를 서버 SoT로 고정한다.
  2. 한도 차감/복구 이벤트를 명확히 정의한다.
  3. 한도 계산 캐시는 짧은 TTL로 운영한다.
  4. 한도 계산 실패 시 발행 요청은 허용하지 않는다.

6. Ops Decision

  1. 한도 초과/오탐 케이스 운영 대응 절차를 정의한다.
  2. 플랜 변경 반영 지연 대응 절차를 운영한다.
  3. 한도 정책 문의 대응 스크립트를 유지한다.
  4. 한도 계산 장애 시 임시 수동 승인 정책을 사용하지 않는다.

7. Implementation Contract (Optional)

7.1 API Contract

  • 발행 전 점검 응답은 concurrent_check, reissue_check, monthly_limit_check 결과를 포함한다.
  • 판정 우선순위는 동시노출 -> 재발행간격 -> 월한도로 고정한다.

7.2 Data Contract

  • 월 집계 기준은 merchant_id + Asia/Seoul 월경계 + slot.created_at로 고정한다.
  • 플랜 파라미터(concurrent_active_slots, reissue_interval, monthly_limit)를 서버 정책으로 관리한다.

7.3 Error/Observability Contract

  • PLAN_LIMIT_EXCEEDED, REISSUE_INTERVAL_VIOLATION, CONCURRENT_LIMIT_EXCEEDED 코드를 구분한다.
  • 한도 판정 결과와 사용량 스냅샷을 감사 이벤트로 남긴다.

7.4 Test/Acceptance Contract

  • 우선순위가 다른 다중 위반 케이스에서 항상 선행 규칙 코드가 반환되어야 한다.
  • 월 경계(말일/월초) 요청의 집계 결과가 일관되어야 한다.

8. Validation

  • Domain/Product/UX/Tech/Ops 결정이 충돌하지 않는다.
  • 구현 기준은 SPEC과 정합성을 유지한다.
  • 운영 절차는 RUNBOOK으로 연결된다.