피드로 돌아가기
CA 34 - Atomicity - Design a Reliable Wallet Transfer System with ACID Guarantees
Dev.toDev.to
Database

지갑 송금 시스템에서 ACID 속성의 원자성(Atomicity)을 트랜잭션으로 구현해 부분 실패를 방지

CA 34 - Atomicity - Design a Reliable Wallet Transfer System with ACID Guarantees

Santhosh V2026년 3월 29일1beginner

Context

GPay나 PhonePe 같은 지갑 시스템에서는 사용자 간 송금 시 두 개의 계좌 업데이트가 함께 완료되어야 합니다. 한 쪽 계좌만 차감되고 다른 쪽이 입금되지 않는 부분 실패 상황이 발생할 수 있습니다.

Technical Solution

  • BEGIN으로 트랜잭션 시작: 송금자 계좌 잔액 차감 쿼리와 수금자 계좌 잔액 증액 쿼리를 하나의 트랜잭션으로 묶음
  • COMMIT으로 전체 연산 확정: 모든 UPDATE 쿼리가 성공했을 때만 데이터베이스에 반영
  • ROLLBACK으로 부분 실패 처리: 트랜잭션 중 오류 발생 시 BEGIN 이전 상태로 모든 변경사항 되돌림
  • 쿼리 검증을 통한 실패 시나리오 테스트: 의도적으로 두 번째 UPDATE 쿼리에 오류(balancee 오타)를 삽입해 원자성 동작 확인

Key Takeaway

원자성은 결제 시스템에서 중요한 ACID 속성입니다. 트랜잭션의 BEGIN-COMMIT-ROLLBACK 패턴으로 모든 또는 아무것도 아닌(all or nothing) 상태를 보장할 수 있습니다.


송금·결제 기능을 구현하는 백엔드 엔지니어는 복수 계좌의 잔액 업데이트를 단일 트랜잭션으로 감싸고 중간 실패 시 ROLLBACK하도록 설계하면 부분 반영으로 인한 금액 불일치를 방지할 수 있습니다.

원문 읽기
CA 34 - Atomicity - Design a Reliable Wallet Transfer System with ACID Guarantees | Devpick