MSA 데이터 불일치
| topics | 400-인프라 & 아키텍처 404 마이크로서비스(MSA) |
| types | 이론 |
| tags | #msa #data-consistency #saga |
MSA 데이터 불일치
상황
MSA 환경에서는 각 서비스가 독립적인 데이터베이스를 가진다. 이 때문에 여러 서비스에 걸친 트랜잭션에서 데이터 불일치가 발생할 수 있다.
왜 데이터 불일치가 발생하나
- 각 서비스가 별도의 DB를 사용 → 분산 트랜잭션 관리가 어려움
- 네트워크 장애로 인한 부분 실패 가능
- 서비스 간 동기화 타이밍 차이
예시: 주문 서비스에서 주문 생성 → 재고 서비스에서 재고 차감 중 실패하면 주문은 됐는데 재고는 안 빠지는 문제 발생
해결 방법
1. SAGA 패턴
각 서비스의 로컬 트랜잭션을 순차적으로 실행하고, 실패 시 보상 트랜잭션을 실행하는 방식이다.
주문 생성 → 재고 차감 → 결제 처리
↓ (실패 시)
재고 복구 ← 주문 취소
두 가지 방식:
- Choreography: 이벤트 기반으로 각 서비스가 자율적으로 처리
- Orchestration: 중앙 조정자가 순서 관리
2. 이벤트 소싱
상태 변경을 이벤트로 저장하고, 이벤트를 재생해서 현재 상태를 구한다. 이벤트를 활용해서 다른 서비스와 동기화한다.
3. 최종 일관성 (Eventual Consistency)
강한 일관성 대신 최종 일관성을 받아들이는 방식이다. 즉각적인 일관성은 포기하고, 시간이 지나면 일관성이 보장되도록 한다.
핵심: 서비스 간 데이터 불일치는 일시적으로 허용하고, 최종적으로 맞추는 전략
결론
MSA에서 분산 트랜잭션은 피할 수 없는 과제다. 본인의 경우, 대부분 SAGA 패턴 + 이벤트 기반 아키텍처를 조합해서 사용한다.
중요한 건 **"어디서 실패할 수 있는가"**를 미리 파악하고, 보상 로직을 설계하는 것이다.