마이크로서비스 아키텍처의 역동적인 세계에서 가장 큰 도전 과제 중 하나는 여러 서비스 간의 데이터 일관성을 유지하는 것입니다. 전통적인 모놀리식 애플리케이션은 ACID 트랜잭션을 통해 이를 처리했지만, 독립적으로 배포되고 확장되는 마이크로서비스 아키텍처에서는 다른 접근 방식이 필요합니다. 이 문제를 해결하기 위해 등장한 것이 바로 사가(Saga) 디자인 패턴입니다.
사가(Saga) 디자인 패턴이란?
사가 디자인 패턴은 각 서비스에서 데이터를 업데이트하는 일련의 로컬 트랜잭션으로 구성됩니다. 만약 어느 한 트랜잭션이 실패하면, 사가는 이전 트랜잭션에서 발생한 변경 사항을 되돌리는 보상 트랜잭션을 실행하여 시스템이 장애로부터 우아하게 복구하고, 여러 서비스 간 데이터 일관성을 유지할 수 있도록 합니다.
사가의 종류
1. 코레오그래피 기반 사가
코레오그래피 기반 사가에서는 사가에 참여하는 각 서비스가 이벤트를 발행하고 다른 서비스의 이벤트를 수신합니다. 중앙의 조정자는 없으며, 서비스들이 이벤트를 통해 서로 통신합니다. 이 방식은 분산된 형태로 단일 장애 지점을 방지할 수 있지만, 서비스가 많아질수록 복잡도가 증가할 수 있습니다.
2. 오케스트레이션 기반 사가
오케스트레이션 기반 사가에서는 중앙 오케스트레이터가 각 참여자에게 어떤 로컬 트랜잭션을 실행할지 지시합니다. 오케스트레이터는 사가의 흐름을 결정하고 실패 시 보상 트랜잭션을 호출하는 역할을 합니다. 이 방식은 제어 로직이 중앙 집중화되어 복잡한 사가를 관리하기 쉽지만, 단일 장애 지점이 될 수 있습니다.
예시: 예약 서비스 설계
비행기 예약을 포함한 예약 서비스에서 코레오그래피와 오케스트레이션 기반 사가를 모두 설계해 보겠습니다. 이 시스템은 다음과 같은 서비스들로 구성됩니다:
- 예약 서비스: 예약 요청을 관리
- 항공편 서비스: 좌석 예약 관리
- 결제 서비스: 결제 처리 관리
- 알림 서비스: 사용자에게 알림 전송
코레오그래피 기반 사가의 흐름
코레오그래피 방식에서는 각 서비스가 이벤트를 수신하고 다음 단계를 트리거하기 위해 이벤트를 발행합니다. 중앙 제어자가 없으며, 대신 서비스들이 이벤트를 통해 상호작용합니다.
성공적인 예약 흐름
- 고객이 예약 요청: 예약 서비스는 고객으로부터 예약 요청을 받고 예약 레코드를 생성한 후, booking-created 이벤트를 발행합니다.
- 좌석 예약: 항공편 서비스는 booking-created 이벤트를 수신하고 좌석을 예약한 후, seat-reserved 이벤트를 발행합니다.
- 결제 처리: 결제 서비스는 seat-reserved 이벤트를 수신하고 결제를 처리한 후, payment-completed 이벤트를 발행합니다.
- 예약 완료: 예약 서비스는 payment-completed 이벤트를 수신하고 예약을 확정한 후, booking-confirmed 이벤트를 발행합니다.
- 고객 알림: 알림 서비스는 booking-confirmed 이벤트를 수신하여 고객에게 예약 확정 알림을 전송합니다.
실패 시 흐름
- 좌석 예약 실패 시: seat-reservation-failed 이벤트를 발행하고 예약 서비스는 이를 수신하여 예약 실패로 처리합니다.
- 결제 실패 시: payment-failed 이벤트를 발행하고 항공편 서비스는 좌석 예약을 취소한 후, seat-reservation-failed 이벤트를 발행합니다.
오케스트레이션 기반 사가의 흐름
오케스트레이션 방식에서는 중앙의 오케스트레이터가 각 서비스 간의 상호작용을 관리합니다.
성공적인 예약 흐름
- 고객이 예약 요청: 예약 서비스가 고객의 요청을 수신하면 오케스트레이터에게 요청을 보냅니다.
- 좌석 예약: 오케스트레이터는 항공편 서비스에 좌석 예약을 요청하고, 성공 시 다음 단계로 진행합니다.
- 결제 처리: 결제 서비스에 결제 요청을 보내고 성공 시 예약을 확정합니다.
- 예약 완료 및 알림: 오케스트레이터는 예약 서비스를 업데이트하고, 알림 서비스를 통해 고객에게 예약 확정 알림을 전송합니다.
코레오그래피 vs 오케스트레이션
- 코레오그래피의 장점은 각 서비스가 자체적으로 책임을 지므로 느슨하게 결합되고 확장성이 뛰어나지만, 실패 시의 복잡한 처리 과정으로 인해 관리가 어려울 수 있습니다.
- 오케스트레이션의 장점은 중앙 집중화된 제어 덕분에 오류 처리와 흐름 관리가 간단하지만, 단일 장애 지점이 될 수 있다는 단점이 있습니다.
결론
사가 디자인 패턴은 마이크로서비스 아키텍처에서 분산된 트랜잭션을 관리하는 강력한 도구입니다. 복잡한 트랜잭션을 일련의 작은 단계로 나누고, 실패를 처리할 수 있는 메커니즘을 제공함으로써, 사가는 마이크로서비스가 실패에도 불구하고 일관성을 유지하고 회복할 수 있도록 보장합니다.
코레오그래피 기반 또는 오케스트레이션 기반 접근 방식을 선택하는 것은 특정 요구사항과 제약 조건에 따라 달라집니다. 하지만 사가 패턴을 이해하고 구현하는 것은 견고한 마이크로서비스 아키텍처를 구축하는 데 필수적인 요소입니다. 이를 통해 마이크로서비스들이 조화롭게 작동하여 사용자에게 매끄럽고 신뢰할 수 있는 경험을 제공할 수 있습니다.
참고 링크 : https://medium.com/@adrikaroy/microservices-design-pattern-saga-c0f27ab3a159
'MSA(마이크로서비스)' 카테고리의 다른 글
실시간 비즈니스 혁신을 위한 이벤트 기반 아키텍처의 비밀 (0) | 2024.10.08 |
---|---|
마이크로서비스의 핵심! Service Discovery로 유연하고 확장 가능한 아키텍처 만들기 (0) | 2024.10.04 |
시스템 효율을 극대화하는 8가지 로드 밸런싱 알고리즘의 비밀 (0) | 2024.09.27 |
이벤트 기반 마이크로서비스 아키텍처: 더 나은 확장성과 유연성을 위한 해법 (0) | 2024.09.06 |
[MSA] SAGA 패턴이란 무엇인가 ? (0) | 2024.06.14 |