피드로 돌아가기
Dev.toDatabase
원문 읽기
Atomic Transaction 기반의 데이터 일관성 보장 및 Partial State 원천 차단 설계
The Silent Failure I Never Saw Coming: What VaultPay Taught Me About Consistency Under Failure
AI 요약
Context
단순 선형적 단계로 구성된 송금 흐름에서 네트워크 장애나 프로세스 크래시 발생 시 자산이 증발하는 Partial State 문제 직면. 정체성 검증(Identity)과 데이터 일관성(Consistency)의 분리 필요성을 인식하여 시스템 재설계 수행.
Technical Solution
- Fail-fast 전략 기반의 Guard Phase를 전면에 배치하여 데이터베이스 트랜잭션 진입 전 모든 유효성 검증 완료
- Redis를 활용한 Idempotency Key 검증으로 중복 요청에 따른 이중 송금 리스크 제거
with_for_update()를 통한 Row-level Lock 적용으로 동시성 제어 및 Race Condition 방지- 6단계의 핵심 작업(송금자/수신자 락, 잔액 확인, 차감, 증액, 이력 기록 2건)을 단일 Atomic Transaction으로 묶어 All-or-Nothing 보장
- 알림 전송과 같은 Non-critical 작업은 트랜잭션 외부로 분리하여 알림 실패가 금융 상태 롤백으로 이어지는 부작용 차단
실천 포인트
1. 상태 변경 전 모든 유효성 검사(Guard)를 완료했는가?
2. 쓰기 작업 간 순서에 따른 Deadlock 가능성을 검토하고 일관된 락 순서를 정의했는가?
3. 비즈니스 핵심 로직과 부수적인 알림/로그 작업이 트랜잭션 범위 내에서 분리되었는가?
4. Idempotency Key를 통해 재시도 요청에 대한 안정성을 확보했는가?