Safe Currency Exchange in Distributed Environments with Compensating Transactions
보상 트랜잭션으로 분산 환경에서도 안전하게 환전하기
💱 분산 환경에서의 안전한 환전: 토스뱅크 FX 스쿼드의 사가 패턴 적용기
🏦 서비스 출시 배경: 토스뱅크 외화 통장
⚙️ 모놀리식에서 MSA로: 아키텍처 전환의 배경
💥 분산 환경에서의 트랜잭션 문제
🔑 분산 트랜잭션의 두 가지 접근법
1️⃣ Two-Phase Commit (2PC, 투피씨)
2️⃣ Saga Pattern (사가 패턴)
🎯 왜 사가 패턴을 선택했나?
🎭 사가 패턴의 두 가지 방식
🔄 환전 플로우: 성공 시나리오
🚨 장애 시나리오와 대응
1. 출금 실패
2. 입금 실패
3. 왜 출금 → 입금 순서인가?
🌐 통신 방식: HTTP vs 메시징
⏳ 비정상 에러와 지연 메시지 처리
🛠️ 데드레터 큐(Dead Letter Queue)로 보상 보장
📊 모니터링: 상태 추적과 스테이트 머신
상황별 정리
✅ 정상 동작 (Happy Path)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 1 — KRW 출금 “정상 실패”(잔액 부족/계좌 해지/한도)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 2 — KRW 출금 “비정상 실패”(타임아웃/500/네트워크)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 3 — FX 입금 “정상 실패”(규칙 위반/계좌 제약)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 4 — FX 입금 “비정상 실패”(타임아웃/500/네트워크)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 5 — “보상 트랜잭션” 메시지 발행 실패(프로듀서 측)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 6 — “보상 트랜잭션” 소비/처리 실패(컨슈머 측)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 7 — 오케스트레이터(환전 서버) 중간 다운
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 8 — “결과 확인 API”가 연쇄 실패
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 9 — “중복/순서 꼬임/재시도 폭주”
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 10 — “KRW·FX 로그 간 불일치”(데이터 드리프트)
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🚨 시나리오 11 — “라스트 마일” UX: 장시간 PENDING
🧭 상황 설명
🔎 증상/리스크
🧯 대응 절차
👤 사용자 영향
🧰 운영 체크리스트
🧪 예방/테스트 포인트
🧭 종합 타임라인(요지)
느낀점
PreviousStable Operation of Large-Scale User-Based MyData ServiceNextImproving Toss Securities Ranking Service Architecture with ClickHouse
Last updated