본문 바로가기
MSA

[MSA 2편] 보상 트랜잭션 (SAGA 패턴)

by 무대포 개발자 2022. 6. 11.
728x90
반응형

목차는 MSA 에 있습니다.

[MSA 2편] 보상 트랜잭션 (SAGA 패턴)

MSA 보상 트랜잭션이란?

  • commit 한 데이터나 이미 반영한 데이터를 보정하는 트랜잭션입니다.

어떤 상황에 사용하는게 좋은가?

  • 분산 환경에서 여러 api 끼리 통신을 하면 서로 다른 DB 에 일관성있게 데이터를 변경해야하는 경우가 생깁니다.
  • 한 번에 성공하면 문제가 없겠지만 일부라도 실패하면 rollback 을 해야하는 경우가 생깁니다. 이런 경우에 사용합니다.

SAGA

  • 분산 트랜잭션 환경에서 보상 이벤트를 발생시킴으로써 원자성을 보장하는 패턴입니다.

SAGA 패턴 방식 1

  • 발생한 서비스에 대해 롤백을 할 수 있는 서비스를 실행시키는 것입니다.
  • 외부 연동의 서비스의 경우 이런 방법을 택해야할 수 있습니다.
  • 예를 들면, 비행기 + 숙박을 같이 예약하는 시스템을 예로 들겠습니다.
    • 비행기와 숙박 예약은 동시에 되야하며, 하나가 실패하면 다른 하나도 보통 실패가 되야 합니다.
    • 비행기를 예약하면서 비행기 예약에 대한 카운터 취소 작업을 같이 기록합니다. 호텔을 예약하면서 호텔 예약에 대한 카운터 작업도 같이 기록합니다. 일부 동작에서 에러가 발생했을 경우 기록된 카운터 작업을 역순으로 실행합니다.
    • 시스템적으로 얘기하면 카운터 작업을 저장소 (디비나 캐시 등) 에 저장해놓고 실패가 발생했을 때, 해당 저장소를 읽어 역순으로 실행시키는 것입니다.

SAGA 패턴 방식 2

  • 발생한 서비스에 대해 성공할 때까지 서비스를 수행하는 것입니다.
  • 덜 중요한 서비스에 이런 방식을 적용해 볼 수 있을 것입니다. 예를 들면, 앞에서 결제는 전부 성공했는데, 배송 처리 쪽에서 실패가 발생했을 경우입니다.

SAGA 구현 방식

  • 중앙 집중 처리 방식이 있고, 각 서비스 별로 구독해서 처리하는 방식이 있습니다.
  • 중앙 집중 처리 방식은 말 그대로 중앙에서 처리하는 것입니다. 도메인 결합이 높아질 수 있지만 추적은 쉬울 수 있습니다.
  • 서비스 별 구독 방식은 서비스 별로 특정 Message broker 를 구독해서 이벤트가 발생할 때마다 처리하는 방식입니다. 사용하기 쉽고 편리하나 추적이 어려울 수 있습니다.

Reference

'MSA' 카테고리의 다른 글

[MSA 5편] API Gateway Service 정리  (0) 2022.09.21
[MSA 4편] Service Discovery (Eureka)  (0) 2022.08.20
[MSA 3편] CQRS 정리  (0) 2022.08.03
[MSA 1편] MSA 기본 개념 정리  (0) 2022.06.11

댓글