← ClaudeAtlas

billing-integritylisted

인앱결제·구독·쿼터 과금을 설계·구현·감사할 때 사용한다. 구독 무음 강등, 결제 검증 전수 실패, 이중/과다 차감, 웹훅 유실, 영구 무료 권한 같은 실제 사고를 막는 필수 항목과 감사 절차를 담았다. 스토어(Google Play·App Store) 연동, entitlement/게이트 판정, 영수증 검증, 웹훅·리컨사일, 멱등 원장 작업 전에 읽는다.
ezBuilder/code-brain · ★ 11 · AI & Automation · score 77
Install: claude install-skill ezBuilder/code-brain
# 결제 무결성 결제는 **실패해도 사용자가 항의하지 않는 방향**으로 무너진다. 권한이 조용히 사라지거나, 검증이 조용히 통과하거나, 원장이 조용히 비어 있다. 그래서 "동작하는 것처럼 보이는 상태"가 가장 위험하다. 이 스킬은 실제 운영 사고에서 역산한 항목만 담는다. ## 핵심 원칙 6 1. **조용한 실패 금지.** 모든 실패 경로는 소리를 낸다(로그+운영자 알림). 2. **권한은 회수보다 유지가 안전하다.** 조회 실패·불확실 상태에서 절대 회수하지 않는다. 3. **스토어 알림은 반드시 유실된다고 가정한다.** 웹훅은 보조, 폴링이 진짜 원장이다. 4. **모든 지급/차감은 멱등키를 가진다.** 사용자 식별자를 키에 포함한다. 5. **집행 판정은 서버가 사실 기반으로.** 클라이언트 입력은 티어에 영향을 주지 못한다. 6. **정상 판정은 폐쇄루프 증거로.** HTTP 200이나 콘솔 저장 성공만으로 끝내지 않고, 스토어 테스트 알림이 인증된 전송 경로를 거쳐 운영 인박스에 도착하는지 확인한다. ## 언제 무엇을 하나 ### 새로 결제를 붙일 때 이 순서를 지킨다. 2~4를 나중으로 미루면 반드시 사고로 돌아온다. 1. 상품 카탈로그를 서버 단일 소스로 정의(productId, kind, 가격, 부여 게이트) 2. **재검증용 원문 보관 설계** — 해시만 저장하면 나중에 복구가 불가능해진다 3. **멱등키 설계** — 이벤트 append-only + 유니크 인덱스 4. **리컨사일 폴링** — 웹훅보다 이게 원장이다 5. 부팅 시크릿 검증 + 운영자 알림 6. 웹훅 수신 + 인박스 + 미처리/무수신 감시 7. 만료 앵커 불변식 + 결제 실패 유예 정책 8. 티어·게이트 판정 서버화 9. 구매 복원 + 판매중단 SKU 화이트리스트 10. 웹훅 폐쇄루프 검증: topic + push 구독 + 인증 + 운영 인박스 11. 레거시 재검증 토큰 보유율 측정 + 백필 계획 12. 회귀 테스트: SKU kind 라우팅, 멱등 중복, 티어 폴백, 유예 판정 13. 쿼터 정책 변경 시 저장된 운영 설정을 마이그레이션하거나 읽기 단계에서 정책 정규화 14. 광고 단위의 콘솔 포맷과 SDK 로더 타입(Rewarded/Rewarded Interstitial)을 실기기에서 대조 15. 양 스토어의 SKU 판매 상태와 스토어 설치 실기기 상품 조회를 각각 확인 상세는 `references/playbook.md`를 읽는다. ### 기존 결제를 감사할 때 `references/audit.md`의 절차를 따른다. 코드만 보지 말고 **인프라 설정과 운영 데이터**를 함께 확인해야 한다 — 코드가 완벽해도 웹훅 엔드포인트 설정이 죽어 있을 수 있다. ### 결제 사고가 났을 때 1. **범위 파악** — 몇 명이 영향받았나. DB로 센다. 추측 금지. 2. **권한 부여 방향으로 먼저 구제** — 회수는 나중에. 사용자 이탈이 가장 비싸다. 3. **복구 스크립트는 멱등하게** — dry-run 기본, `--apply` 명시,