507 단어
3 분
트랜잭션과 격리수준(고립수준)
트랜잭션과 격리 수준
NOTE트랜잭션이란? 트랜잭션(Transaction)이란 데이터베이스에서 하나의 논리적인 작업 단위를 의미함.
트랜잭션의 ACID 특성
- Atomicity (원자성) ‘All or Nothing’ 원칙 하나라도 실패하면 전체 롤백(Rollback)
- Consistency (일관성) 트랜잭션 실행 전후 데이터가 일관성을 유지해야 함
- Isolation (격리성) 다른 트랜잭션의 변경이 보이지 않아야 함
- Durability (지속성) 커밋된 데이터는 영구적으로 저장됨
트랜잭션 격리 수준과 발생하는 문제
WARNING트랜잭션 동시 실행 시 발생하는 문제
- Dirty Read – 커밋되지 않은 데이터를 읽는 문제
- Non-repeatable Read – 같은 데이터를 두 번 조회했을 때 값이 다름
- Phantom Read – 같은 조건으로 조회했을 때 결과 행 개수가 달라짐
격리 수준별 비교
| 격리 수준 | Dirty Read | Non-repeatable Read | Phantom Read |
|---|---|---|---|
| READ UNCOMMITTED | ❌ 발생 | ❌ 발생 | ❌ 발생 |
| READ COMMITTED | ✅ 방지 | ❌ 발생 | ❌ 발생 |
| REPEATABLE READ (MySQL 기본) | ✅ 방지 | ✅ 방지 | ❌ 발생 가능 |
| SERIALIZABLE | ✅ 방지 | ✅ 방지 | ✅ 방지 |
Phantom Read가 발생하는 이유
MySQL의 REPEATABLE READ는 트랜잭션이 시작될 때 조회한 데이터를 유지하지만 새로운 행의 추가(INSERT)는 막지 않음
- 해결 방법: SELECT … FOR UPDATE 사용 또는 SERIALIZABLE 적용
MVCC (Multi-Version Concurrency Control)
NOTE💡 MVCC란? 각 트랜잭션이 시작될 때, 해당 시점의 데이터 스냅샷을 유지 다른 트랜잭션에서 변경이 일어나도 내 트랜잭션에서는 변경 전 데이터가 유지됨
MVCC의 장점
- 락 없이도 성능 최적화 가능
- 읽기 작업과 쓰기 작업을 동시에 수행 가능
- 트랜잭션 간 충돌 최소화
MVCC의 단점
- 데이터 버전이 증가하여 스토리지 사용량 증가
- Garbage Collection 필요
MySQL InnoDB는 MVCC를 사용하여 트랜잭션 성능을 최적화함
트랜잭션과 격리수준(고립수준)
https://devlog.jpstudy.org/posts/2025/cs/transaction_flow/