CS/데이터베이스

트랜잭션 격리 수준(Transaction Isolation Levels)

koka 2025. 3. 21. 18:24

트랜잭션의 격리 수준

  • 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것
    • SERIALIZABLE
    • REPEATABLE READ
    • READ COMMITTED
    • READ UNCOMMITED

SERIALIZABLE

  • 가장 엄격한 격리 수준으로 트랜잭션을 순차적으로 진행한다.
  • 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없다.
  • 트랜잭션이 순차적으로 처리되어야 하므로 동시 처리 성능이 매우 떨어짐

REPEATABLE READ

  • RDBMS는 변경 전의 레코드를 언두 공간에 백업해두기 때문에 변경전/ 후 데이터가 모두 존재 하므로, 여러버전의 데이터가 존재한다고 하여 이를 MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어)
  • MVCC를 이용해 한 트랜잭션 내에서 동일한 결과를 보장하지만, 새로운 레코드가 추가되는 경우에 부정합 생길 수 있는 방법

READ COMMITTED

  • 커밋된 데이터만 조회할 수 있다.
  • Phantom Read에 더해 Non-Repeatable Read(반복 읽기 불가능)문제까지 발생

READ UNCOMMITTED

  • 커밋하지 않는 데이터 조차도 접근할 수 있는 격리 수준
  • 다른 트랜잭션의 작업이 커밋 또는 롤백되지 않아도 즉시 보이게 된다.

격리수준 요약

  • READ UNCOMMITTED는 부정합 문제가 지나치게 발생
  • SERIALIZABLE은 동시성이 상당히 떨어진다.
  • READ COMMITTED 또는 REPEATABLE READ를 사용하면 된다.