보상 트랜잭션, SAGA 패턴

HodaeSsi·2024년 12월 22일
0
post-thumbnail

MSA 환경에서의 트랜잭션 관리 방식

마이크로서비스 아키텍처(Microservices Architecture, MSA)는 애플리케이션을 여러 독립적인 서비스로 분리하여 개발, 배포, 확장성을 높이는 방식입니다. 하지만 서비스가 분리되면서 기존 단일 애플리케이션에서의 트랜잭션 처리 방식(ACID 트랜잭션 등)을 그대로 적용할 수 없게 되어 복잡성이 증가합니다. 예를 들어, 각 서비스는 서로 다른 데이터베이스를 가질 수 있고, 네트워크 지연이나 장애로 인해 트랜잭션이 일관되게 유지되지 않을 위험이 존재합니다. 이로 인해 글로벌 트랜잭션 관리가 어려워지고, 트랜잭션의 부분 실패를 처리하거나 보상 로직을 구현해야 하는 상황이 발생합니다. 이러한 문제를 해결하기 위한 트랜잭션 관리 방식인, 보상 트랜잭션과 SAGA 패턴에 대해 알아보겠습니다.


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

보상_트랜잭션_구조도
(이미지 출처 : Microsoft Learn / 보상 트랜잭션 패턴)

보상 트랜잭션은 분산 트랜잭션 환경에서 데이터 일관성을 유지하기 위한 방법 중 하나입니다. 특정 작업이 실패했을 때, 해당 작업의 결과를 되돌리기 위해 별도의 보상 작업을 실행합니다.

보상 트랜잭션의 특징

  • 상태 복구: 작업 실패 시 데이터를 이전 상태로 복구하여 일관성을 유지.
  • 비동기적 보상: 작업이 실패했음을 탐지한 후에 보상 트랜잭션이 수행.
  • 서비스 내 책임 분담: 각 서비스가 자신의 보상 트랜잭션을 정의하고 실행.

예시

예를 들어, 항공권 예약 시스템에서 고객이 항공권을 예약하고 결제를 완료했지만, 좌석 확보 과정에서 실패했다면 다음과 같은 보상 트랜잭션이 실행됩니다:

  1. 결제 취소.
  2. 예약 기록 삭제.

한계

  • 보상 작업 자체가 실패할 수 있음.
    (작업이 신뢰성 있게 실행될 수 있도록 메세지 큐를 추가적으로 구성할 수 있습니다.)
  • 각 서비스가 보상 트랜잭션 로직을 별도로 구현해야 하므로 복잡성이 증가.

2. SAGA 패턴

SAGA 패턴은 분산 트랜잭션에서 데이터 일관성을 보장하기 위해 설계된 아키텍처 패턴으로, 보상 트랜잭션을 통해 각 단계에서 실패 시 데이터를 복구하며 전체 트랜잭션의 일관성을 유지합니다. 이 패턴은 긴 트랜잭션을 여러 단계로 나누어 각 단계를 독립적인 로컬 트랜잭션으로 처리하며, 트랜잭션 간의 협력을 통해 최종적인 일관성을 유지합니다.

SAGA 패턴의 두 가지 실행 방식

1. 조정자(Orchestration) 방식

SAGA패턴_조정자_방식_구조도
(이미지 출처 : Microsoft Learn / Saga 분산 트랜잭션 패턴)

  • 중앙의 조정자 역할을 하는 서비스가 각 트랜잭션의 실행 순서를 제어.
  • 조정자는 성공 또는 실패 여부에 따라 다음 작업을 지시하거나 보상 트랜잭션을 실행.
장점
  • 흐름이 명확하고 중앙에서 관리하기 때문에 로직이 단순해짐.
단점
  • 조정자 서비스가 단일 장애점(Single Point of Failure)이 될 수 있음.
2. 연쇄(Choreography) 방식
  • 각 서비스가 이벤트를 통해 서로 통신하며 트랜잭션을 진행.
  • 이전 단계의 서비스가 이벤트를 발행하면 다음 단계의 서비스가 해당 이벤트를 구독하여 실행.
장점
  • 분산 시스템의 장점을 극대화하여 높은 확장성 제공.
단점
  • 이벤트 흐름이 복잡해지고 디버깅이 어려울 수 있음.

SAGA 패턴의 보상 트랜잭션 활용

SAGA 패턴에서는 각 단계의 트랜잭션이 완료된 후, 다음 단계로 진행합니다. 만약 중간에 실패가 발생하면, 실패한 단계와 이전 단계에서 정의된 보상 트랜잭션이 실행되어 데이터 일관성을 유지합니다. 즉, 보상 트랜잭션은 SAGA 패턴의 구성 요소로서, 복구 로직의 중심을 이루게 됩니다.

적용 예시

전자상거래 시스템에서 주문 처리를 생각해봅시다:

  1. 주문 서비스: 주문 생성.
  2. 결제 서비스: 결제 처리.
  3. 배송 서비스: 배송 요청 생성.

만약 결제 단계에서 실패한다면, SAGA 패턴에 따라 주문 생성 작업을 취소하는 보상 트랜잭션이 실행됩니다.


결론

MSA 환경에서 트랜잭션 관리 방식은 시스템의 특성과 요구 사항에 따라 달라집니다. 보상 트랜잭션은 SAGA 패턴의 핵심 구성 요소로, 복잡한 워크플로우에서도 데이터 일관성을 유지하는 데 중요한 역할을 합니다. 적절한 패턴을 선택하고 구현함으로써 MSA의 장점을 극대화하면서도 데이터 일관성을 보장할 수 있습니다.

profile
항상 다같이, 즐겁게 일할 수 있으면 좋겠습니다 😎

0개의 댓글