507 단어
3 분
트랜잭션과 격리수준(고립수준)

트랜잭션과 격리 수준#

NOTE

트랜잭션이란? 트랜잭션(Transaction)이란 데이터베이스에서 하나의 논리적인 작업 단위를 의미함.

트랜잭션의 ACID 특성#

  • Atomicity (원자성) ‘All or Nothing’ 원칙 하나라도 실패하면 전체 롤백(Rollback)
  • Consistency (일관성) 트랜잭션 실행 전후 데이터가 일관성을 유지해야 함
  • Isolation (격리성) 다른 트랜잭션의 변경이 보이지 않아야 함
  • Durability (지속성) 커밋된 데이터는 영구적으로 저장됨

트랜잭션 격리 수준과 발생하는 문제#

WARNING

트랜잭션 동시 실행 시 발생하는 문제

  • Dirty Read – 커밋되지 않은 데이터를 읽는 문제
  • Non-repeatable Read – 같은 데이터를 두 번 조회했을 때 값이 다름
  • Phantom Read – 같은 조건으로 조회했을 때 결과 행 개수가 달라짐

격리 수준별 비교

격리 수준Dirty ReadNon-repeatable ReadPhantom 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/
저자
SY
게시일
2025-05-14
라이선스
CC BY-NC-ND 4.0