DB 격리 수준

Read commit

Untitled

문제점

위와 같은 경우에는 B가 트랜잭션을 시작하지않고 Select문만 실행하기 때문에 문제가 없다.

하지만

Untitled

A와 정산이라는 프로그램이 트랜잭션을 시작하고 A가 데이터를 Update 한 이후 커밋을 진행한다.

이러한 문제는 주로 입금, 출금 처리가 진행되는 금전적인 처리에서 주로 발생하며, 데이터의 정합성은 깨지고, 버그는 찾기 어려워 진다. PHANTOM READ 현상도 발생한다.

<aside> ✅ PHANTOM READ

다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안 보였다가 하는 현상

이를 방지하기 위해서는 쓰기 잠금을 걸어야 한다.

</aside>

이후 정산의 트랜잭션이 종료되지 않은 상황에 다시 데이터를 읽으면 값이 변경됨을 알 수 있다.

이는 하나의 트랜잭션내에서 똑같은 SELECT 쿼리를 실행했을 때는 항상 같은 결과를 가져와야 하는 REPEATABLE READ의 정합성에 어긋난다(부정합).

해당 문제를 해결하기 위해서는 Repeatable Read를 사용해야 한다.

Repeatable Read