2. DB 격리 수준

DB 격리 수준

트랜잭션의 결과물을 데이터베이스에 적용시키는 기준을 의미

오라클의 READ COMMIT

예를 들어 오라클에선 READ COMMIT이란 격리 수준을 가짐.
READ COMMIT은 커밋된 것만 읽을 수 있다는 의미다.

만약에 특정 데이터를 수정한다면,
원래 데이터는 undo 영역에 복사되고,
해당 트랜잭션이 커밋되지 않은 동안 해당 데이터를 select하면,
undo에 복사된 데이터가 반환된다.
(즉 수정 내용이 적용되지 않는다.)
특정 트랜잭션의 변경 사항이 적용되려면 트랜잭션이 끝나고 커밋되어야한다.

문제점

update를 해도 그 즉시 데이터베이스에 적용되지 않는다.
즉 한 트랜잭션이 커밋되지 않은 상태에서 다른 트랜잭션이 개입하면
예상과 다른 결과를 얻을 수 있다.(정합성이 깨짐, Phantom read)

MySQL(InnoDB 스토리지 엔진)의 Repeatable Read

자신보다 늦은 트랜잭션의 undo는 반영하지 않는 방식.

즉 한 트랜잭션이 먼저 select로 한 데이터에 여러번 접근한다고 할 때,
중간에 다른 트랜잭션이 시작되어 해당 데이터를 수정하고 먼저 커밋되도,
먼저 시작한 트랜잭션은 자기보다 늦게 시작한 트랜잭션의 undo를 반영하지 않는다.
(즉 그냥 나보다 늦게 시작한 애가 바꾼건 신경 안쓴다.)

이 방식은 트랜잭션을 실행하고 있는 와중에는!
데이터의 정합성을 지킬 수 있다!
데이터를 조회하는 행위에도 트랜잭션처리를 해주면, 데이터 정합성을 지킬 수 있다

Share