Knowledge

[Knowledge] Transaction Isolation level이란? (격리수준)

Jeong Jeon
반응형

오늘은 Transaction Isolation Level을 공부해보자.

트랜잭션 격리수준 (Isolation level)이란 동시다발적으로 여러 트랜잭션이 처리될때 트랜잭션간에 서로를 방해하게 둘지 말지 결정하는, 얼마나 서로 고립되어있는지를 나타내는 수준이다.

한 트랜잭션이 다른 트랜잭션이 변경한 데이터를 조회할수 있게 할지말지 결정하는데, 격리 수준에 따라 다르다.

 

그럼 격리 수준(Level)을 한번 알아보자.

 

격리 수준 DIRTY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITTED O O O
READ COMMITTED   O O
REPEATABLE READ     O(InnoDB는 발생 X)
SERIALIZABLE      
  1. READ UNCOMMITTED (Level 0) : 커밋되지 않은 읽기

    Select 조회가 수행되는동안 해당 데이터에 Shared Lock이 걸리지 않는다.
    트랜젝션 처리중이거나 commit되지 않은 데이터들을 다른 트랜잭션이 조회하는것을 허용하는 수준.
    따라서 데이터베이스의 일관성을 유지하는게 불가능하다
    여기서 중요한 내용이 하나 나온다.  Dirty Read 가 발생한다.
    <상황> :  A트랜잭션이 떡볶이가격을 만원에서 100만원으로 변경, commit을 하기 직전에 B트랜잭션이 떡볶이 가격을 조회한다. 이때 B는 100만원으로 조회하여 본인의 로직을 수행하게된다.
    하지만 이순간 A트랜잭션에서 문제가 발생해 Rollback을 하게 되면 다시 떡볶이는 만원이된다.
    이순간 B트랜잭션은 100만원으로 로직을 수행했는데,,,, 이런상황이 데이터 정합성이 맞지 않게된다고한다.

  2. READ COMMITTED (Level 1): 커밋된 읽기

    Select 조회가 수행되는 동안 해당 데이터에 Shared Lock이 걸린다.
    Commit이 이루어진 트랜잭션만 조회가 가능한데, Oracle DB 등에서 기본적으로 사용되는 격리 수준이다.
    일반적으로 우리가 사용하고 있다고 보면된다..
    특정 트랜잭션이 수행되는동안 다른 트랜잭션은 접근하지않고 대기한다.
  3. REPEATABLE READ (Level2) : 반복가능한 읽기

    트랜잭션이 완료될떄까지 Select 조회가 사용되는 모든 데이터에 Shared Lock이 걸린다.
    특정 트랜잭션은 자신보다 늦게 발생한 트랜잭션의  데이터를 조회하지않고, Undo 영역에 저장되어있는 자신과 같거나 자신보다 빠른 트랜잭션의 최종 데이터를 조회하여 사용한다.
    결국 최종 변경된 값을 가져와 읽기보다는, 트랜잭션의 현재 상태에서의 데이터를 가져와 사용한다고 보면된다.
    A트랜잭션이 떡볶이의 가격 100만원을 조회, B트랜잭션이 떡볶이 가격을 만원으로 수정하고 커밋, A트랜잭션이 떡볶이가격을 다시 조회했을때 100만원을 조회한 상태로 사용한다.
    동일한 트랜잭션에서는 다른 트랜잭션이 데이터를 변경(commit) 하더라도 처음과 동일한 데이터를 보장한다.
  4. SERIALIZABLE (Level3) : 직렬화 가능

    트랜잭션이 완료될때까지 Select 조회가 사용되는 모든 데이터에 Shared Lock이 걸린다.
    다른 유저는 트랜잭션에서 사용하는 데이터에 대한 수정과 입력자체가 불가능하다.
    트랜잭션 고립 레밸이 높아질수록 성능은 떨어질수밖에 없지만, 일반적으로 Read commited(Oracle) 나 repeatable read(Mysql) 을 사용한다고 한다.

 

여기까지 Isolation Level을 알아봤는데, 고려해야 될 사항들이 있다.
바로 동시성과 무결성 이다. 무결성이라는 말이 계속 나오는데, 자세히 알아두도록 하자.

  1. 동시성 : 동시성이란 싱글 코어에서 Multi Thread를 구성하여 Context Switching을 통해 두 Thread가 동시에 일어나는것 처럼! 처럼! 보이게 하는것이다.

  2. 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는것을 말한다.
    - 개체 무결성 (Entity Integrity) :
    모든 Table은 Primary Key로 된 Field를 가져야하며, Pk로 이루어진 Field는 Null이 될 수 없다.

    - 참조 무결성 (Referential Integrity) :

    RDBM 에서는 참조관계에 있는 두 테이블의 데이터가 항상 일관된 값을 유지하는 것을 말한다. 쉽게 보면 FK는 있는데, PK가 없을 수없다는 말이다.(참조할 데이터가 없다)

    - 도메인 무결성 (Domain Integrity) : 

    테이블에 존재하는 필드의 무결성을 보장하는것으로, 필드의 타입, Null 허용 등 제약사항을 정의하고 올바른 데이터가 입력됬는지 확인한다.

    - 무결성 규칙 (Integrity Rule) : 

    데이터의 무결성을 지키기위한 모든 제약(규칙)사항들을 지칭한다.
반응형