트랜잭션 격리 수준이란?
여러 트랜잭션이 동시에 실행될 때 발생할 수 있는 데이터 충돌을 방지하기 위한 것으로 각 단계는 트랜잭션 간에 허용되는 상호작용의 정도를 결정합니다
격리단계
1. READ UNCOMMITTED
- 가장 낮은 수준의 격리단계입니다
- 다른 트랜잭션에서 커밋되지 않은 데이터까지 읽는 것을 허용합니다.
- Dirty Read(더티 리드) 문제가 발생할 수 있습니다.
- 발생 가능한 문제: Dirty Read, Non-repeatable Read, Phantom Read
2. READ COMMITTED
- 커밋된 데이터만 읽을 수 있습니다.
- Dirty Read 문제는 방지되지만, Non-repeatable Read(반복 불가 읽기)와 Phantom Read(팬텀 리드) 문제가 발생할 수 있습니다.
- 발생 가능한 문제: Non-repeatable Read, Phantom Read
3. REPEATABLE READ
- 트랜잭션이 시작된 이후 데이터가 변경되지 않음을 보장합니다. 같은 트랜잭션 내에서 같은 데이터를 반복해서 읽어도 일관된 값을 얻을 수 있습니다.
- Non-repeatable Read 문제는 방지되지만, Phantom Read 문제는 여전히 발생할 수 있습니다.
- 발생 가능한 문제: Phantom Read
4. SERIALIZABLE
- 가장 높은 수준의 격리단계입니다.
- 트랜잭션을 직렬적으로 처리합니다.
- 모든 문제(Dirty Read, Non-repeatable Read, Phantom Read)를 방지할 수 있습니다.
- 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없어 성능이 떨어질 수 있고 동시성이 크게 줄어듭니다.
각 레벨의 요약표
Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
READ UNCOMMITED | 가능 | 가능 | 가능 |
READ COMMITTED | 불가 | 가능 | 가능 |
REPEATABLE READ | 불가 | 불가 | 가능 |
SERIALIZABLE | 불가 | 불가 | 불가 |
* Dirty Read : 하나의 트랜잭션이 아직 커밋되지 않은 데이터를 다른 트랜잭션에서 읽을 수 있게 되는 상황을 의미합니다
Non-repeatable Read : 하나의 트랜잭션이 같은 데이터를 두 번 읽을 때, 읽는 사이에 다른 트랜잭션이 해당 데이터를 수정하여 데이터가 달라지는 현상입니다.
Phantom Read : 트랜잭션이 데이터 집합을 조회할 때 처음 조회할 때 없던 레코드가 이후에 추가되거나 삭제되는 현상입니다