공통 상황

두 격리 수준 모두 같은 사건을 겪지만, ReadView를 다시 만들지 여부가 결과를 바꿉니다.

한 트랜잭션이 같은 행을 두 번 읽는 동안, 다른 트랜잭션이 값을 바꾸고 커밋했다고 가정합니다.

1. 첫 번째 조회 T1 SELECT → 값 100

이 시점의 스냅샷이 기준이 됩니다.

2. 중간 변경 T2 UPDATE + COMMIT

행의 최신 값이 200으로 바뀝니다.

3. 다시 조회 T1 SELECT 한 번 더

여기서 새 ReadView를 만들면 결과가 달라집니다.

READ COMMITTED

조회할 때마다 새 스냅샷

두 번째 SELECT는 커밋이 끝난 뒤 다시 기준을 잡습니다.

ReadView 생성 시점

매 SELECT마다 새로 생성

두 번째 SELECT 결과

값 200이 보임

왜 그렇게 보이나

두 번째 조회 시점에는 T2의 커밋이 이미 반영된 최신 스냅샷을 사용하기 때문입니다.

핵심: 같은 트랜잭션 안에서도 조회 시점이 바뀌면 보이는 버전이 바뀔 수 있습니다.

REPEATABLE READ

첫 조회의 스냅샷을 계속 재사용

트랜잭션 안의 모든 일반 SELECT가 같은 기준을 유지합니다.

ReadView 생성 시점

첫 SELECT 한 번만 생성

두 번째 SELECT 결과

값 100이 그대로 보임

왜 그렇게 보이나

처음 만든 ReadView로 계속 비교하므로, 중간에 커밋된 최신 버전은 스냅샷 밖으로 남습니다.

핵심: 반복 조회 결과를 일정하게 유지해 같은 트랜잭션 안에서 일관된 스냅샷을 제공합니다.