핵심 인사이트 (3줄 요약)
- 본질: 결과적 일관성 (Eventual Consistency)이란 분산 시스템에서 즉각적인 강일관성(Strong Consistency) 대신 "충분한 시간이 흐르면 모든 노드의 데이터가 일치하게 된다"는 사상으로, CAP 이론의 A(가용성)와 P(분산 내성) 선택 시 C(일관성)를 완화한 결과다.
- 가치: 분산 트랜잭션 없이도 높은 가용성과 성능을 유지하면서 최종적으로 데이터 정합성을 보장하므로, MSA 환경의 비동기 이벤트 기반 아키텍처와 완벽하게 부합한다.
- 판단 포인트: 잠시 오래된 데이터를 보여줘도 비즈니스 영향이 없는(SNS 좋아요 수 등) 시스템은 Eventual Consistency가 최선이나, 금융 이체처럼 순간적으로도 데이터가 틀려서는 안 되는 경우에는 여전히 강일관성 또는 2PC (Two-Phase Commit)가 필요하다.
Ⅰ. 개요 및 필요성
단일 RDBMS (Relational Database Management System)에서는 ACID (Atomicity, Consistency, Isolation, Durability) 트랜잭션이 즉각적인 데이터 일관성을 보장한다. 그러나 마이크로서비스 환경에서 각 서비스가 독립된 DB를 소유하면, 여러 서비스에 걸친 트랜잭션을 원자적으로 처리하기 위한 분산 트랜잭션 (2PC)은 성능 병목과 가용성 저하를 초래한다.
CAP (Consistency, Availability, Partition Tolerance) 이론은 분산 시스템이 네트워크 파티션(P) 상황에서 일관성(C)과 가용성(A)을 동시에 완벽하게 만족할 수 없다고 말한다. 대부분의 인터넷 규모 분산 시스템은 A와 P를 선택하고 C를 완화—즉 "결국에는 일치한다"는 결과적 일관성을 채택한다.
BASE (Basically Available, Soft State, Eventual Consistency) 모델은 이 철학을 정식화한 것으로, ACID의 대안으로 NoSQL·분산 시스템 설계의 근간이 된다.
📢 섹션 요약 비유: 결과적 일관성은 소문 전파 — 어제 일어난 일이 모든 마을 사람에게 퍼지려면 시간이 필요하지만, 결국에는 모두가 같은 이야기를 알게 된다.
Ⅱ. 아키텍처 및 핵심 원리
| 항목 | ACID (강일관성) | BASE (결과적 일관성) |
|---|---|---|
| Atomicity / Basically Available | 모두 성공 또는 전체 롤백 | 기본 가용성 유지, 부분 실패 허용 |
| Consistency / Soft State | 트랜잭션 후 즉시 일관 | 일시적으로 불일치 상태 허용 |
| Isolation / Eventual | 다른 트랜잭션 간섭 없음 | 결국 일관 상태에 도달 |
| Durability | 커밋 후 영구 저장 | 비동기 복제 허용 |
| 적합 DB | RDBMS (MySQL, PostgreSQL) | DynamoDB, Cassandra, MongoDB |
| 적합 사용 사례 | 금융 거래, 재고 감소 | SNS 좋아요, 추천 피드, 장바구니 |
┌──────────────────────────────────────────────────────────────────────┐
│ 결과적 일관성: MSA 이벤트 기반 구현 │
│ │
│ 주문 서비스 이벤트 버스 재고 서비스 │
│ ┌────────────────┐ ┌──────────────┐ │
│ │ 1. 주문 DB │ │ 3. 재고 DB │ │
│ │ 저장 │ 2. OrderPlaced 이벤트 발행 │ 감소 │ │
│ │ (커밋) │──────────────────────────────►│ (비동기) │ │
│ └────────────────┘ └──────────────┘ │
│ │
│ T=0: 주문 DB = "주문완료", 재고 DB = "아직 반영 안됨" [불일치] │
│ T=1s: 이벤트 전달 완료 → 재고 DB = "감소" [일치] │
│ │
│ SAGA 패턴 보상 트랜잭션: │
│ 재고 부족 시 OrderFailed 이벤트 발행 → 주문 서비스가 주문 취소 │
│ │
│ Outbox 패턴: │
│ DB 변경 + 이벤트 발행을 로컬 트랜잭션으로 묶어 이중 커밋 방지 │
└──────────────────────────────────────────────────────────────────────┘
📢 섹션 요약 비유: Eventual Consistency는 은행 이체 후 잔액 반영 — 이체 직후 ATM과 앱이 잠깐 다른 잔액을 보일 수 있지만, 몇 초 후엔 동기화된다.
Ⅲ. 비교 및 연결
| 구분 | 2PC (Two-Phase Commit) | SAGA 패턴 | Eventual Consistency |
|---|---|---|---|
| 트랜잭션 방식 | 분산 원자 트랜잭션 | 보상 트랜잭션 체인 | 비동기 이벤트 전파 |
| 일관성 수준 | 강일관성 | 최종 일관성 | 최종 일관성 |
| 성능 | 낮음 (잠금 발생) | 중간 | 높음 |
| 복잡도 | 중간 | 높음 | 중간 |
| 부분 실패 처리 | 자동 롤백 | 보상 이벤트 | 재처리 + DLQ |
| 적합 환경 | 단일/소규모 분산 | MSA 비즈니스 프로세스 | 고가용성 MSA |
CAP 정리 정리:
- CA: 분산 없음 (단일 RDBMS) — ACID 가능
- CP: 일관성 + 분산 내성 (ZooKeeper, etcd) — 일관성 우선
- AP: 가용성 + 분산 내성 (DynamoDB, Cassandra) — Eventual Consistency
📢 섹션 요약 비유: CAP 선택은 "빠른 배달 vs 정확한 배달" — 두 개를 동시에 완벽하게 할 수는 없어서 하나를 조금 양보해야 한다.
Ⅳ. 실무 적용 및 기술사 판단
도메인별 일관성 수준 선택
- 금융 이체·재고 감소 → ACID 또는 SAGA 패턴 (보상 필수)
- 장바구니·좋아요 수 → Eventual Consistency (잠시 불일치 허용)
- 사용자 세션·캐시 → TTL 기반 Eventual Consistency
Outbox 패턴 (이중 커밋 방지)
- 주문 서비스: 주문 레코드 + 이벤트 레코드를 동일 DB 트랜잭션으로 저장
- CDC (Change Data Capture) 또는 Relay 프로세스가 이벤트 레코드를 읽어 메시지 큐 발행
- 이벤트 발행 성공 시 이벤트 레코드 상태 업데이트 → 이중 커밋 없이 원자성 보장
📢 섹션 요약 비유: Outbox 패턴은 복사 카본지 — 원본 주문서(DB 트랜잭션)를 쓸 때 동시에 이벤트 복사본(Outbox)이 생겨, 나중에 배달(메시지 큐)에 사용한다.
Ⅴ. 기대효과 및 결론
결과적 일관성은 인터넷 규모의 분산 시스템이 높은 가용성과 성능을 유지하면서도 데이터 정합성을 달성하는 실용적 타협점이다. MSA에서 SAGA 패턴, Outbox 패턴, 이벤트 소싱 (Event Sourcing)과 결합하면 비즈니스 요구를 충족하면서도 분산 트랜잭션의 성능 병목을 피할 수 있다.
한계는 개발자가 "언제 일관성이 맞춰지는가"를 항상 인식해야 하고, 오래된 데이터 읽기 문제(Stale Read)에 대한 UX 설계가 필요하다는 점이다. 도메인별 일관성 요구 수준을 명확히 분류해 선택적으로 강일관성과 결과적 일관성을 혼용하는 설계가 현실적이다.
📢 섹션 요약 비유: 결과적 일관성 설계는 적정 기술 선택 — 모든 곳에 원자력 발전소(ACID)를 세울 필요 없이, 용도에 맞게 태양광(Eventual)과 원자력을 섞어 쓰는 것이다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| CAP 이론 | 일관성·가용성·분산 내성 중 2개 선택 |
| BASE 모델 | ACID 대안, Eventual Consistency 공식화 |
| SAGA 패턴 | MSA 분산 트랜잭션을 보상 이벤트로 처리 |
| Outbox 패턴 | 이중 커밋 없이 DB 변경 + 이벤트 발행 원자성 |
| CDC (Change Data Capture) | DB 변경을 스트림으로 캡처, Outbox 구현에 활용 |
| 이벤트 소싱 (Event Sourcing) | 상태 변경을 이벤트로 저장, Eventual Consistency 기반 |
👶 어린이를 위한 3줄 비유 설명
- 결과적 일관성은 업데이트되는 인터넷 지도 — 새 건물이 생기면 바로 모든 지도에 반영되지 않고, 시간이 지나면 서서히 업데이트돼요.
📈 관련 키워드 및 발전 흐름도
강한 일관성 (2PC · Paxos: 높은 지연)
│
▼
Eventual Consistency: 최종적 일관성 보장
├─► SAGA 패턴: 보상 트랜잭션
└─► Outbox + CDC: 이벤트 안정 발행
│
▼
Tunable Consistency · CRDTs (충돌 해소 자료구조)
- 지도 회사(클라우드)는 일단 서비스는 끊기지 않게 하고, 나중에 업데이트를 맞춰요.
- 긴급 상황(금융 거래)은 실시간 반영이 필요하지만, 맛집 후기(SNS 좋아요)는 잠깐 오래된 숫자를 보여줘도 괜찮아요.