분산 트랜잭션 처리 방안
모놀리식 환경에서는 ReservationFacade 내부에서 단일 트랜잭션으로 모든 작업을 처리하지만, MSA 환경에서는 각 서비스가 독자적인 데이터베이스를 관리하기 때문에 전체 비즈니스 프로세스의 일관성을 유지하는 것이 가장 큰 이슈가 된다.
MSA (Microservices Architecture, 마이크로서비스 아키텍처)란?
하나의 애플리케이션을 작은 독립적인 서비스들로 구성하여 운영하는 아키텍처를 의미한다.
모놀리식 아키텍처와 달리, 각각의 서비스가 독립적으로 개발, 배포, 확장될 수 있는 장점이 있다.
A. 분산 트랜잭션의 한계
로컬 트랜잭션 한계: 각 서비스의 트랜잭션은 해당 서비스 내에서만 ACID를 보장하므로, 여러 서비스에 걸친 비즈니스 프로세스의 일관성은 보장하기 어려움
네트워크 장애: 서비스 간 통신 실패나 네트워크 장애로 인한 데이터 불일치 문제 발생 가능
B. 해결 방안
1. 2PC (Two-Phase Commit)

코디네이터로부터 rollback 메시지(no.9)를 받으면 각각의 참여 서비스는 rollback을 진행 후 다시 이를 코디네이터에게 알린다.
원리:
중앙 코디네이터가 모든 참여 서비스에 준비(prepare) 요청을 보내고, 모든 서비스가 준비 완료되면 최종 커밋을 수행
하나라도 실패하면 전체 롤백
장단점:
장점: 분산 환경에서도 원자성을 보장할 수 있음
단점: 중앙 코디네이터 의존, 블로킹 문제, 응답 지연 등으로 성능 및 확장성에 한계가 있음
2. SAGA 패턴

원리:
전체 비즈니스 프로세스를 여러 개의 짧은 로컬 트랜잭션으로 나눈 후, 각 단계가 성공하면 다음 단계로 진행
만약 한 단계에서 실패하면, 이전 단계의 작업을 취소하는 보상 트랜잭션을 수행하여 전체 프로세스의 일관성을 맞춤
구분:
코레오그래피 기반 : 각 서비스가 이벤트를 발행하고, 다음 서비스가 해당 이벤트에 반응하여 로컬 트랜잭션을 실행
오케스트레이션 기반 : 중앙 오케스트레이터가 각 서비스에 순차적으로 명령을 내려 전체 프로세스를 관리
장단점:
장점: 중앙 실패 지점이 없고, 각 서비스가 독립적으로 트랜잭션을 관리할 수 있어 확장성과 장애 격리가 용이함
단점: 최종 일관성(Eventual Consistency) 보장이며, 보상 트랜잭션 설계가 복잡할 수 있음
💡 이벤트 소싱(Event Sourcing)
정의
발생한 이벤트를 저장하는 기법
상태 변화를 이벤트로 기록하고, 현재 상태를 추적하는 대신에 과거의 모든 상태 변경 이벤트를 저장하는 방식
DB의 상태를 직접 저장하는 것이 아니라, 데이터의 변경사항을 이벤트로 저장하여 시스템의 상태를 재구성 할 수 있음
사가 패턴은 각 서비스에서 독립적으로 트랜잭션을 처리하고, 그 결과를 바탕으로 다음 트랜잭션을 이어 나가기 때문에 이 과정에서 이벤트 소싱을 사용하면 각 트랜잭션의 결과를 이벤트로 기록할 수 있다. (즉, 각 서비스는 트랜잭션 결과를 이벤트로 기록하고 그 이벤트를 사가 패턴의 다음 단계로 넘기는 방식으로 이어나갈 수 있다는의미)
시나리오 예시

코레오그래피(Choreography) 기반 사가
분산 통신 방식 중앙 조정 시스템 없이 각 서비스가 이벤트를 발행하고, 다른 서비스가 이를 구독하여 자신의 트랜잭션을 실행한다
이벤트 기반 처리 서비스 간의 메시지 전달로 트랜잭션이 연쇄적으로 이어지며, 각 서비스는 자신의 비즈니스 로직에 따라 이벤트에 반응한다
장점
서비스 간 결합도가 낮아 유연한 확장이 가능
중앙 관리 부하가 없으므로 시스템 전체에 분산 처리가 가능
단점
복잡한 트랜잭션 흐름을 추적하거나 디버깅하기 어려움
이벤트 순서나 누락 등의 이슈가 발생할 수 있음

오케스트레이션(Orchestration) 기반 사가
중앙 집중 제어 전용 오케스트레이터가 전체 트랜잭션의 진행을 제어하며, 각 서비스에 명령을 내려 순차적으로 로컬 트랜잭션을 실행한다
명령 기반 실행 오케스트레이터가 트랜잭션의 시작부터 종료, 오류 발생 시 보상 트랜잭션까지 전체 흐름을 관리한다
장점
전체 프로세스의 흐름을 중앙에서 명확하게 파악하고 관리
복잡한 비즈니스 로직이나 트랜잭션 순서 제어에 유리
단점
중앙 조정자가 장애를 일으킬 경우 전체 시스템에 영향을 줄 수 있음짐
오케스트레이터에 의존하게 되어 서비스 간 결합도가 높아

Last updated