핵심 기준
T1은 최신 커밋 값을 따라가지 않고, 시작 시점 스냅샷을 끝까지 읽습니다.
같은 트랜잭션 안에서는 읽기 기준이 한 번만 정해집니다. 다른 트랜잭션이 값을 바꾸고 커밋해도, T1의 반복 조회 결과는 그 기준이 풀릴 때까지 바뀌지 않습니다.
하나의 시간축
같은 레코드를 두 레인에서 비교
시점 1
T1 시작
처음 읽는 순간 스냅샷 고정
시점 2
T2 커밋
현재 커밋 값만 50만원으로 변경
시점 3
T1 재조회
같은 SELECT 결과 유지
실제 커밋 상태
데이터베이스의 현재 최신값
100만원
아직 변경이 없으므로 현재값은 100
50만원
T2가 업데이트 후 커밋해서 최신값이 50으로 바뀜
50만원
트랜잭션 밖에서 보면 계속 50이 최신 상태
T1이 읽는 스냅샷
트랜잭션 시작 시점에 고정된 읽기 기준
100만원
첫 읽기에서 잡은 버전이 T1의 기준이 됨
100만원
T2가 커밋해도 T1의 스냅샷은 이동하지 않음
100만원
같은 트랜잭션 안의 반복 조회는 계속 같은 값 반환
무슨 일이 일어났나
값 차이가 생기는 이유
스냅샷 생성
T1은 이 시점의 커밋 버전을 기준선으로 삼습니다.
현재값과 읽기값 분리
T2의 커밋은 DB의 현재 상태만 바꾸고, T1의 읽기 기준은 바꾸지 못합니다.
COMMIT 전까지 유지
T1이 끝난 뒤 다음 트랜잭션에서야 최신값 50을 읽게 됩니다.
읽기 결과
REPEATABLE READ의 핵심은 "최신값 차단"이 아니라 "읽기 기준 고정"
입니다. 그래서 같은 트랜잭션 안에서는 실제 커밋 상태가 변해도 같은 값을 반복해서 읽습니다.