[데이터베이스] 트랜잭션(Transaction) 개념과 ACID 원칙 & 격리 수준(Isolation Level) 완전 정리
컴퓨터공학과 데이터베이스 시험이나 백엔드 개발자 면접에서 "데이터의 무결성과 동시성을 보장하는 핵심 메커니즘"을 물어볼 때 절대 빠지지 않는 주제가 있습니다. 바로 트랜잭션(Transaction)과 격리 수준(Isolation Level)입니다.
"트랜잭션이 도중에 실패하면 데이터베이스는 어떻게 원래 상태로 되돌아갈까?"
"여러 사용자가 동시에 데이터를 수정할 때 발생할 수 있는 이상 현상을 어떻게 막을 수 있을까?"
트랜잭션의 기본 개념부터 4대 원칙(ACID), 동시성 제어 격리 수준, 그리고 시험 단골 서술/단답형 문제의 핵심 포인트까지 깔끔하게 정리해 드립니다!
1. 트랜잭션(Transaction)이란?
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 최소 논리적 단위입니다. (예: 계좌 이체 - "A 계좌에서 출금" + "B 계좌에 입금" 두 작업이 모두 성공해야 완벽한 하나의 트랜잭션이 됨)
- Commit (커밋): 트랜잭션의 모든 작업이 성공적으로 끝나서 데이터베이스에 영구적으로 반영하는 연산입니다.
- Rollback (롤백): 트랜잭션 작업 중 오류가 발생하여, 작업 전의 상태로 완전히 되돌리는 연산입니다.
2. 트랜잭션의 4대 원칙 (ACID)
시험 서술형 단골 질문인 ACID 원칙은 트랜잭션이 안전하게 수행됨을 보장하기 위한 4가지 핵심 요소입니다.

- 원자성 (Atomicity):
- "All or Nothing": 트랜잭션 내의 작업들이 모두 완벽하게 성공하거나, 혹은 단 하나라도 실패하면 전부 취소(Rollback)되어야 합니다.
- 일관성 (Consistency):
- 트랜잭션이 성공적으로 완료된 후에도 데이터베이스의 모든 제약조건과 규칙(기본키, 외래키, 도메인 제약 등)을 만족해야 합니다.
- 고립성 / 격리성 (Isolation):
- 둘 이상의 트랜잭션이 동시에 실행될 때, 서로 다른 트랜잭션의 연산에 끼어들 수 없습니다. 각 트랜잭션은 독립적으로 수행되는 것처럼 보장되어야 합니다.
- 지속성 / 영속성 (Durability):
- 성공적으로 완료된(Commit된) 트랜잭션의 결과는 시스템이 다운되거나 전원이 나가도 영구적으로 보존되어야 합니다. (WAL, REDO 로그 등을 통해 보장)
3. 트랜잭션 격리 수준 (Isolation Level)과 동시성 이상 현상
고립성(Isolation)을 무조건 완벽하게(Serializable) 유지하면 동시 처리 성능(Concurrency)이 심각하게 저하됩니다. 이를 해결하기 위해 표준 SQL에서는 4단계의 격리 수준(Isolation Level)을 제공하며, 각 수준에 따라 허용되는 이상 현상(Anomalies)이 다릅니다.
🔹 동시성 제어 이상 현상 3가지
- 더티 읽기 (Dirty Read): 다른 트랜잭션이 아직 Commit하지 않은 수정 중인 데이터를 읽어갔는데, 그 후 해당 트랜잭션이 Rollback되어 유효하지 않은 데이터를 읽게 되는 현상.
- 반복 읽기 불가능 (Non-Repeatable Read): 한 트랜잭션 내에서 같은 데이터를 두 번 읽었는데, 그 사이에 다른 트랜잭션이 값을 수정(UPDATE)하고 Commit해버려 조회 결과가 달라지는 현상.
- 유령 읽기 (Phantom Read): 한 트랜잭션 내에서 조건에 맞는 데이터 목록을 조회했는데, 다른 트랜잭션이 새로운 데이터의 삽입(INSERT)이나 삭제를 수행하여 다음 조회 시 없던 유령 데이터가 나타나거나 사라지는 현상.
🔹 4가지 격리 수준 비교 (★시험 필수)
| 격리 수준 (Isolation Level) | 더티 읽기 (Dirty Read) | 반복 읽기 불가능 (Non-Repeatable Read) | 유령 읽기 (Phantom Read) |
| 1. Read Uncommitted (가장 낮음) | 발생 가능 | 발생 가능 | 발생 가능 |
| 2. Read Committed | 방지됨 (불가) | 발생 가능 | 발생 가능 |
| 3. Repeatable Read (MySQL InnoDB 기본) | 방지됨 | 방지됨 | 발생 가능 (InnoDB는 MVCC로 방지) |
| 4. Serializable (가장 높음) | 방지됨 | 방지됨 | 방지됨 |
💡 시험 단골 포인트: 격리 수준이 높아질수록 데이터 정합성은 안전해지지만, 락(Locking) 범위가 넓어져 동시 처리 성능(Concurrency)이 떨어지고 병목 현상이 발생합니다.
4. 한눈에 끝내는 핵심 요약표 (★시험 필수)
| 구분 | 주요 특징 및 내용 |
| 원자성 (Atomicity) | 트랜잭션 연산은 전부 성공하거나 전부 취소되어야 함 (All or Nothing) |
| 고립성 (Isolation) | 여러 트랜잭션이 동시 실행될 때 서로 간섭하지 않도록 보장 |
| Read Committed | 대부분의 상용 RDBMS 기본값, Dirty Read 방지 |
| Repeatable Read | MySQL InnoDB 기본값, Non-Repeatable Read 방지 |
| Serializable | 가장 엄격한 수준, 동시성 저하 및 교착 상태(Deadlock) 위험 증가 |
5. 시험 단골 출제 유형 체크
- Q. 트랜잭션의 성질 중 'All or Nothing'의 법칙을 의미하며, 전부 성공하거나 전부 취소되어야 하는 특성은?
- 👉 원자성 (Atomicity) 입니다.
- Q. 트랜잭션 격리 수준 중 다른 트랜잭션이 커밋하지 않은 수정 데이터까지 조회할 수 있어 발생할 수 있는 이상 현상은?
- 👉 더티 읽기 (Dirty Read) 이며, Read Uncommitted 수준에서 발생합니다.
- Q. MySQL InnoDB 스토리지 엔진이 기본으로 채택하고 있는 트랜잭션 격리 수준은?
- 👉 Repeatable Read 입니다.
'전공과목 > 데이터베이스' 카테고리의 다른 글
| [데이터베이스] 무결성 제약조건과 무결성 종류: 개체, 참조, 도메인 무결성 및 외래키 옵션 완벽 정리 (0) | 2026.09.03 |
|---|---|
| [데이터베이스] 관계형 데이터베이스(RDB) 모델: 테이블, 차수와 카디널리티, 키(Key) 완벽 구분 (0) | 2026.09.03 |
| [데이터베이스] 데이터베이스 기초: DB의 정의, DBMS의 특징 및 3단계 데이터베이스 구조와 데이터 독립성 완벽 정리 (0) | 2026.09.03 |
| [데이터베이스] 인덱스(Index) 개념과 B-Tree / B+Tree 구조 및 장단점 완전 정리 (0) | 2026.08.17 |
| [데이터베이스] DB 정규화(Normalization) 개념과 1NF~3NF, BCNF 단계별 완전 정리 (0) | 2026.08.16 |