카테고리 없음
트랜잭션의 개념과 전략
또또니엘
2024. 11. 15. 00:03
🧐 트랜잭션?
PostgreSQL 공식 문서에서는 트랜잭션을 아래와 같이 설명하고 있다.
Transactions are a fundamental concept of all database systems. The essential point of a transaction is that it bundles multiple steps into a single, all-or-nothing operation.
트랜잭션은 모든 데이터베이스 시스템의 핵심 개념이다. 트랜잭션의 중요한 점은 여러 단계를 하나의 "전부 실행" 또는 "전혀 실행하지 않음" 방식의 작업으로 묶어 처리한다는 데 있다.
트랜잭션 흐름
트랜잭션 시작: 데이터베이스와의 작업이 시작
작업 수행: 데이터 삽입, 업데이트, 삭제 등 여러 작업이 순차적으로 실행
커밋/롤백 결정: 모든 작업이 성공적으로 완료되면 커밋하여 변경사항을 확정, 하나라도 실패하면 롤백하여 모든 변경사항을 취소
트랜잭션 종료: 트랜잭션 종료, 자원들 해제
🤯 MSA 환경에서의 트랜잭션
📕 SAGA 패턴
SAGA 패턴은 마이크로서비스 아키텍처에서 분산 트랜잭션을 관리하기 위한 패턴이다. 트랜잭션을 여러 단계로 나누어 각 단계가 독립적으로 성공하거나 실패할 수 있도록 한다. 각 단계에서 오류가 발생하면 이전 단계에서 수행한 작업을 취소(롤백)하여 일관성을 유지한다.
장점:
- 유연성: 마이크로서비스 간 느슨한 결합을 가능하게 하며, 각 서비스가 독립적으로 수행되므로 유연성이 높아진다.
- 확장성: 각 서비스가 독립적으로 동작하기 때문에 병렬 처리가 용이해지며 확장성도 높다.
단점:
- 복잡성 증가: 각 서비스에서 롤백 로직을 구현해야 하므로 코드가 복잡해진다.
- 에러 처리의 복잡성: 중간 단계에서 발생하는 에러에 대한 처리가 복잡해질 수 있다.
SAGA 패턴의 두 가지 접근 방식
1️⃣ Choreography
- 각 서비스가 독립적으로 트랜잭션을 수행하고, 필요한 경우 다른 서비스에 이벤트를 전송하여 다음 작업을 수행한다.
- 예를 들어, 주문 서비스에서 주문이 생성되면 결제 서비스에 이벤트를 전송하고, 결제가 완료되면 배송 서비스가 해당 이벤트를 받아 배송을 시작하는 방식이다.
- 장점:서비스 간 결합도가 낮아져 독립적으로 동작할 수 있습니다.
- 단점:서비스 수가 많아질수록 이벤트 흐름을 관리하기 어려워질 수 있습니다.
2️⃣ Orchestration
- 중앙에서 트랜잭션의 각 단계를 관리하는 오케스트레이터(Orchestrator)가 존재한다. 오케스트레이터는 각 서비스에 트랜잭션을 요청하고 상태를 관리하며, 오류 발생 시 롤백 로직을 조정한다.
- 장점: 중앙에서 모든 트랜잭션을 제어하므로 오류 처리와 롤백이 비교적 단순해진다.
- 단점: 중앙 오케스트레이터에 대한 의존도가 높아져, 오케스트레이터가 병목 지점이 될 가능성이 있다.
✳️ 보상 트랜잭션
보상 트랜잭션(Compensating Transaction)은 트랜잭션 처리 과정에서 발생한 오류를 해결하고 시스템의 일관성을 유지하기 위해 실행되는 "되돌리기(롤백)" 작업이다. 특히 분산 시스템이나 마이크로서비스 아키텍처에서는 각 서비스가 독립적으로 실행되고 데이터 일관성을 유지하는 것이 중요하기 때문에, SAGA 패턴과 같은 방식에서 자주 사용된다.
특징
- 비동기적 롤백 : 분산 시스템에서는 기존의 전통적인 데이터베이스 트랜잭션처럼 모든 작업을 일괄 취소하기 어렵다. 대신, 오류가 발생한 서비스의 상태를 다른 서비스에 전달하고, 필요에 따라 취소 작업을 순차적으로 실행한다.
- 각 서비스에서 별도로 정의 : 각 서비스는 고유의 보상 트랜잭션을 정의해야 한다. 예를 들어, 결제 서비스가 이미 처리된 결제를 취소할 수 있도록 하는 반면, 재고 서비스는 이미 출고된 상품을 다시 창고로 돌려놓는 작업을 해야 할 수도 있다.
- 최종 일관성 보장: 보상 트랜잭션을 통해 시스템 전체가 일관된 상태로 돌아가도록 하여, 궁극적으로 데이터의 무결성을 보장한다.