MSA(Microservice Architecture) 환경에서는 하나의 요청이 여러 서비스와 DB를 거치게 된다.
이때 데이터 정합성을 유지하는 것이 매우 중요하며, 이를 해결하기 위한 대표적인 방법이 다음 두 가지이다.
여러 서비스(또는 DB)의 트랜잭션을 하나처럼 묶어서 전부 성공하거나 전부 실패하도록 보장하는 방식
각 서비스에 commit 가능 여부를 확인
Coordinator → Payment: 준비됐어?
Coordinator → Lecture: 준비됐어?
Payment → OK
Lecture → OK
모든 서비스가 OK면 commit
Coordinator → Payment: commit
Coordinator → Lecture: commit
Coordinator → ALL: rollback
각 서비스가 독립적으로 트랜잭션을 처리하고,
문제가 발생하면 보상 트랜잭션(rollback)으로 정합성을 맞추는 방식
1. 결제 성공
2. 수강 등록
3. 알림 전송
1. 결제 성공
2. 수강 등록 실패 ❌
3. 결제 취소 (보상)
Payment → 이벤트 발행
Lecture → 이벤트 수신 후 처리
Notification → 이벤트 수신 후 처리
Orchestrator → Payment
Orchestrator → Lecture
Orchestrator → Notification
| 항목 | 2PC | Saga |
|---|---|---|
| 일관성 | 강한 일관성 | 최종 일관성 |
| 성능 | 느림 | 빠름 |
| 결합도 | 높음 | 낮음 |
| 장애 영향 | 전체 영향 | 부분 영향 |
| MSA 적합성 | ❌ | ✅ |
1. 결제 요청
2. Payment Service → 결제 성공
3. Kafka 이벤트 발행
4. Lecture Service → 수강 등록
5. Notification Service → 알림 발송
❌ 실패 시
→ Payment Service → 결제 취소
2PC는 “모두 함께 성공하거나 실패”,
Saga는 “각자 처리하고 문제 생기면 되돌린다”