Transaction
트랜잭션(Transaction)은 데이터베이스 상태를 변환시키는 하나의 논리적 작업 단위를 뜻합니다. 트랜잭션은 완전히 실행되거나(Commit), 완전히 취소되어야(Rollback) 합니다.
1. example
은행에서 계좌 이체 작업:
- 송금 계좌에서 돈을 차감.
- 수신 계좌에 돈을 추가.
이 두 작업은 하나의 트랜잭션으로 묶여야 하며, 둘 중 하나라도 실패하면 전체 작업이 취소되어야 합니다.
2. 트랜잭션의 주요 특성 (ACID)
트랜잭션은 ACID 속성을 만족해야 합니다:
2.1 Atomicity (원자성)
- 트랜잭션은 모두 성공하거나 모두 실패해야 합니다.
- 작업의 일부만 실행되거나 중단되지 않도록 보장합니다.
ex) 계좌 이체에서 돈이 빠져나갔는데 입금이 되지 않으면 전체 작업을 취소해야 합니다.
2.2 Consistency (일관성)
- 트랜잭션이 실행되기 전과 실행된 후의 데이터베이스 상태는 항상 일관성 있는 상태를 유지해야 합니다.
- 모든 무결성 제약 조건(예: 외래 키, 고유성 제약 등)을 만족해야 합니다.
ex) 계좌 간 송금 시 총 잔액의 합은 변하지 않아야 합니다.
2.3 Isolation (격리성)
- 하나의 트랜잭션이 완료되기 전까지 다른 트랜잭션이 해당 데이터를 참조하거나 변경하지 못하도록 해야 합니다.
ex) A와 B가 동시에 같은 계좌를 수정할 경우 충돌이 발생하지 않아야 합니다.
2.4 Durability (지속성)
- 트랜잭션이 완료된 이후의 결과는 시스템 오류가 발생하더라도 영구적으로 저장되어야 합니다.
ex) 송금이 완료되었다면, 시스템이 다운되더라도 결과는 보존되어야 합니다.
3. 트랜잭션 상태
트랜잭션은 다음의 상태를 거칠 수 있습니다:
- Active: 트랜잭션이 시작되어 작업이 수행 중인 상태.
- Partially Committed: 작업이 완료되었으나, 최종 Commit 전 상태.
- Committed: 트랜잭션이 성공적으로 완료되어 데이터베이스에 반영된 상태.
- Failed: 오류가 발생하여 트랜잭션이 중단된 상태.
- Aborted: 트랜잭션이 실패하여 Rollback이 수행된 상태.
4. 트랜잭션 격리 수준 (Transaction Isolation Levels)
트랜잭션 간 동시성 제어를 위해 격리 수준을 설정할 수 있습니다.
격리 수준에 따라 발생할 수 있는 동시성 문제가 다릅니다:
격리 수준 | Dirty Read | Non-Repeatable Read | Phantom Read |
---|---|---|---|
Read Uncommitted | 허용 | 허용 | 허용 |
Read Committed | 허용 안 됨 | 허용 | 허용 |
Repeatable Read | 허용 안 됨 | 허용 안 됨 | 허용 |
Serializable | 허용 안 됨 | 허용 안 됨 | 허용 안 됨 |
주요 격리 수준
- Read Uncommitted
- Commit되지 않은 데이터를 읽을 수 있음.
- 문제: Dirty Read, Non-Repeatable Read, Phantom Read.
- Read Committed
- Commit된 데이터만 읽을 수 있음.
- 문제: Non-Repeatable Read, Phantom Read.
- Repeatable Read
- 동일한 데이터를 여러 번 읽어도 결과가 항상 동일함.
- 문제: Phantom Read.
- Serializable
- 가장 높은 격리 수준으로, 모든 트랜잭션을 순차적으로 처리함.
- 문제: 성능 저하.
5. 트랜잭션 관리 명령어
데이터베이스에서 트랜잭션을 관리하기 위한 명령어는 다음과 같습니다:
- BEGIN/START TRANSACTION: 트랜잭션 시작.
- COMMIT: 트랜잭션 완료 후 변경 사항을 확정.
- ROLLBACK: 트랜잭션을 취소하고 변경 사항을 원래 상태로 복구.
- SAVEPOINT: 트랜잭션 내 특정 시점으로 되돌리기 위한 체크포인트 설정.
6. 트랜잭션 활용 사례
- 은행 업무: 송금, 예금, 대출.
- 전자상거래: 주문 처리, 재고 관리.
- 결제 시스템: 결제 승인, 취소.
- CRM 시스템: 고객 데이터 동시 업데이트.
7. 관련 기술
- 2-Phase Commit (2PC): 분산 트랜잭션을 위한 Commit 프로토콜.
- XA Transactions: 분산 환경에서 여러 리소스를 대상으로 트랜잭션을 처리하기 위한 표준.
This post is licensed under CC BY 4.0 by the author.