Pink Spider/msa에서 트랜잭션 처리 정책

Created Mon, 26 May 2025 20:20:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
821 Words 4 min

MSA(Microservices Architecture) 환경에서 서비스 간 호출 중 오류가 발생했을 때의 트랜잭션 처리 정책은 일반적으로 분산 트랜잭션 또는 사후 보상 트랜잭션(Compensating Transaction) 방식으로 구분되며, 다음과 같은 용어와 정책으로 설명됩니다.


1. SAGA 패턴

  • 정의: MSA에서 가장 널리 쓰이는 트랜잭션 처리 패턴으로, 각 서비스의 로컬 트랜잭션이 성공하면 다음 서비스를 호출하고, 중간에 실패 시 이전에 수행된 작업을 보상 작업(Compensation) 으로 되돌립니다.

  • 종류:

    • Choreography 기반: 서비스들이 이벤트를 발행하고 서로 구독하면서 트랜잭션을 이어감. 오케스트레이터가 없음.
    • Orchestration 기반: 중앙 컨트롤러(오케스트레이터)가 전체 트랜잭션 흐름을 제어.
  • 예시: 주문 → 결제 → 배송 순서에서 결제 실패 시, 주문을 취소하는 보상 트랜잭션 수행.


2. 2PC (Two Phase Commit)

  • 정의: 전통적인 분산 트랜잭션 처리 방식으로, 참여하는 모든 서비스가 준비되었는지 확인하고(commit 준비 단계), 그 후 실제 커밋을 실행함.
  • 단점: 성능 저하, 복잡성, 다양한 DB나 시스템 환경에서는 사용이 어려움.
  • MSA에서 잘 쓰이지 않는 이유: 마이크로서비스의 자율성과 독립성을 해치고, 시스템 결합도를 높이기 때문.

3. 보상 트랜잭션 (Compensating Transaction)

  • 정의: 트랜잭션이 중간에 실패했을 때, 앞서 성공한 작업들을 논리적으로 되돌리는 작업을 별도로 정의해서 실행.
  • SAGA 패턴의 핵심 개념이기도 함.
  • 예시: 호텔 예약 후 항공 예약에 실패하면, 호텔 예약을 취소하는 별도의 API 호출.

4. Idempotency & Retry 정책

  • 서비스 간 호출 중 네트워크 장애 등으로 인해 중복 호출이 발생할 수 있으므로, 멱등성을 보장하거나 재시도 전략을 적용하는 것이 중요합니다.

5. Circuit Breaker / Timeouts / Fallback

  • 에러 상황 관리를 위한 별도 패턴들:

    • Circuit Breaker: 장애가 자주 발생하는 서비스와의 연결을 임시로 차단.
    • Timeouts: 일정 시간 응답 없으면 실패로 간주.
    • Fallback: 대체 동작이나 기본 응답 제공.

정리: MSA 트랜잭션 처리 핵심 용어

정책/패턴 설명
SAGA 서비스 간의 보상 트랜잭션 기반 흐름 제어
Compensating Tx 실패시 이전 작업을 롤백하는 별도 API 정의
2PC 고전적인 분산 트랜잭션, MSA에는 부적합
Circuit Breaker 장애 서비스와의 호출 차단
Timeout / Retry 호출 실패에 대한 방어적 전략
Idempotency 중복 호출에도 안전한 API 설계