포인트(선충전)와 에스크로(거래보호) 둘 다 지원하면 플랫폼이 유연해지고 사용자 신뢰를 동시에 얻을 수 있어요.
아래는 실제로 구현 가능한 DB 설계(핵심 테이블 + 컬럼 + 동작 흐름) 과 운영·안전주의 사항을 정리한 가이드입니다. 바로 개발에 옮길 수 있게 SQL 예시(핵심 테이블)도 포함했습니다.
설계 요지 (요약)
- Wallet(포인트): 사용자가 충전·보유·사용하는 플랫폼 내부 잔액(포인트) 관리
- Escrow(에스크로): 주문별로 보관되는 임치금(구매자→플랫폼 보관 → 검수 후 판매자 정산)
- Payments : 외부 PG/Stripe/Paypal 결제 이벤트를 기록
- Transactions / Ledger: 회계적 무결성을 위한 트랜잭션 로그(모든 머니 이동은 여기에 기록)
- Payouts / Settlements: 판매자(생산자)에게 실제 송금하는 출금 요청/처리 테이블
- 동시성/무결성: 잔액 변경은 DB 트랜잭션 + 행잠금(SELECT ... FOR UPDATE)으로 처리
- 감사 / 환불 / 분쟁: 모든 이벤트는 고유 idempotency_key 와 audit log로 추적
<aside>
idempotency_key 멱등성 키
멱등성이 뭔가요? | 토스페이먼츠 개발자센터
</aside>
핵심 엔터티(관계 요약)
- wallets (user_id, currency, balance)
- wallet_transactions (wallet_id, type, amount, ref_type, ref_id, status, created_at)
- escrows (escrow_id, order_id, currency, amount_total, status)
- escrow_ledger (escrow_id, type, amount, from_account, to_account, created_at)
- payments (payment_id, order_id, provider, provider_txn_id, amount, currency, status)
- payouts (payout_id, seller_id, amount, currency, status, processed_at)