실제 피해 사례

같은 거래 안에서 판단 기준과 실행 기준이 달라지면, 읽은 값보다 비즈니스 로직이 먼저 무너집니다.

반복 불가능 읽기의 핵심은 숫자 변화 자체보다, T1이 처음 읽은 값으로 결정을 내린 뒤 실제 UPDATE는 이미 바뀐 최신 상태를 기준으로 처리된다는 점입니다.

시점
T1이 믿는 기준
실제 DB 상태
1. 처음 조회

잔액 100만원을 읽고 출금을 진행해도 된다고 판단

애플리케이션 로직은 이 값을 기준으로 다음 단계를 준비합니다.

T1 기준: 100만원

DB 최신값도 아직 100만원

이 시점에는 판단과 실제 상태가 일치합니다.

2. 중간 변경

T1은 여전히 처음 읽은 값이 유효하다고 생각

체크 로직은 그대로 남아 있어 출금 가능 판단이 유지됩니다.

T1 머릿속: 100만원

다른 트랜잭션 T2가 먼저 커밋해 잔액을 50만원으로 변경

데이터베이스의 최신 기준은 이미 바뀌었습니다.

T2 COMMIT 실제 잔액: 50만원
3. 실행 시점

T1은 100만원 기준으로 출금을 계속 진행

검증은 예전 상태에서 끝났지만, 실행은 이미 달라진 상태 위에서 일어납니다.

실제 차감은 50만원 기준으로 처리되어 모순 결과가 발생

예: 80만원 출금을 승인하면 결과가 -30만원이 될 수 있습니다.

판단은 100만원 기준 실행은 50만원 기준
왜 위험한가

반복 불가능 읽기는 "같은 값을 다시 읽었더니 달라졌다"로 끝나지 않습니다. 첫 조회를 바탕으로 세운 비즈니스 규칙이 실행 시점에는 더 이상 유효하지 않아, 승인·차감·검증 같은 후속 처리 전체가 틀어질 수 있습니다.