Undo는 Before Image를 쓴다 미커밋 변경이 생기면, Undo 로그가 원래 값 100을 기억해 두었다가 ROLLBACK 때 다시 써 넣습니다.

핵심은 현재 값 200을 분석하는 것이 아니라, 어디를 어떤 값으로 되돌릴지 이미 로그가 알고 있다는 점입니다.

1 변경 발생
A가 100 → 200으로 수정되지만, 아직 COMMIT 전입니다.

지금의 200은 확정 결과가 아니라, 장애나 사용자 요청에 따라 취소될 수 있는 임시 상태입니다.

A.balance 100 → 200

트랜잭션이 끝나지 않았으므로 아직 원자성 검사가 끝난 상태가 아닙니다.

2 Undo 로그 기록
Undo 로그는 변경 후 값이 아니라 변경 전 값 100을 남깁니다.

Rollback이 필요해지는 순간, DBMS는 이 before image를 읽어 정확히 무엇을 복원할지 결정합니다.

[TxID: T1] [Row: A]
[Operation: UPDATE balance]
[Before Image: 100]

복구 근거는 "A를 100으로 되돌려라"라는 정보입니다.

3 ROLLBACK
장애나 ROLLBACK이 발생하면, 저장된 before image로 100을 다시 씁니다.

따라서 커밋되지 않은 200은 남지 않고, 데이터는 트랜잭션 이전의 일관된 상태로 돌아갑니다.

Undo 전 balance = 200
Undo 후 balance = 100
핵심

Undo는 "현재 값을 지운다"가 아니라, 로그가 보관한 before image를 다시 적용해 미커밋 변경을 원복하는 복구 경로입니다.