트랜잭션 격리 수준은 데이터베이스에서 여러 개의 트랜잭션이 동시에 실행될 때, 한 트랜잭션이 다른 트랜잭션의 변경 내용을 얼마나 볼 수 있도록 허용할지를 정의하는 기준입니다.
데이터의 일관성과 동시성 사이의 균형을 맞추기 위해 사용되며, 격리 수준이 높을수록 데이터 일관성은 높아지지만 동시 처리 성능은 낮아집니다.
격리 수준의 4가지 단계
SQL 표준은 트랜잭션 격리 수준을 총 4가지로 정의하며, 낮은 단계에서 높은 단계로 갈수록 발생하는 **데이터 부정합 문제(Isolation Problem)**를 하나씩 해결해 나갑니다.
| 격리 수준 (Level) | 발생 가능한 문제 | 특징 및 설명 |
| 0. Read Uncommitted | Dirty Read, Non-Repeatable Read, Phantom Read | 가장 낮은 수준. 커밋되지 않은 데이터를 읽는 것을 허용합니다. |
| 1. Read Committed | Non-Repeatable Read, Phantom Read | Dirty Read를 방지합니다. 커밋된 데이터만 읽는 것을 허용합니다. |
| 2. Repeatable Read | Phantom Read | Dirty Read와 Non-Repeatable Read를 방지합니다. 트랜잭션 내에서 같은 쿼리를 반복해도 항상 같은 결과를 보장합니다. |
| 3. Serializable | 없음 | 가장 높은 수준. Phantom Read까지 방지합니다. 트랜잭션을 완전히 순차적으로 실행하여 완벽한 데이터 일관성을 보장합니다. |
격리 수준별 발생 가능한 문제 (3대 부정합 문제)
각 격리 수준이 해결하려는 문제는 다음과 같습니다.
1. Dirty Read (더티 리드)
- 정의: 한 트랜잭션(T1)이 아직 커밋되지 않은 다른 트랜잭션(T2)의 변경된 데이터를 읽는 현상.
- 문제: T2가 작업을 롤백(취소)하면, T1은 존재하지 않는 데이터를 기반으로 작업을 수행하게 되어 데이터 일관성이 깨집니다.
- 해결되는 수준: Read Committed 이상 (T2가 커밋할 때까지 T1은 변경 내용을 볼 수 없음).
2. Non-Repeatable Read (반복 불가능한 읽기)
- 정의: 한 트랜잭션(T1)이 특정 데이터를 두 번 읽을 때, 그 사이에 다른 트랜잭션(T2)이 그 데이터를 **수정(UPDATE)**하고 커밋하여 두 번째 읽기 결과가 첫 번째와 달라지는 현상.
- 문제: 트랜잭션 내에서 일관성이 깨집니다.
- 해결되는 수준: Repeatable Read 이상.
3. Phantom Read (유령 읽기)
- 정의: 한 트랜잭션(T1)이 특정 조건으로 레코드 집합을 두 번 쿼리할 때, 그 사이에 다른 트랜잭션(T2)이 조건에 맞는 **새로운 레코드를 삽입(INSERT)**하고 커밋하여 두 번째 쿼리 결과에 '유령'처럼 새로운 레코드가 나타나는 현상.
- Non-Repeatable Read가 기존 레코드의 값이 바뀌는 문제라면, Phantom Read는 레코드의 개수(집합) 자체가 바뀌는 문제입니다.
- 해결되는 수준: Serializable 이상.
'면접복기' 카테고리의 다른 글
| (면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지 (0) | 2026.05.15 |
|---|---|
| (면접복기)자바 기본 타입(Primitive Type) 완벽 정리 (0) | 2026.05.15 |
| (면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계 (0) | 2026.01.27 |
| (면접복기)쓰레드 풀 vs 커넥션 풀 (0) | 2025.11.19 |