MIRAENEC

MIRAENEC/Insights/INCIDENT

2026.03.20 · INCIDENT

상품권 / 포인트 앱에서 장애가 치명적인 이유

일반 앱에서 1번 결제 실패는 "불편"입니다. 상품권 · 포인트 앱에서 1원 오차는 "신뢰 사고"입니다. 재현 · 증명 · 보상까지 가는 흐름이 다릅니다.

1. 멱등키 없이 살아남을 수 없다

네트워크 재시도 · 사용자의 "한 번 더" 탭 · push 중복 처리 — 멱등키 없이는 같은 거래가 두 번 발생합니다. 클라이언트가 발급해 모든 계층에서 동일하게 사용하세요.

2. 원장(Ledger) — 잔액이 아니라 변동 기록

현재 잔액만 갖고 있으면 "왜 줄었지?"에 답을 못 합니다. 모든 변동을 append-only 원장에 적고, 잔액은 계산값으로 두세요.

3. 대사(Reconciliation) — 매일 0차이를 증명

우리 DB, PG, 외부 정산처의 잔액이 매일 일치한다는 것을 자동 비교하세요. 차이가 발생한 시점을 시간 단위로 좁혀야 복구가 가능합니다.

4. 장애 시 동결 vs 진행

"어쨌든 동작하게" 두면 사고가 커집니다. 결제 / 출금처럼 금전 관련 호출은 장애 신호 감지 시 자동 동결 → 운영자 승인 → 재개가 맞습니다.

5. CS — 거래 ID 한 줄로 답이 나와야

사용자가 거래 ID를 보내오면 CS가 30초 안에 "받음 / 안 받음 / 처리 중"을 답할 수 있어야 합니다. 그 정도의 검색 가능성을 처음부터 설계하세요.

거래 1건마다 남길 최소 항목

  • idempotency_key
  • ledger_entry_id (append-only)
  • external_ref (PG · 정산처)
  • state_machine_step (단계별)
  • resolved_at / frozen_at

금전 관련 앱에서 "1원 오차"가 두렵다면, 멱등 · 원장 · 대사 구조를 진단 단계에서 정리해 드립니다.

앱 운영 진단 신청 →