HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
Database
Database
/
🏝️
트랜잭션 격리 수준
🏝️

트랜잭션 격리 수준

 

Transaction Isolation Level

트랜잭션 격리 수준은 트랜잭션의 안정성을 보장하기 위한 4가지 속성인 ACID
  • Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)
성능을 위하여 중 Isolation을 완화하여 적용하는 수준
 
 

READ UNCOMMITTED

  • 커밋 전의 트랜잭션의 데이터 변경을 다른 트랜잭션이 읽는 것 허용
  • Dirty Reads 가 발생할 수 있다.
    • 트랜잭션 A가 작성한 값을 트랜잭션 B가 읽는
notion image
 
  • 데이터를 읽을 때 lock 을 사용하지 않는다.
  • 데이터를 수정할 때는 트랜잭션이 완료될 때 까지 lock을 사용한다.
 

READ COMMITTED (Oracle Default)

  • 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
  • Non-Reapeatable Reads 가 발생할 수 있다.
    • 같은 트랜잭션 내에서 동일한 조회 쿼리에 대해 다른 값이 나오는 데이터 불일치 문제
notion image
 
  • 데이터를 읽거나 쓸 때 lock이 사용된다.
  • 데이터를 수정할 때는 트랜잭션이 완료될 때까지 lock을 사용한다.
  • 데이터를 읽을 때는 데이터를 읽은 즉시 lock을 해제한다.
  • range-lock을 관리하지 않는다.
 

REAPEATABLE READ (MySQL default)

  • 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장
notion image
 
  • Phantom Reads 가 발생할 수 있다.
notion image
  • 데이터를 읽거나 쓸 때 lock이 사용된다.
  • 데이터를 읽거나 수정할 때 모두 트랜잭션이 완료될 때까지 lock이 사용된다.
  • range-lock을 관리하지 않는다.

  • 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때가지 후행 트랜잭션이 갱신하거나 상제한는 것은 불허함으로써 같은 데이터를 두 번 쿼리했을 때 일관성 있는 결과를 리턴
  • Phantom Read 현상은 여전히 발생
 

SERIALIZABLE


• 선형 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 산입하는 것도 막아줌

  • 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가
 
  • 데이터를 읽거나 쓸 때 lock이 사용된다.
  • 데이터를 읽거나 수정할 때 모두 트랜잭션이 완료될 때까지 lock 이 사용된다.
  • range-lock을 관리한다.
notion image