분산 시스템에서 데이터 정합성을 유지하는 방법
모놀리식 시스템에서는 데이터 일관성을 유지하는 것이 비교적 간단하다.
대부분의 경우 하나의 데이터베이스와 트랜잭션을 사용하기 때문이다.
예를 들어 주문 시스템을 생각해 보자.
INSERT ORDER
UPDATE INVENTORY
UPDATE PAYMENT
COMMIT
이 구조에서는 데이터베이스 트랜잭션이 모든 작업을 보장한다.
만약 문제가 발생하면
을 통해 전체 작업을 취소할 수 있다.
하지만 마이크로서비스 아키텍처(MSA)에서는 상황이 달라진다.
MSA에서 데이터 일관성 문제가 발생하는 이유
MSA에서는 각 서비스가 자신의 데이터베이스를 가진다.
예를 들어 다음 구조를 생각해 보자.
→ orders DB
Payment Service
→ payments DB
Inventory Service
→ inventory DB
이 구조에서는 하나의 비즈니스 작업이 여러 서비스에 걸쳐 실행된다.
예를 들어 주문 생성 과정은 다음과 같다.
2. 결제 처리
3. 재고 차감
문제는 이 작업이 하나의 트랜잭션으로 묶일 수 없다는 것이다.
즉 모든 데이터가 동시에 일관성을 유지하기 어렵다.
이 때문에 MSA에서는 보통 Eventual Consistency(최종 일관성) 모델을 사용한다.
Eventual Consistency란 무엇인가
Eventual Consistency는 다음 개념을 의미한다.
결국에는 일관된 상태에 도달한다
즉 잠시 동안 데이터가 완전히 일치하지 않을 수 있지만
시간이 지나면 정상 상태로 수렴한다.
예를 들어 다음 상황을 생각해 보자.
Payment 처리 완료
Inventory 업데이트는 잠시 후 반영
이 경우 짧은 시간 동안 재고 정보가 정확하지 않을 수 있다.
하지만 이벤트 처리 후에는 데이터가 일관된 상태가 된다.
Eventual Consistency를 관리하는 주요 방법
MSA에서는 여러 패턴을 사용해 데이터 일관성을 관리한다.
1. 이벤트 기반 데이터 동기화
가장 일반적인 방법은 이벤트 기반 데이터 동기화다.
예를 들어 주문 생성 이벤트가 발생하면
다른 서비스들이 이를 구독한다.
Notification Service → 알림 발송
Analytics Service → 통계 업데이트
이 방식은 서비스 간 결합도를 낮추고
비동기적으로 데이터 동기화를 수행할 수 있다.
2. Saga 패턴
앞서 설명한 Saga 패턴도 데이터 일관성 관리 방법 중 하나다.
Saga는 여러 서비스에 걸친 트랜잭션을
단계별로 실행하고 보상 작업으로 관리한다.
예를 들어
→ Payment 처리
→ Inventory 차감
만약 실패하면
Order 취소
와 같은 보상 작업을 실행한다.
Saga 패턴은 분산 트랜잭션 대신
비즈니스 로직 기반 트랜잭션 관리를 수행한다.
3. Outbox 패턴
이벤트 기반 시스템에서 중요한 문제 중 하나는
이벤트 유실 문제다.
예를 들어 다음 상황을 생각해 보자.
이벤트 발행 실패
이 경우 데이터와 이벤트 상태가 불일치하게 된다.
Outbox 패턴은 이를 해결한다.
2. 이벤트를 Outbox 테이블에 기록
3. 별도 프로세스가 이벤트 발행
이 방식은 데이터와 이벤트를 같은 트랜잭션에서 저장하기 때문에
이벤트 유실 문제를 방지할 수 있다.
4. Idempotency (멱등성)
분산 시스템에서는 메시지가 중복 처리될 수 있다.
예를 들어 메시지 브로커가 재전송하면
같은 이벤트가 두 번 처리될 수 있다.
이를 방지하기 위해 멱등성 처리가 필요하다.
예를 들어 다음과 같은 구조다.
이미 처리된 이벤트인지 확인
즉 같은 이벤트가 여러 번 들어와도
결과는 동일해야 한다.
Eventual Consistency의 장단점
Eventual Consistency는 분산 시스템에서 매우 중요한 개념이지만
장단점이 존재한다.
장점
- 서비스 간 결합도 감소
- 높은 확장성
- 장애 격리
- 비동기 처리 가능
단점
- 즉시 일관성 보장 어려움
- 시스템 이해도 증가
- 디버깅 복잡성 증가
즉 Eventual Consistency는
확장성과 일관성 사이의 트레이드오프라고 볼 수 있다.
언제 Eventual Consistency를 사용할까
다음과 같은 상황에서는 Eventual Consistency가 적합하다.
| MSA 구조 | 서비스별 DB |
| 이벤트 기반 시스템 | 비동기 처리 |
| 대규모 트래픽 | 확장성 중요 |
| 분산 환경 | 강한 트랜잭션 어려움 |
반면 금융 거래 같은 경우에는
강한 일관성이 필요하기 때문에 다른 접근이 필요할 수 있다.
정리
마이크로서비스 아키텍처에서는
모놀리식 시스템처럼 강한 트랜잭션을 사용하기 어렵다.
그래서 많은 시스템이 Eventual Consistency 모델을 사용한다.
이를 관리하기 위해 다음 패턴이 활용된다.
| Event Driven | 데이터 동기화 |
| Saga Pattern | 분산 트랜잭션 관리 |
| Outbox Pattern | 이벤트 유실 방지 |
| Idempotency | 중복 처리 방지 |
결국 중요한 것은
완벽한 즉시 일관성을 추구하는 것이 아니라
이다.
'Architecture' 카테고리의 다른 글
| Monolith vs MSA 아키텍처 비교 (0) | 2026.03.17 |
|---|---|
| 좋은 아키텍처는 기술이 아니라 ‘변경 비용’을 줄이는 것이다 (0) | 2026.03.12 |
| Saga 패턴은 언제 필요할까? (0) | 2026.03.12 |
| MSA에서 이벤트 드리븐 아키텍처를 언제 도입해야 할까 (0) | 2026.03.12 |
| 왜 MSA에서는 기술 통일보다 서비스 경계가 더 중요할까 (0) | 2026.03.12 |
