더북(TheBook)

4.5 마치며

여러 서비스에 흩어져 있는 데이터를 업데이트하는 시스템 작업이 있습니다. 전통적인 XA/2PC 기반의 분산 트랜잭션은 요즘 애플리케이션에는 잘 맞지 않기 때문에 사가 패턴을 적용하는 것이 낫습니다. 사가는 메시징으로 편성한 일련의 로컬 트랜잭션입니다. 로컬 트랜잭션 각자가 한 서비스에 있는 데이터를 수정 후 커밋하기 때문에 비즈니스 규칙에 위배되어 사가를 롤백시켜야 할 경우, 보상 트랜잭션을 실행하여 변경분을 명시적으로 되돌립니다.

사가 단계를 편성하는 방식은 코레오그래피, 오케스트레이션, 두 가지입니다. 코레오그래피 사가는 로컬 트랜잭션이 이벤트를 발행하여 다른 참여자가 로컬 트랜잭션을 실행하도록 트리거합니다. 오케스트레이션 사가는 중앙의 사가 오케스트레이터가 참여자에게 로컬 트랜잭션을 실행하라고 커맨드 메시지를 보내 지시합니다. 사가 오케스트레이터를 상태 기계로 모델링하면 개발/테스트가 단순해집니다. 일반적으로 단순한 사가는 코레오그래피, 복잡한 사가는 오케스트레이션 방식이 더 나은 선택입니다.

사가는 ACID 트랜잭션과 달리 서로 격리되지 않아서 비즈니스 로직을 설계하기가 어렵습니다. 이런 비격리 ACD 트랜잭션 모델로 인한 동시 비정상은 대체 설계 전략을 적용하여 방지할 수 있습니다. 그래서 데드락이 발생할 위험을 무릅쓰고라도 비즈니스 로직을 단순화하기 위해 잠금을 해야 하는 경우도 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.