1. 트랜잭션
트랜잭션 (Transaction)
- 예를 들어 A 계좌에서 B 계좌로 일정 금액을 이체한다고 가정
- A계좌 잔액 확인 (read) → A계좌 −= 이체 금액 (update) → B계좌 잔액 확인 (read) → B계좌 += 이체 금액 (update)
- 이러한 과정들이 모두 합쳐져 계좌 이체라는 하나의 작업 단위를 구성
- 데이터베이스는 이와 같이 하나의 논리적인 작업 단위를 구성하는 연산들의 집합을 트랜잭션이라고 함
트랜잭션의 필요성
- 하나의 계좌에 두 사람이 각각 다른 지점에서 동시에 100원을 인출한다고 가정
- 200원이 인출되므로 잔액이 300원이 되어야 하지만, 400원이 되는 문제가 발생
- 즉, 다중 사용자 환경에서 하나의 트랜잭션이 동시에 실행되는 다른 트랜잭션에 의해 영향을 받은 상황
- 트랜잭션은 이처럼 원치 않는 결과가 발생하지 않도록 사전에 방지하기 위해 필요
2. ACID 특성
ACID 특성 (ACID Property)
- 트랜잭션이 반드시 지켜야 할 중요한 4가지 조건
- 각 조건의 첫 문자를 인용하여 ACID 특성이라 부름
원자성 (Atomicity)
- 트랜잭션이 시작되면 정의된 연산들은 모두 성공적으로 실행되던지, 아니면 실행되기 전 상태로 되돌아가야 함 (all-or-nothing)
- ex) 잔액이 각각 400원인 A계좌에서 B계좌로 100원을 이체하는 도중 장애가 발생했을 때, 각 계좌의 잔액은 A: 300원 B: 500원 또는 A: 400원 B: 400원이어야 함
일관성 (Consistency)
- 트랜잭션의 시작 전과 완료 후의 데이터베이스 내용이 일관된 상태로 유지되어야 함
- ex) 잔액이 각각 400원인 A계좌에서 B계좌로 100원을 이체할 때, 트랜잭션 시작 전의 잔액 합은 800원이므로 트랜잭션 완료 후의 잔액 합 또한 800원이어야 함
고립성 (Isolation)
- 트랜잭션이 실행되는 과정에서 갱신한 데이터는 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조할 수 없음
- ex) 계좌 이체 트랜잭션에서 A계좌 잔액 확인 (read) → A계좌 −= 이체 금액 (update)까지 진행되었을 때, 다른 트잭션이 A계좌의 잔액을 참조할 수 없음
지속성 (Durability)
- 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 함
3. 트랜잭션의 상태
상태 종류 | 설명 |
동작 (active) | 트랜잭션이 시작되고 연산들이 정상적으로 실행 중인 상태 |
부분 완료 (partially committed) | 트랜잭션이 정의된 모든 연산의 실행이 끝난 상태 |
완료 (committed) | 트랜잭션이 성공적으로 종료된 상태 |
실패 (failed) | 트랜잭션이 완료되지 못하고 더 이상 실행되지 못하는 상태 |
중단 (aborted) | 트랜잭션이 실패한 후 실행되기 이전으로 복귀된 상태 |
종료 (terminated) | 트랜잭션이 완료되거나 중단된 상태 |
Reference
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=104610433