상품권 / 포인트 앱에서 장애가 치명적인 이유
일반 앱에서 1번 결제 실패는 "불편"입니다. 상품권 · 포인트 앱에서 1원 오차는 "신뢰 사고"입니다. 재현 · 증명 · 보상까지 가는 흐름이 다릅니다.
1. 멱등키 없이 살아남을 수 없다
네트워크 재시도 · 사용자의 "한 번 더" 탭 · push 중복 처리 — 멱등키 없이는 같은 거래가 두 번 발생합니다. 클라이언트가 발급해 모든 계층에서 동일하게 사용하세요.
2. 원장(Ledger) — 잔액이 아니라 변동 기록
현재 잔액만 갖고 있으면 "왜 줄었지?"에 답을 못 합니다. 모든 변동을 append-only 원장에 적고, 잔액은 계산값으로 두세요.
3. 대사(Reconciliation) — 매일 0차이를 증명
우리 DB, PG, 외부 정산처의 잔액이 매일 일치한다는 것을 자동 비교하세요. 차이가 발생한 시점을 시간 단위로 좁혀야 복구가 가능합니다.
4. 장애 시 동결 vs 진행
"어쨌든 동작하게" 두면 사고가 커집니다. 결제 / 출금처럼 금전 관련 호출은 장애 신호 감지 시 자동 동결 → 운영자 승인 → 재개가 맞습니다.
5. CS — 거래 ID 한 줄로 답이 나와야
사용자가 거래 ID를 보내오면 CS가 30초 안에 "받음 / 안 받음 / 처리 중"을 답할 수 있어야 합니다. 그 정도의 검색 가능성을 처음부터 설계하세요.
거래 1건마다 남길 최소 항목
idempotency_keyledger_entry_id(append-only)external_ref(PG · 정산처)state_machine_step(단계별)resolved_at/frozen_at
금전 관련 앱에서 "1원 오차"가 두렵다면, 멱등 · 원장 · 대사 구조를 진단 단계에서 정리해 드립니다.
앱 운영 진단 신청 →