트랜잭션 격리 수준
Transaction Isolation Levels
트랜잭션 격리 수준은 동시에 수행되는 트랜잭션들이 서로의 중간 결과를 볼 수 있는 정도를 정의한 것으로, ANSI/ISO SQL 표준은 허용되는 이상현상(Dirty Read·Non-Repeatable Read·Phantom Read)에 따라 Read Uncommitted부터 Serializable까지 4단계를 규정한다.
핵심 키워드
ACID 중 격리성(Isolation)Read UncommittedRead CommittedRepeatable ReadSerializableDirty ReadNon-Repeatable ReadPhantom ReadMVCC(다중 버전 동시성 제어)스냅샷 격리·Write Skew
구성도
정리
1. 개요
- 정의: 동시 트랜잭션 간 간섭(데이터 가시성)을 제어하는 수준, ACID의 Isolation 구현 정도
- 필요성
- 완전한 직렬성은 동시성(처리량) 저하 → 정합성과 성능 간 트레이드오프 선택 필요
- 업무 특성에 맞는 격리 수준 선택으로 이상현상 방지와 성능 확보
2. 구성/원리
① 동시성 이상현상
| 이상현상 | 내용 |
|---|---|
| Dirty Read | 커밋되지 않은 다른 트랜잭션의 변경 데이터를 읽음 (이후 롤백 시 불일치) |
| Non-Repeatable Read | 같은 행을 두 번 읽는 사이 다른 트랜잭션의 수정·삭제 커밋으로 값이 달라짐 |
| Phantom Read | 같은 조건 검색을 반복할 때 다른 트랜잭션의 삽입으로 없던 행이 나타남 |
② ANSI SQL 4단계 격리 수준 (O: 발생 가능, X: 방지)
| 격리 수준 | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| Read Uncommitted | O | O | O |
| Read Committed | X | O | O |
| Repeatable Read | X | X | O |
| Serializable | X | X | X |
③ 구현 방식
- 잠금 기반(Locking): 공유·배타 락 보유 기간과 범위(행·범위·프레디킷 락)로 수준 조절, 2PL로 직렬성 보장
- MVCC: 데이터 변경 시 이전 버전 유지, 읽기는 스냅샷을 참조 → 읽기와 쓰기가 서로 차단하지 않음
- Read Committed: 문장(Statement) 시작 시점 스냅샷
- Repeatable Read/스냅샷 격리: 트랜잭션 시작 시점 스냅샷
3. 특징 및 비교
| 항목 | 낮은 격리 수준 | 높은 격리 수준 |
|---|---|---|
| 동시성·처리량 | 높음 | 낮음 |
| 정합성 | 이상현상 허용 | 강함 |
| 잠금 경합·교착상태 | 적음 | 많음 |
| 적용 예 | 통계성 조회, 대략적 집계 | 금융 이체, 재고 차감 |
- 주요 DBMS 기본값: Oracle·PostgreSQL·SQL Server는 Read Committed, MySQL InnoDB는 Repeatable Read
- InnoDB는 Next-Key Lock으로 잠금 읽기의 팬텀을 방지, PostgreSQL의 Repeatable Read는 스냅샷 격리로 동작
4. 고려사항·최신 동향
- 고려사항
- ANSI 정의는 이상현상 기준이라 불완전 → Lost Update, Write Skew 등 미포함 (Berenson 등 1995년 "A Critique of ANSI SQL Isolation Levels" 지적)
- 스냅샷 격리는 Write Skew 발생 가능 → SELECT ... FOR UPDATE, 제약조건 또는 Serializable 적용
- 동일 수준 명칭이라도 DBMS별 구현 차이 → 제품별 동작 확인 필수
- 최신 동향
- SSI(Serializable Snapshot Isolation): MVCC 기반 직렬성 보장(PostgreSQL Serializable 등)
- 분산 SQL(NewSQL)에서 분산 스냅샷·타임스탬프 기반 직렬성 제공
- 마이크로서비스 환경에서는 DB 격리 대신 Saga·보상 트랜잭션으로 정합성 관리
함께 볼 토픽
v1 · 2026. 10. 19. 갱신 · 틀린 내용을 발견하면 알려 주세요.