ACID



Atomicity : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장.

Consistency : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지.

Isolation : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것.

Durabillity : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함.


특히 격리성과 관련된 문제점들 중 대표적인 3가지가 아래에 있다.



리성 관련 문제점



(1) Dirty Read : 다른 트랜잭션이 커밋되지 않은 변경된 데이터를 읽게되고, 변경된 데이터가 롤백으로 인해 변경 전으로 돌아갔지만, 이미 다른 트랜잭션이 변경된 데이터를 읽게 된 것.


(2) Non-Repeatable Read : 트랜잭션 중간에 READ된 데이터에 대해 다른 트랜잭션이 중간에 끼어들어 값을 변경하고 커밋하였을 경우, 다시 READ했을 때 변경된 데이터가 나오게 되는 것.


(3) Phantom Read : 2번과 비슷해보이지만 추가적으로 값이 변경되는 경우가 아닌 컬럼 하나가 삭제 되거나 추가되는 수준.




Trancsaction Isolation Level



이러한 고립성(Isolation) 문제점들에 대해 데이터베이스에서는 4가지의 격리 레벨을 가지고 있다. 각각은 다음과 같다.


  • READ UNCOMMITED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

가장 위에서부터 설명하겠다.

1. READ UNCOMMITED : 두 개의 트랜잭션이 있을 때, 하나의 트랜잭션(T1)이 커밋하지 않은 변경된 데이터에 대해 다른 트랜잭션(T2)이 접근이 가능하다.이 때 T1이 롤백을 발생시킨다면 디비에 들어있는 실 정보와 T2가 방금전에 검색했던 값은 일치하지 않을 것이다.



2. READ COMMITED : 트랜잭션(T1)이 데이터를 READ하였고 UPDATE하였을 때, 다른 트랜잭션(T2)가 READ하면 T1가 변경하기 전인 데이터를 읽어온다. T1이 commit을 마쳤을 때 T2는 비로소 변경된 데이터를 읽을 수 있다.

3.REPEATABLE READ : 트랜잭션 내에서 한번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회 된다


4. SERIALIZABLE : 트랜잭션이 완료될 때까지 READ에 사용된 모든 데이터가 락이 거려 다른 트랜잭션이 수정 및 입력이 불가능하다




[출처 : https://lng1982.tistory.com/287http://feco.tistory.com/45]

+ Recent posts