1️⃣ 트랜잭션 격리수준
Transaction Isolation Level은 데이터베이스 트랜잭션 간의 상호작용을 제어하여 데이터 일관성과 동시성을 조절하는 설정이다. 격리 수준은 트랜잭션이 다른 트랜잭션의 작업에 얼마나 영향을 받는지, 그리고 어떤 이상 현성이 발생할 수 있는지를 정의한다.
2️⃣ 정의/목적
정의
트랜잭션이 다른 트랜잭션의 변경 사항을 어디까지 볼 수 있는지, 그리고 데이터 일관성을 어느 정도 보장할지를 결정하는 수준
목적
- 데이터 일관성: 트랜잭션이 서로 간섭하지 않도록 보장
- 동시성: 여러 트랜잭션이 동시에 실행될 수 있도록 허용
trade-off:격리 수준이 높을수록 일관성은 강화되지만 동시성이 낮아지고, 반대로 격리 수준이 낮을수록 동시성은 높아지지만 일관성 문제가 발생할 수 있음
3️⃣ 이상 현상
격리 수준에서 발생할 수 있는 이상현상
1. Dirty Read (더티 리드)
- 한 트랜잭션이 커밋되지 않은 변경 사항(Dirty Data)을 다른 트랜잭션이 읽는 경우
- 예: T1이 데이터를 수정 중인데 T2가 이를 읽고, T1이 롤백되면 T2가 잘못된 데이터를 읽음
2. Non-Repeatable Read (반복 불가능 읽기)
- 한 트랜잭션 내에서 동일한 데이터를 두 번 읽었을 때, 다른 트랜잭션의 변경으로 값이 달라지는 경우
- 예: T1이 데이터를 읽은 후 T2가 수정하고 커밋, T1이 다시 읽으면 다른 값
3. Phantom Read (팬텀 리드)
- 한 트랜잭션 내에서 동일한 조건으로 쿼리를 실행했을 때, 다른 트랜잭션의 삽입/삭제로 결과 행 수가 달라지는 경우
- 예: T1이 SELECT로 5행을 조회한 후, T2가 새 행을 추가하고 커밋, T1이 다시 조회하면 6행
4️⃣ 종류
SQL 표준(ANSI/ISO)에서 정의한 4가지 격리 수준과 각 수준에서 방지되는 이상 현상
1. Read Uncommitted (읽기 비커밋)
- 설명: 커밋되지 않은 데이터(Dirty Data)를 읽을 수 있음
- 방지되는 이상: 없음
- 발생 가능 문제: Dirty Read, Non-Repeatable Read, Phantom Read
- 특징: 가장 낮은 격리 수준, 동시성 극대화, 일관성 최소화
- 사용 예: 데이터 일관성이 덜 중요한 로그 시스템
(2) Read Committed (읽기 커밋)
- 설명: 커밋된 데이터만 읽을 수 있음. Dirty Read 방지
- 방지되는 이상: Dirty Read
- 발생 가능 문제: Non-Repeatable Read, Phantom Read
- 특징: 대부분의 DBMS에서 기본 설정. 동시성과 일관성의 균형
- 사용 예: 일반적인 웹 애플리케이션
(3) Repeatable Read (반복 가능 읽기)
- 설명: 트랜잭션 내에서 동일한 데이터를 반복 읽을 때 항상 같은 값을 보장. 데이터 수정 방지
- 방지되는 이상: Dirty Read, Non-Repeatable Read
- 발생 가능 문제: Phantom Read
- 특징: 트랜잭션 동안 읽은 데이터의 일관성 보장
- 사용 예: 금융 시스템에서 데이터 변경 방지 필요 시
(4) Serializable (직렬화 가능)
- 설명: 트랜잭션이 완전히 격리되어 순차적으로 실행된 것처럼 동작. 모든 이상 방지
- 방지되는 이상: Dirty Read, Non-Repeatable Read, Phantom Read
- 발생 가능 문제: 없음
- 특징: 최고 수준의 격리, 동시성 낮음, 성능 저하 가능
- 사용 예: 데이터 일관성이 매우 중요한 경우 (예: 은행 이체)
격리 수준과 Lock
- Read Uncommitted: 거의 락 없음
- Read Committed: 쓰기 락만 사용, 읽기 시 커밋된 데이터만 확인
- Repeatable Read: 읽기 락 추가로 동일 데이터 유지
- Serializable: 범위 락(Range Lock)으로 모든 간섭 방지
5️⃣ 사용 가이드
- Read Uncommitted: 데이터 일관성보다 성능이 중요한 로그/분석 시스템
- Read Committed: 대부분의 일반 애플리케이션에 적합 (기본값)
- Repeatable Read: 데이터 수정 방지가 중요한 금융/재고 관리
- Serializable: 데이터 무결성이 최우선인 극히 민감한 작업
6️⃣ 결론
- 트랜잭션 격리 수준은 동시성과 일관성의 균형을 조절하는 핵심 설정
- 리케이션 요구사항(성능 vs 정확성)에 따라 적절히 선택해야 하며, DBMS의 기본 설정과 구현 방식(MVCC 와 Lock)을 이해하는 것이 중요