MSA 프로젝트를 구현하던 도중 분산 시스템을 사용하게되면서 트랜잭션 관리가 중요해졌다. 그 방법들 중 SAGA 패턴이란 게 어떻게 작동하는지, 그리고 보상 트랜잭션에 대해 알아보게되었다.
SAGA 패턴은 분산 트랜잭션을 관리하기 위한 방법 중 하나로, 여러 개의 서비스가 서로 연관된 작업을 수행할 때 하나의 트랜잭션으로 묶어서 처리하는 게 아니라 각 서비스에서 로컬 트랜잭션을 수행하고 그 결과를 모아서 최종 결과를 만드는 방식이다.
분산 시스템에서는 여러 서비스가 서로 의존하고 있기 때문에, 하나의 서비스에서 문제가 발생하면 전체 시스템에 영향을 줄 수 있다.
SAGA 패턴을 사용하면 각 서비스가 독립적으로 트랜잭션을 처리할 수 있어서, 문제가 생겼을 때도 다른 서비스에 미치는 영향을 최소화할 수 있다.
보상 트랜잭션은 어떤 트랜잭션이 실패했을 때, 그로 인해 발생한 상태를 원래대로 되돌리기 위한 트랜잭션이다.
예를 들어 A 서비스에서 주문을 생성하고, B 서비스에서 결제를 처리했는데
결제가 실패하면 A 서비스에서 생성한 주문을 취소하는 트랜잭션이 보상 트랜잭션이다.
SAGA 패턴은 두 가지 방식으로
첫 번째 코레오그래피는 각 서비스가 서로 메시지를 주고받으며 트랜잭션을 처리하는 방식이고,
두 번째 오케스트레이션은 중앙에서 하나의 서비스가 모든 트랜잭션을 조정하는 방식이다.
SAGA 패턴은 각 서비스가 독립적으로 트랜잭션을 처리할 수 있어서 시스템의 유연성이 높아진다.
하지만 단점으로는 보상 트랜잭션을 구현하는 데 추가적인 복잡성이 생길 수 있다는 점이 있고, 모든 서비스가 성공적으로 처리되지 않으면 최종 결과가 일관되지 않을 수 있기 때문에 사용에 유의해야한다.