로그 선기록

디스크에 의미 있는 상태를 남기기 전에는, 그 상태를 설명할 로그가 먼저 디스크에 있어야 합니다.

WAL은 "무언가를 디스크 기준으로 확정하려는 순간"마다 같은 원칙을 적용합니다. 그래서 장애가 나도 무엇을 취소하고 무엇을 다시 적용할지 구분할 수 있습니다.

공통 기준

복구의 기준점은 항상 로그입니다.

데이터 페이지가 먼저 내려가면 Undo 근거가 사라질 수 있고, COMMIT을 먼저 알리면 Redo 근거가 없는 약속이 됩니다.

1. 메모리에서 변경 발생 버퍼 캐시에는 새 데이터가 생기고, 로그 버퍼에는 변경 기록이 쌓입니다.
2. 관련 로그를 먼저 flush 디스크가 믿을 수 있는 기준점이 이 순간 만들어집니다.
3. 그다음에 결정 가능 데이터 페이지를 쓰거나, COMMIT 성공을 응답할 수 있습니다.
규칙 1

데이터 페이지를 디스크에 쓰기 전

페이지 flush는 아직 커밋되지 않은 변경도 디스크에 남길 수 있으므로, Undo 근거를 먼저 확보해야 합니다.

먼저 flush
해당 변경의 로그 레코드 데이터보다 로그가 먼저 디스크에 있어야 페이지 기록을 허용할 수 있습니다.
장애 후 의미
미완료 변경도 되돌릴 수 있음 커밋 전 페이지가 먼저 내려가도, 로그를 보고 어떤 값을 Undo할지 추적할 수 있습니다.
규칙 2

COMMIT을 성공으로 알리기 전

클라이언트에 "영구 반영됐다"고 답하는 순간이므로, Redo에 필요한 로그 전체가 먼저 디스크에 있어야 합니다.

먼저 flush
트랜잭션의 변경 로그와 COMMIT 기록 데이터 페이지가 아직 메모리에 남아 있어도, 커밋 사실을 로그로 보존해야 합니다.
장애 후 의미
커밋된 변경을 다시 적용할 수 있음 응답 직후 장애가 나도 로그를 따라 Redo하면 커밋 결과를 복원할 수 있습니다.

요점: WAL은 "로그를 먼저 디스크에 남긴다"는 한 가지 원칙으로 Undo 가능성Redo 가능성을 동시에 확보합니다.