Redo Log와 Undo Log를 어떻게 구분해야 하는가
둘 다 왜 필요한가
트랜잭션과 복구를 이해하려면 redo log와 undo log를 분리해서 볼 수 있어야 한다. 둘 다 “로그”지만 목적이 다르다.
- undo log: 이전 상태로 되돌리기
- redo log: 커밋된 변경 다시 반영하기
즉, undo는 rollback과 MVCC 쪽, redo는 crash recovery와 durability 쪽에 가깝다.
Undo Log
데이터를 변경하기 전에 이전 값을 남겨두는 로그다.
역할:
- 롤백 시 원복
- MVCC에서 과거 버전 제공
그래서 undo log는 단순 복구 기록이 아니라 읽기 일관성에도 관여한다.
Redo Log
변경 사실을 다시 적용할 수 있게 남기는 로그다.
역할:
- 커밋된 변경 보존
- 장애 후 재적용
데이터 파일에 변경이 완전히 반영되기 전에 로그를 먼저 안정적으로 남겨서, 장애가 나더라도 복구 가능하게 한다.
함께 보면 이해가 쉬운 흐름
- 트랜잭션이 row 변경 시작
- 변경 전 값은 undo에 남김
- 변경 내용은 메모리/버퍼에 반영
- redo log에 기록
- commit
- 장애 시 redo로 복구, rollback 시 undo로 원복
자주 헷갈리는 점
- undo가 durability를 직접 책임지는 것은 아니다.
- redo가 과거 읽기 버전을 제공하는 것은 아니다.
- 둘은 대체 관계가 아니라 역할 분담 관계다.
정리
undo log는 “되돌리기”, redo log는 “다시 반영하기”라고 기억하면 시작이 쉽다. 트랜잭션 내부 동작, MVCC, crash recovery를 이해할수록 두 로그의 역할 차이가 더 분명해진다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
댓글
아직 댓글이 없습니다