공유 자원: 계좌 잔고 한 행

같은 T1 안에서도, 두 번째 조회는 이미 다른 기준을 읽을 수 있습니다.

문제는 "틀린 값을 읽었다"가 아니라, 같은 작업 안의 읽기 기준이 100에서 50으로 바뀐다는 점입니다. 사이에 다른 트랜잭션이 커밋되면 같은 행을 다시 읽어도 결과가 달라집니다.

같은 행을 두 번 읽는 흐름
T1은 같은 데이터를 읽었지만, T2의 커밋 이후 다른 결과를 받습니다.
한 번의 트랜잭션 안에서 조회 기준이 바뀌는 순간을 시간 순서대로 보면 더 분명합니다.
시점
T1
T2
T1이 본 값
1
같은 행을 첫 조회
변경 없음
100 첫 읽기 결과
2
트랜잭션 계속 진행
값을 50으로 수정 후 COMMIT
50 이제 DB의 최신 커밋 값
3
같은 행을 다시 조회
이미 커밋 완료
50 두 번째 읽기 결과

왜 일관성이 깨질까?

T1 입장에서는 같은 기준으로 비교해야 하는데, 중간에 기준점이 바뀝니다.

그래서 계산, 검증, 화면 표시를 한 트랜잭션 안에서 다시 읽을 때 결과가 달라질 수 있습니다.

오손 읽기 아직 커밋되지 않은 값을 읽습니다. 나중에 ROLLBACK되면 애초에 없던 값을 본 셈이 됩니다.
반복 불가능 읽기 읽은 값 자체는 커밋된 값입니다. 다만 같은 T1 안에서 첫 읽기와 두 번째 읽기의 기준이 달라집니다.
핵심: 반복 불가능 읽기는 잘못된 값의 문제가 아니라, 같은 트랜잭션 안의 읽기 일관성이 깨지는 문제입니다.