Transaction 이란?
Unit of Work. 논리적인 작업 단위를 구성하는 연산의 집합입니다.
Transaction Life Cycle
- Transaction BEGIN
- Transaction COMMIT
- Transaction ROLLBACK
- Transaction 예상치 못한 Crash 로 인한 ROLLBACK
Atomicity: "All-Or-Non"
하나의 트랜잭션 내에서 수행되는 모든 연산은 모두 성공하거나, 모두 실패해야 합니다.
일부 연산만 성공하고 나머지가 실패하는 불완전한 상태는 허용되지 않으며, 이러한 경우에는 이미 수행된 연산도 모두 원래 상태로 되돌려져야 합니다. 이러한 특성이 Atomicity 입니다.
EX) Atomicity 위배 예시
Alice 의 계좌에서 돈이 빠져나갔지만, (Transaction 중간에 DB가 Down되어) Bob 의 계좌에는 돈이 들어오지 않음.
Consistency
트랜잭션 내에서의 데이터 정합성을 보장하는 특성입니다.
Ex) Consistency 위배 예시
전체 계좌의 합은 $\$1500$ 이어야하나, 실패한 트랜잭션이 적절히 롤백되지 않아 $\$1400$ 으로 조회됨. $\$100$ 사라짐.
Isolation
데이터베이스에서는 여러 트랜잭션이 동시에 수행됩니다. 하나의 트랜잭션 안에서도 데이터베이스에 여러번 접근하며 데이터를 읽고, 변경하는 연산이 발생합니다. 이 과정에서 다른 트랜잭션이 변경한 중간 상태의 데이터를 읽게 된다면 상호간섭이 발생해 데이터 일관성이 깨질 수 있습니다. 이런 문제를 방지하기 위해 데이터베이스 시스템은 각 트랜잭션의 격리를 보장하는 메커니즘을 제공합니다. 이러한 특성을 Isolation 이라고 합니다.
EX) Isolation 위배 예시
TX A 트랜젝션 도중에 TX B 가 잔액을 조회했을 때, 중간상태의 데이터를 보게 됨. (Dirty Read)
Durability
트랜잭션 실행으로 저장된 데이터 변경 사항은 영구적으로 데이터베이스에 반영되어야 합니다.
시스템 장애가 발생해도 데이터가 손실되지 않아야 합니다.
DB의 데이터 복구 매커니즘은 Atomacity, Durability 를 보장합니다.
P.S PostgreSQL 의 COMMIT 이 제일 빠르다.