발행 제한 계산 규칙 통합
ADR-090 발행 제한 계산 규칙 통합
1. Metadata
- ADR ID: ADR-090
- Status: draft
- Date: 2026-03-09
- Owner: YSY
2. Domain Decision
- 발행 가능량은 플랜 한도와 사용량 기반으로 계산한다.
- 한도 계산 SoT는 서버로 고정한다.
- 한도 초과 발행은 거부한다.
- 한도 계산 기준 시각은 서버 UTC 시각으로 고정한다.
- 한도 계산 결과는 요청 시점 스냅샷으로 반환한다.
- 월 발행 횟수는
merchant_id + 월 경계(Asia/Seoul) + slot.created_at 기준으로 계산한다. - 동시 노출 제한(
concurrent_active_slots)은 발행 검사 선행 조건으로 적용한다. - 동일 조건 재발행 최소 간격은 플랜 파라미터(
reissue_interval)로 계산한다. - 발행 검사 우선순위는
동시 노출 제한 -> 재발행 간격 -> 월 한도 순서로 고정한다.
3. Product Decision
- 플랜별 발행 한도 정책을 명시한다.
- 한도 소진 시 발행 차단과 안내를 제공한다.
- 한도 정책 변경은 버전으로 관리한다.
- 한도 계산 결과 이의제기 경로를 파트너에게 제공한다.
- 플랜 수치표(
monthly_limit, concurrent_active_slots, reissue_interval)는 ADR-270에서 단일 관리한다.
4. UX Decision
5. Tech Decision
- 플랜 한도 계산 쿼리를 서버 SoT로 고정한다.
- 한도 차감/복구 이벤트를 명확히 정의한다.
- 한도 계산 캐시는 짧은 TTL로 운영한다.
- 한도 계산 실패 시 발행 요청은 허용하지 않는다.
6. Ops Decision
- 한도 초과/오탐 케이스 운영 대응 절차를 정의한다.
- 플랜 변경 반영 지연 대응 절차를 운영한다.
- 한도 정책 문의 대응 스크립트를 유지한다.
- 한도 계산 장애 시 임시 수동 승인 정책을 사용하지 않는다.
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