Microservices Architecture / / 2024. 12. 9. 09:40

사가 패턴(Saga Pattern)

사가 패턴(Saga Pattern)이란 무엇인가?

사가 패턴(Saga Pattern)은 마이크로서비스 아키텍처 환경에서 분산 트랜잭션을 관리하기 위한 아키텍처적 패턴입니다. 전통적인 모놀리스 아키텍처에서는 데이터베이스 내에서 트랜잭션을 통해 ACID 특성을 보장할 수 있지만, 마이크로서비스 환경에서는 서비스별로 독립된 데이터베이스를 가지기 때문에 전통적인 의미의 전역 트랜잭션 관리(2PC, XA 트랜잭션 등)가 어렵습니다.

사가 패턴은 하나의 비즈니스 논리(프로세스)를 여러 마이크로서비스가 협력하여 처리할 때, 각 서비스가 독립적으로 자신의 로컬 트랜잭션을 실행하고, 실패 발생 시 보상(Compensation) 작업을 통해 전체적으로 일관성 있는 상태로 복구하는 분산 트랜잭션 관리 기법입니다.


사가 패턴의 기본 아이디어

  1. 로컬 트랜잭션 단위 작업:
    각 마이크로서비스는 자신이 관할하는 데이터베이스에 대해 로컬 트랜잭션을 수행합니다. 이는 해당 서비스 레벨에서 ACID를 보장할 수 있으나, 전체 비즈니스 프로세스를 아우르는 전역적 원자성은 확보하지 않습니다.

  2. 이벤트 또는 메시지 기반 워크플로우:
    사가는 일련의 서비스 호출 시퀀스로 구성되며, 각 단계가 성공하면 다음 단계로 진행하는 이벤트(메시지)를 발행합니다. 만약 어느 단계에서 실패가 발생하면, 이전에 성공한 단계들을 원상복구하기 위한 보상 트랜잭션(Compensation Transaction)을 실행합니다.

  3. 보상 트랜잭션(Compensation Transaction):
    로컬 트랜잭션이 성공한 후 후속 단계에서 오류가 발생하면, 이미 커밋된 변경 사항을 되돌려 전체적인 비즈니스 일관성을 확보해야 합니다. 사가 패턴에서는 이를 위해 각 단계마다 역방향(Undo) 작업을 정의하는 보상 트랜잭션을 둡니다. 보상 트랜잭션은 기존 ACID 트랜잭션의 롤백과 달리, 데이터 상태를 "수정"하여 일관성을 회복하는 방식으로 동작합니다.


사가 패턴의 종류

사가 패턴은 구현 방식에 따라 크게 코레오그래피(Choreography)오케스트레이션(Orchestration) 두 가지 스타일로 나눌 수 있습니다.

  1. 코레오그래피(Choreography) 사가:

    • 이벤트 주도(Event-Driven) 방식.
    • 각 서비스는 이벤트를 구독하고, 필요한 작업을 수행한 뒤 다시 이벤트를 발행합니다.
    • 중앙집중식 조정자가 없으며, 서비스들이 이벤트를 통해 느슨하게 결합되어 상호 작용합니다.
    • 장점: 단순한 이벤트 흐름으로 시작할 수 있으며, 별도의 코디네이터 없이도 동작 가능
    • 단점: 서비스 간 이벤트 의존 관계가 늘어나며, 워크플로우 파악이 복잡해짐
  2. 오케스트레이션(Orchestration) 사가:

    • 중앙 오케스트레이터(Orchestrator)가 사가의 진행 과정을 관리합니다.
    • 오케스트레이터는 특정 순서로 서비스를 호출하고, 성공/실패에 따라 다음 액션을 결정합니다.
    • 장점: 흐름 제어가 명확하고, 전체 비즈니스 로직을 한 곳에서 관리 가능
    • 단점: 중앙 오케스트레이터에 대한 의존이 생기고, 해당 부분이 복잡해질 경우 단일 장애점(Single Point of Failure)이 될 수 있음

사가 패턴 구현 시 고려사항

  1. 보상 로직 설계:
    각 로컬 트랜잭션에 대해 "되돌릴 수 있는" 보상 트랜잭션을 정의해야 합니다. 예를 들어, 재고를 감소시킨 후 주문 단계에서 실패가 발생한다면, 감소했던 재고를 다시 원래 상태로 복구하는 로직이 필요합니다.

  2. 이벤트 일관성 및 중복 처리:
    사가에서는 이벤트 기반 비동기 통신을 많이 활용합니다. 동일한 이벤트가 중복으로 발생하거나 네트워크 지연, 실패 등으로 메시지 재전달이 이루어질 수 있으므로 멱등성(Idempotency)을 보장하는 로직을 구현해야 합니다.

  3. 비즈니스 논리 단순화:
    사가 패턴은 비즈니스 프로세스를 여러 단계로 나누고, 각 단계를 독립적으로 수행하면서도 오류 발생 시 보상해야 하는 복잡한 로직을 구현해야 합니다. 가능한 한 단계를 최소화하고, 보상 로직을 명확하고 단순하게 유지하는 것이 중요합니다.

  4. 모니터링 및 로깅:
    사가 실행 과정에서 어떤 서비스가 어떤 상태에 있는지 추적하기 위해서는 충분한 로깅, 모니터링, 트레이싱을 갖추어야 합니다. 이를 통해 문제 발생 시 원인을 쉽게 파악하고 적절한 대응을 할 수 있습니다.


사가 패턴의 장점

  1. 분산 트랜잭션 관리 가능:
    2PC(XA) 같은 중앙집중식 전역 트랜잭션 관리 기법을 회피하면서도, 마이크로서비스 환경에서 비즈니스 일관성을 유지할 수 있습니다.

  2. 높은 확장성 & 유연성:
    각 서비스가 독립적으로 자신의 트랜잭션을 처리하므로, 전체 시스템이 더 탄력적입니다. 서비스별로 독립 배포, 확장, 변경이 용이합니다.

  3. 기술 스택 및 아키텍처 다양성 수용:
    다양한 언어, 프레임워크, 데이터베이스를 사용하는 마이크로서비스 환경에서 사가를 통해 전반적인 비즈니스 로직의 일관성을 확보할 수 있습니다.


사가 패턴의 단점 및 도전 과제

  1. 복잡성 증가:
    로컬 트랜잭션 및 보상 로직을 설계하고, 이벤트 흐름을 관리하는 것은 단순한 모놀리스 트랜잭션 관리보다 훨씬 복잡합니다.

  2. 개발 및 유지보수 부담:
    사가를 이해하고 올바르게 구현하기 위해서는 아키텍트, 개발자 모두 추가적인 학습과 경험이 필요합니다. 변경 시 보상 로직도 함께 수정해야 하는 등 유지보수 비용이 높아질 수 있습니다.

  3. 결과적 일관성(Eventual Consistency):
    사가 패턴은 즉각적 일관성 대신 결과적 일관성(Eventual Consistency)에 의존합니다. 즉, 어떤 시점에는 데이터 불일치 상태가 발생할 수 있으며, 이를 비즈니스적으로 수용할 수 있는지 사전에 고려해야 합니다.


결론

사가 패턴은 마이크로서비스 환경에서 분산 트랜잭션 문제를 해결하기 위한 실용적인 접근법입니다. 보상 트랜잭션을 통해 전역적인 원자성 대신 결과적 일관성을 달성함으로써, 대규모 분산 시스템에서도 유연하게 비즈니스 로직을 구현할 수 있게 합니다. 다만 설계·구현·운영 측면에서 복잡성이 증가하므로, 비즈니스 요구사항과 조직 역량, 인프라 성숙도를 종합적으로 고려한 뒤 신중히 적용하는 것이 좋습니다.

'Microservices Architecture' 카테고리의 다른 글

Actuator와 Micrometer  (1) 2024.12.09
콘웨이의 법칙(Conway’s Law)  (0) 2024.12.09
마이크로서비스(Microservices)  (0) 2024.12.09
빅데이터(Big Data)  (0) 2024.12.09
데이터 웨어하우스(Data Warehouse)  (0) 2024.12.09
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유