237. 로그 기반 회복 기법 (Log-based Recovery) - 트랜잭션 장애 복구 로그 파일 구조 Redo Undo 트랜잭션 기록 데이터베이스 무결성

핵심 인사이트: (233번 회복의 뼈대 기술) 234번 Redo(다시 하기)와 235번 Undo(취소)라는 흑마법을 쓰려면, 마법책이 필요하다. DB가 벼락 맞고 뻗었다 깨어났을 때, 아무것도 안 적혀있는 백지상태라면? 엑셀의 어떤 칸이 오염됐는지, 1분 전 값이 뭐였는지 신(God)이 와도 절대 모른다! "야! 엑셀 1칸 고칠 때마다 몰래 숨겨둔 블랙박스(Log File)에다가 일기를 써!! [누가(T1) / 어느 엑셀 칸(잔고)을 / 예전 값 10만 원에서 / 새 값 5만 원으로 고침!] 이렇게 4단 콤보로 기가 막히게 한 줄 한 줄 다 적어놓으라고!! 그래야 나중에 서버 터졌을 때, 로그 싹 뒤져서 미완성인 놈은 '예전 값 10만 원'으로 되돌려버리고(Undo), 성공했는데 하드디스크에 안 박힌 놈은 '새 값 5만 원'으로 강제로 덮어써서(Redo) 완벽하게 부활시킬 거 아니야!!" 모든 회복 기법의 시작이자 끝, 영원히 타지 않는 블랙박스, 로그 기반 회복이다.

Ⅰ. 원본 엑셀(Data)만으로는 과거를 알 수 없다

  • 엑셀의 '홍길동 잔고' 칸에 **'5만 원'**이라고 적혀있고 옆에 핏자국(에러)이 있습니다.
  • 이 5만 원이 올바른 값인지, 아니면 누가 쓰다 만 찌끄러기 쓰레기인지 원본 엑셀 자체의 숫자만 봐서는 절대 알 도리가 없습니다. DB가 복구(Recovery)를 하려면 별도의 **'행동 이력 추적 장부(로그)'**가 절대적으로 필요합니다.

Ⅱ. 로그 기반 회복 기법의 개념 🌟

  • 개념: 트랜잭션이 데이터베이스의 데이터를 변경(INSERT, UPDATE, DELETE)할 때마다, 실제 원본 데이터를 건드리기 전에 **해당 변경 사항의 상세 내역(트랜잭션 ID, 변경 전 값, 변경 후 값 등)을 시간 순서대로 안전한 로그(Log) 파일에 먼저 순차적으로 기록(236번 WAL 원칙)**해 두고, 장애 발생 시 이 로그 파일을 뒤져서 시스템을 완벽한 상태로 되돌리는 가장 기본적이고 강력한 회복 기법입니다.

Ⅲ. 블랙박스(로그 레코드)의 4대 꿀 정보 🌟 핵심 기출 🌟

로그 파일에는 대충 글씨를 적는 게 아닙니다. 시스템이 알아먹게 규격화된 암호가 적힙니다.

  • <Ti, Xj, V1, V2> 구조
    1. Ti (트랜잭션 ID): 누가 사고를 쳤나? (예: T1 놈이 쳤음)
    2. Xj (데이터 아이템): 어느 엑셀 칸을 건드렸나? (예: 홍길동 계좌 칸)
    3. V1 (Before Image / 이전 값) 🌟 Undo용 무기: 고치기 전의 원래 깨끗했던 옛날 값. (예: 10만 원) ➜ 235번에서 **Undo(취소)**를 때릴 때 이 숫자를 갖다 덮어버려 과거로 돌아갑니다!
    4. V2 (After Image / 이후 값) 🌟 Redo용 무기: 고치고 난 후의 새로운 값. (예: 5만 원) ➜ 234번에서 **Redo(재실행)**를 때릴 때 이 숫자를 쇳덩어리에 강제로 쑤셔 박아 진도를 나갑니다!

Ⅳ. 로그에 남기는 3가지 상태 스탬프

DB 엔진은 복구를 위해 놈들의 '생사 여부'도 로그에 쾅쾅 찍어둡니다.

  • <Ti, START>: T1 트랜잭션이 방금 시작됨! (출생 신고)
  • <Ti, COMMIT>: T1 놈이 완벽하게 요리를 끝내고 성공 도장 쾅 찍음! (정상 퇴근) ➜ 부팅 후 이 도장이 있으면 무조건 234번 Redo(다시 덮어쓰기) 대상입니다.
  • <Ti, ABORT>: T1 놈이 일하다 피 토하고 죽음! (에러) ➜ 부팅 후 START는 있는데 COMMIT이 안 보이면(쓰다 뒈진 놈) 무조건 235번 Undo(취소) 대상입니다.

Ⅴ. 238, 239번 스포일러 (로그를 쓰는 두 가지 철학)

이 로그를 믿고 원본 엑셀(디스크)에 덮어쓰기를 **"언제 칠 것이냐?"**에 따라 로그 기반 회복 기법은 두 갈래로 나뉩니다.

  1. 지연 갱신 (Deferred Update): "야! 완벽하게 COMMIT 도장 찍고 끝날 때까지는 디스크 엑셀에 절대 글씨 쓰지 말고 로그만 끄적여!" (Undo가 필요 없는 쫄보 기법, 238번)
  2. 즉시 갱신 (Immediate Update): "야! COMMIT 안 치고 요리 중일 때도 쿨하게 디스크 엑셀에 피 튀기며 다 덮어써 버려! 에러 나면 로그 보고 벅벅 지우면(Undo) 되잖아!" (빠르지만 위험한 상남자 기법, 239번 대세)

📢 섹션 요약 비유: 로그 기반 회복(Log-based Recovery) 기법은 은행 금고 도난 사건을 완벽하게 재구성해 내는 **'CCTV 녹화 테이프와 조서 뭉치'**입니다. 은행 금고(원본 데이터베이스)의 문이 열리고 돈(데이터)이 5만 원으로 바뀌어 있습니다. 누가 털었는지, 아니면 정상적인 입금인지 금고만 봐서는 1도 알 수 없습니다(장애 발생). 이때 탐정(DB 엔진)이 구석에 숨겨진 철제 박스에서 **'출입 통제 일지(로그 파일)'**를 꺼냅니다. 그 일지에는 "[10시 5분] 김과장(Ti)이 [홍길동 금고(Xj)]를 열어서 원래 있던 [10만 원(이전 값 V1)]을 빼고 [5만 원(새 값 V2)]을 집어넣음. 그리고 [10시 6분] 정상적으로 퇴근함(COMMIT)!" 이라고 분초 단위로 완벽하게 4단 콤보가 적혀있습니다. 탐정은 일지만 보고도 "오케이, 김과장은 정상 퇴근(COMMIT) 했으니, 벼락 맞고 금고가 엉켰어도 [5만 원(V2)]을 금고에 강제로 다시 넣어주면(Redo 재실행) 완벽하군!" 이라고 1초 만에 복구 진단을 내립니다. 반면 퇴근 기록이 없으면? "이 자식 일하다 벼락 맞고 도망갔네! 당장 [10만 원(V1)]으로 옛날 상태로 덮어씌워 롤백(Undo 취소)해라!" 원본이 불타 잿더미가 되어도, 이 상세한 변동 기록 족보(로그) 하나만 있으면 우주가 터지기 0.1초 전의 상태로 시간을 완벽하게 지배하고 되돌릴 수 있는 DB 최강의 타임머신 부품입니다.