피드로 돌아가기
Dev.toDatabase
원문 읽기
지갑 송금 시스템에서 ACID 속성의 원자성(Atomicity)을 트랜잭션으로 구현해 부분 실패를 방지
CA 34 - Atomicity - Design a Reliable Wallet Transfer System with ACID Guarantees
AI 요약
Context
GPay나 PhonePe 같은 지갑 시스템에서는 사용자 간 송금 시 두 개의 계좌 업데이트가 함께 완료되어야 합니다. 한 쪽 계좌만 차감되고 다른 쪽이 입금되지 않는 부분 실패 상황이 발생할 수 있습니다.
Technical Solution
- BEGIN으로 트랜잭션 시작: 송금자 계좌 잔액 차감 쿼리와 수금자 계좌 잔액 증액 쿼리를 하나의 트랜잭션으로 묶음
- COMMIT으로 전체 연산 확정: 모든 UPDATE 쿼리가 성공했을 때만 데이터베이스에 반영
- ROLLBACK으로 부분 실패 처리: 트랜잭션 중 오류 발생 시 BEGIN 이전 상태로 모든 변경사항 되돌림
- 쿼리 검증을 통한 실패 시나리오 테스트: 의도적으로 두 번째 UPDATE 쿼리에 오류(balancee 오타)를 삽입해 원자성 동작 확인
Key Takeaway
원자성은 결제 시스템에서 중요한 ACID 속성입니다. 트랜잭션의 BEGIN-COMMIT-ROLLBACK 패턴으로 모든 또는 아무것도 아닌(all or nothing) 상태를 보장할 수 있습니다.
실천 포인트
송금·결제 기능을 구현하는 백엔드 엔지니어는 복수 계좌의 잔액 업데이트를 단일 트랜잭션으로 감싸고 중간 실패 시 ROLLBACK하도록 설계하면 부분 반영으로 인한 금액 불일치를 방지할 수 있습니다.