[DB] 08. 트랜잭션(Transaction)과 ACID
1. 트랜잭션(Transaction)이란?
트랜잭션은 데이터베이스에서 하나의 작업 단위를 의미한다.
여러 개의 SQL 문이 하나의 묶음으로 실행되고, 이 묶음 전체가 모두 성공하거나, 아니면 전부 실패하도록 보장하는 개념이다.
즉, 트랜잭션은 “중간 상태를 허용하지 않기 위한 장치”라고 볼 수 있다.
2. 트랜잭션이 필요한 이유
다음과 같은 상황을 생각해보자.
A 계좌에서 10,000원을 출금해 B 계좌로 입금하는 작업이 있다.
- A 계좌 잔액 감소
- B 계좌 잔액 증가
이 두 작업은 반드시 함께 성공해야 한다.
만약 출금만 되고 입금이 되지 않는다면, 데이터는 즉시 잘못된 상태가 된다.
이 두 작업을 하나의 트랜잭션으로 묶지 않으면, 이런 문제가 발생할 수 있다.
3. 트랜잭션의 기본 동작
트랜잭션은 보통 다음 흐름으로 동작한다.
- 트랜잭션 시작
- 여러 SQL 문 실행
- 문제 없으면 COMMIT
- 문제 발생 시 ROLLBACK
BEGIN; UPDATE account SET balance = balance - 10000 WHERE id = 'A'; UPDATE account SET balance = balance + 10000 WHERE id = 'B'; COMMIT;
중간에 오류가 발생하면, COMMIT 대신 ROLLBACK이 수행되어 모든 변경 사항이 취소된다.
4. COMMIT과 ROLLBACK
COMMIT은 트랜잭션 내 작업을 “확정”하는 명령이다.
ROLLBACK은 트랜잭션 내 작업을 “모두 취소”하는 명령이다.
ROLLBACK이 수행되면, 트랜잭션 시작 이전 상태로 되돌아간다.
5. ACID란?
ACID는 트랜잭션이 가져야 할 네 가지 성질을 묶어 부르는 용어다.
5-1. Atomicity (원자성)
트랜잭션은 더 이상 쪼갤 수 없는 하나의 단위다.
모든 작업이 성공하거나, 모든 작업이 실패해야 한다.
5-2. Consistency (일관성)
트랜잭션이 완료된 후에도 데이터는 항상 일관된 상태를 유지해야 한다.
제약조건, 무결성 규칙을 깨는 상태로 트랜잭션이 끝나서는 안 된다.
5-3. Isolation (격리성)
동시에 실행되는 트랜잭션은 서로 영향을 주지 않아야 한다.
하나의 트랜잭션이 처리 중인 중간 결과를 다른 트랜잭션이 함부로 볼 수 없어야 한다.
5-4. Durability (지속성)
트랜잭션이 COMMIT되면, 그 결과는 시스템 장애가 발생해도 유지되어야 한다.
DBMS는 로그, 디스크 기록 등을 통해 이를 보장한다.
6. 자동 커밋(Auto Commit)
많은 DBMS는 기본적으로 자동 커밋 모드를 사용한다.
이 경우 SQL 문 하나가 실행될 때마다 자동으로 COMMIT된다.
여러 작업을 하나의 트랜잭션으로 묶고 싶다면, 자동 커밋을 끄고 명시적으로 트랜잭션을 관리해야 한다.
7. 트랜잭션 범위를 잘못 잡으면 생기는 문제
- 트랜잭션이 너무 길면 락이 오래 유지된다
- 동시 처리 성능이 떨어진다
- 데드락 발생 가능성이 커진다
그래서 트랜잭션은 필요한 작업만 포함하도록 짧게 유지하는 것이 중요하다.
8. 정리
- 트랜잭션은 여러 작업을 하나로 묶는 단위다
- COMMIT은 확정, ROLLBACK은 취소다
- ACID는 트랜잭션의 기본 성질이다
- 트랜잭션 범위는 최소한으로 유지하는 것이 좋다
'Computer Science > Database' 카테고리의 다른 글
| [DB] 10. 인덱스(Index)와 성능 최적화 (0) | 2026.02.07 |
|---|---|
| [DB] 09. 동시성 문제와 격리 (0) | 2026.02.07 |
| [DB] 07. JOIN의 종류와 동작 원리 (0) | 2026.02.07 |
| [DB] 06. SQL 기본 구조와 SELECT 실행 순서 (0) | 2026.02.07 |
| [DB] 05. 정규화(Normalization) (0) | 2026.02.04 |