1과목 · 데이터 모델링의 이해·7장
트랜잭션 (Transaction)
ACID 4성질, 트랜잭션 상태, 격리 수준, COMMIT/ROLLBACK/SAVEPOINT 구조를 정리합니다.
1. 트랜잭션이란
하나의 논리적 작업 단위. 여러 SQL이 한꺼번에 성공하거나 한꺼번에 취소되어야 하는 All-or-Nothing 묶음.
BEGIN;
UPDATE account SET balance = balance - 10000 WHERE id = 'A';
UPDATE account SET balance = balance + 10000 WHERE id = 'B';
COMMIT;
2. ACID
| 속성 | 의미 |
|---|---|
| 원자성(A) | 모두 반영 또는 모두 취소 |
| 일관성(C) | 트랜잭션 전후 규칙 만족 |
| 고립성(I) | 동시 트랜잭션이 서로 간섭하지 않음 |
| 영속성(D) | 커밋 결과는 장애 이후도 보존 |
3. 트랜잭션 상태
Active → Partially Committed → Committed / Failed → Aborted.
4. 제어 명령
| 명령 | 역할 |
|---|---|
COMMIT |
변경 확정 |
ROLLBACK |
변경 취소 |
SAVEPOINT name |
중간 지점 저장 |
ROLLBACK TO name |
이후 변경만 취소 |
BEGIN;
INSERT INTO orders VALUES (1, 100);
SAVEPOINT s1;
INSERT INTO orders VALUES (2, -50);
ROLLBACK TO s1; -- 2번만 취소
COMMIT;
5. 격리 수준과 이상 현상
| 격리 수준 | Dirty | Non-Repeatable | Phantom |
|---|---|---|---|
| READ UNCOMMITTED | O | O | O |
| READ COMMITTED | X | O | O |
| REPEATABLE READ | X | X | 일부 O |
| SERIALIZABLE | X | X | X |
- Dirty Read: 커밋 안 된 값 읽기.
- Non-Repeatable: 같은 행 재조회 시 값 변경.
- Phantom: 같은 조건 재질의 시 새 행 등장.
6. Auto vs Manual Commit
- Oracle: 기본 수동.
- MySQL/PostgreSQL: 기본 자동.
7. 자주 출제되는 포인트
- ACID 네 글자.
- SAVEPOINT + ROLLBACK TO.
- 3가지 이상 현상과 격리 수준 매핑.
- 영속성 = 커밋 후 장애 보존.
- 일관성 = 규칙 만족 (같은 값 유지가 아님).
8. 요약 체크리스트
- ACID를 한 줄씩 쓴다.
- 트랜잭션 상태 전이를 그린다.
- COMMIT/ROLLBACK/SAVEPOINT의 차이를 안다.
- 격리 수준 매트릭스를 답한다.