반응형

1. 개요

마이크로서비스 아키텍처와 같이 작은 서비스들로 이루어진 환경에서 복잡한 트랜잭션과 데이터 일관성을 효과적으로 관리하기 위해 SAGA 패턴이 사용됩니다. 이 패턴은 여러 서비스 간의 트랜잭션을 조율하고 데이터 일관성을 유지하기 위한 강력한 도구로 활용됩니다.

 

분해된 큰 트랜잭션:

SAGA 패턴은 큰 트랜잭션을 작은 단위의 작업으로 분해합니다. 각 작업은 개별적인 서비스로 구현되며, 작은 범위의 트랜잭션을 조율하는 것이 가능해집니다.

 

단위 작업의 트랜잭션:

각 단위 작업은 자체적인 트랜잭션을 가집니다. 이러한 작은 트랜잭션은 각 서비스 내에서 안전하게 수행

될 수 있습니다.

 

SAGA 관리 로직:

SAGA 패턴은 전체 트랜잭션의 흐름을 관리하는 로직을 필요로 합니다. 이 로직은 각 단계의 작업이 순차적으로 진행될 수 있도록 조율하며, 작업의 완료 여부를 확인합니다.

 

복잡한 트랜잭션의 관리:

다중 서비스 간의 복잡한 트랜잭션을 분해하고 조율함으로써 전체 시스템의 확장성과 견고성을 높일 수 있습니다.

 

구현의 복잡성과 주의사항:

SAGA 패턴은 구현이 복잡하며, 각 작업이 성공적으로 완료되지 않을 경우 컴펜세이팅 트랜잭션을 관리해야 합니다. 따라서 신중한 계획과 테스트가 필요합니다.

 

2. 종류 

 

추가/수정 패턴 (Compensating Transaction Pattern): 

이 방식은 특정 작업에 대한 성공적인 완료가 보장되지 않을 경우, 이전 작업을 취소하는 로직을 구현합니다. 이전 작업을 취소하는 로직을 "보상 트랜잭션" 또는 "컴펜세이팅 트랜잭션"이라고 합니다. 이러한 컴펜세이팅 트랜잭션들이 순차적으로 실행되며, 일련의 작업들의 트랜잭션을 조율하게 됩니다.

 

사가 로깅 패턴 (Saga Logging Pattern): 

이 방식은 각 단계의 트랜잭션 상태와 진행 여부를 기록하는 로깅 메커니즘을 사용하여 트랜잭션의 상태를 추적합니다. 각 작업이 시작되고 완료될 때 로그를 남기고, 다음 작업으로 진행 여부를 확인할 수 있도록 합니다.

 

3. 장단점

 

장점

분산 시스템에서 트랜잭션 조율: 마이크로서비스 아키텍처와 같은 분산 시스템에서 여러 서비스 간의 트랜잭션을 조율하는데 유용합니다. 각 서비스의 트랜잭션을 분리하여 더 작은 범위에서 관리하고, 전체 시스템의 유연성과 확장성을 향상시킵니다.

부분 실패에 대한 대응: 일부 서비스에서 오류가 발생하여 트랜잭션이 실패할 경우, 해당 작업만 롤백하고 다른 작업은 계속 진행할 수 있습니다. 이로써 전체 트랜잭션을 망가뜨리지 않고 일부 실패를 처리할 수 있습니다.

변경의 용이성: 각 단위 작업은 개별적인 서비스로 구현되므로, 각 서비스의 변경이 다른 서비스에 영향을 덜 주며 유지보수가 용이합니다.

 

단점

구현 복잡성: SAGA 패턴은 복잡한 구조를 가지며, 작은 단위의 트랜잭션과 그에 따른 컴펜세이팅 트랜잭션을 구현해야 합니다. 이로 인해 개발과 유지보수가 어려울 수 있습니다.

컴펜세이팅 트랜잭션 처리의 어려움: 각 작업이 성공적으로 완료된 후 다음 작업으로 진행하는 것이 아니라, 중간에 실패할 경우 이전 작업을 롤백하고 컴펜세이팅 트랜잭션을 실행해야 합니다. 이런 컴펜세이팅 트랜잭션의 구현은 복잡하고 예외 처리가 중요합니다.

장애 복구 어려움: 트랜잭션 조율 중에 실패가 발생하거나 일부 서비스가 다운되면 전체 SAGA 트랜잭션이 실패할 수 있습니다. 이러한 상황에서의 복구 작업은 복잡하고 신중한 처리가 필요합니다.

응답 시간 지연: 각 작업이 별도의 트랜잭션으로 실행되기 때문에 전체 SAGA 트랜잭션이 완료될 때까지 시간이 걸릴 수 있습니다. 이로 인해 응답 시간이 지연될 수 있습니다.

 

 

SAGA 패턴은 복잡한 분산 시스템에서 효과적인 데이터 일관성과 트랜잭션 관리를 위한 방법이지만, 그 구현과 관리가 쉽지 않을 수 있습니다. 사용 시에는 장점과 단점을 고려하여 상황에 맞게 적용해야 합니다.

반응형

'이론 정리' 카테고리의 다른 글

Blocking/Non-blocking, Sync와 Async: 개념과 예시  (0) 2023.08.17
[OOP] 객체지향 프로그래밍  (0) 2021.02.27
한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11

+ Recent posts