공유 데이터 1건

읽은 값이 아직 확정되지 않았다면, 나중에 그 읽기 근거가 사라질 수 있습니다.

Dirty Read는 단순히 값이 달라지는 문제가 아니라, 아직 존재가 보장되지 않은 중간 상태를 다른 트랜잭션이 사실처럼 사용해 버리는 현상입니다.

같은 계좌를 두 트랜잭션이 본 순간

DB의 최종 기록은 다시 100만원으로 돌아가지만, T2는 그 전에 본 50만원을 기준으로 이미 판단을 내릴 수 있습니다.

시작 상태
100만원
확정값

다른 트랜잭션이 읽어도 문제가 없는 커밋 완료 상태입니다.

문제 시점
50만원
미커밋

T1이 잠깐 만든 변경값입니다. 아직 COMMIT되지 않아 사라질 수 있습니다.

최종 확정
100만원
ROLLBACK 후

50만원은 역사에서 사라지고, 실제로 남는 값은 처음과 같은 100만원입니다.

T1
변경 시작

UPDATE 잔고 = 50만원

아직 확정 안 됨

다른 트랜잭션이 보면 안 되는 중간 상태입니다.

되돌림

ROLLBACK

T2
읽기 전

정상이라면 확정된 값만 읽어야 합니다.

Dirty Read 발생

SELECT 잔고 -> 50만원

문제의 결과

읽은 50만원은 더 이상 존재하지 않는데도, 이미 판단 근거로 사용됐을 수 있습니다.

핵심: Dirty Read의 위험은 "잠깐 다른 값을 봤다"가 아니라, ROLLBACK되면 없어질 값을 읽고도 그 값을 근거로 비즈니스 로직이 진행될 수 있다는 점입니다.