Saga + Message Broker
<aside>
🔑
단일 데이터베이스 vs 분산 트랜잭션 (EX. Saga Pattern)
→ MSA에서 데이터의 일관성을 보장하는 방법
</aside>
트랜잭션이란?
트랜잭션(Transaction)은 데이터베이스에서 하나의 작업 단위를 의미하며, 다음의 4가지 특성(ACID)을 만족해야 합니다.
- Atomicity (원자성): 모두 성공하거나 모두 실패해야 함
- Consistency (일관성): 트랜잭션 전후 상태가 데이터베이스 규칙을 위배하지 않음
- Isolation (격리성): 동시에 수행되는 트랜잭션들이 서로 간섭하지 않음
- Durability (지속성): 트랜잭션이 성공하면 그 결과는 영구히 저장됨
⏹️ 트랜잭션
-
데이터베이스의 상태를 변경하는 작업의 단위 → 더이상 분할이 불가능한 업무처리의 단위
-
한 번에 수행되어야 할 연산을 모아 놓은 것으로
하나의 트랜잭션 안에 여러 개의 SQL 구문이 존재할 수 있다
EX) 인출과 입금 두 과정으로 이루어지는 계좌이체가 따로 이루어지면 안되는 것처럼
더 이상 분할이 안되는 작업의 단위 ⇒ 트랜잭션
트랜잭션의 4가지 특징 : ACID
- Atomicity (원자성)
- 트랜잭션이 데이터베이스에 전부 반영되거나, 혹은 전혀 반영되지 않아야 한다
(All or Nothing)
- Consistency (일관성)
- 트랜잭션의 작업 결과는 항상 일관성 있어야 한다.
- 시스템의 고정 요소는 트랜잭션 실행 전과 후에 상태가 같아야 한다는 의미
- 트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다.
- Isolation (독립성)
- 두 개 이상의 트랜잭션이 병행 실행되고 있을 때,
어떠한 트랜잭션도 타 트랜잭션의 연산에 끼어들 수 없다
- Durability (지속성)
- 트랜잭션이 성공적으로 완료되었다면, 그 결과는 영구적으로 반영되어야 한다.