241. 검사점 (Checkpoint) 회복 기법 - Checkpointing 복구 시간 단축 Redo 한계 로그 기반 회복 버퍼 플러시(Flush) 데이터베이스 최적화
핵심 인사이트: (237번 로그 회복 기법의 구원자) "야! 로그(Log) 기반으로 Redo, Undo 때려서 살려내는 건 좋은데 치명적인 병이 있어!! 서버가 3년 만에 처음 뻗었다고 쳐봐. 재부팅 했더니 DB가 '아싸 복구해 볼까~' 하면서 3년 치 쌓인 100억 줄짜리 로그 파일을 처음부터 끝까지 다 뒤지면서 Redo(재실행)를 때리고 앉아있어!! 복구하는 데만 1달이 걸려서 회사가 파산한다고!! 사장님이 도끼를 들었다. '야 ㅆㅂ!! 3년 전 걸 왜 뒤져!! 1시간에 한 번씩, 램(메모리)에 있던 완성된 데이터를 디스크(쇳덩어리)로 싹 다 강제로 내려서 덮어써 버리고(Flush), 로그 파일에다가 [여기까지 완벽 저장 끝! Checkpoint!] 도장을 쾅 찍어놔!! 그럼 나중에 서버 터져서 뻗었을 때, 3년 전 로그부터 볼 필요 없이 가장 최근에 찍은 [Checkpoint] 도장 선부터 뒤로 1시간 치 로그만 읽어서 복구(Redo)하면 복구가 1분 만에 끝나잖아!!'" 100억 줄짜리 로그의 검색 범위를 1초 만에 잘라내어, 시스템 부활 시간을 로켓으로 당겨버리는 세이브 포인트, 검사점 기법이다.
Ⅰ. 무한 로그 검색의 끔찍한 절망 (복구 지연)
- 234, 235번에서 배운 Redo/Undo 흑마법은 완벽합니다. 단, "어디서부터 로그를 읽을 것인가?"가 문제입니다.
- DB가 부팅되면, 룰에 따라 **'로그 파일의 맨 처음(수십 년 전)'**부터 무식하게 쭉 훑어 내려오며
COMMIT도장 찍힌 놈들을 모조리 쇳덩어리에 다시 쑤셔 박아 넣습니다(Redo). - 어차피 10년 전 데이터는 이미 옛날 옛적에 쇳덩어리 디스크에 완벽하게 굳어있는데, 그걸 바보같이 100번 1,000번 반복해서 Redo 덮어쓰기를 헛발질하며 복구 시간(Downtime)을 미친 듯이 늘려버립니다.
Ⅱ. 검사점 (Checkpoint) 회복 기법의 개념 🌟
- Checkpoint (확인점, 세이브 포인트)
- 개념: 무식한 로그 검색을 막기 위해, DB 운영 중 주기적으로(예: 10분마다) 메인 메모리(버퍼)에 쌓여있는 모든 찌끄러기 변경 데이터와 로그들을 강제로 쇳덩어리 물리 디스크로 밀어내어(Flush) 안전하게 100% 영구 보존시키고, 그 시점을 로그 파일에
<CHECKPOINT>라는 거대한 이정표로 쾅 박아두는 최적화 회복 기법입니다.
Ⅲ. 검사점(Checkpoint)이 찢어버린 복구 프로세스 🌟 핵심 기출 🌟
벼락을 맞고 재부팅된 DB의 복구 속도가 1만 배 빨라집니다.
- 이정표 찾기 (타임머신 탑승): DB가 눈을 뜨자마자 로그 맨 처음이 아니라, 로그 파일의 가장 마지막 맨 끝단부터 거꾸로 올라가면서 가장 최근에 찍힌
<CHECKPOINT>도장을 찾습니다. - 과거의 절단 (Redo 스킵) 🌟:
- 아싸! 3시간 전에 찍힌
<CHECKPOINT>도장을 찾았습니다. - 기적: 이 도장이 찍히기 이전 과거(4시간 전, 10년 전)에
COMMIT을 친 모든 트랜잭션들은, 이미 그 도장 찍힐 당시에 100% 완벽하게 쇳덩어리 디스크에 굳어있다는 것이 보증됩니다. - 따라서 이 도장 이전 과거의 모든 로그들은 무조건 믿고 100% 무시(스킵)해 버립니다! (Redo 대상에서 완벽히 제외)
- 아싸! 3시간 전에 찍힌
- 최근 3시간만 조지기 (복구의 극대화):
- 오직 이
<CHECKPOINT>도장 선을 넘어선 이후(최근 3시간)에 살아서 꿈틀거리다 뻗은 불쌍한 트랜잭션 놈들에 대해서만,START와COMMIT여부를 따져서 깔끔하게 **Undo(취소)**와 Redo(재실행) 흑마법을 수행합니다. - 복구해야 할 로그가 100억 줄에서 10만 줄로 다이어트 되어, 복구 시간이 1주일에서 1분으로 단축됩니다.
- 오직 이
Ⅳ. 트레이드오프 (너무 자주 찍으면 안 되는 이유)
- "오! 그럼 검사점(Checkpoint) 도장을 1초에 1번씩 미친 듯이 찍어두면 복구가 0.1초 만에 끝나겠네요?"
- 재앙: 검사점 도장을 찍으려면, 그 순간 램(RAM)에 있는 수백 메가바이트의 찌끄러기 데이터를 강제로 디스크에 와다다다 긁어서 내려보내야(Flush) 합니다.
- 하드디스크가 비명을 지르며 I/O 병목이 발생해 **정상적인 은행 고객들의 결제 트래픽이 멈춰 서고 버벅거리는 대참사(오버헤드)**가 터집니다.
- 복구 시간을 줄일 것인가(잦은 Checkpoint) vs 평소 성능을 높일 것인가(뜸한 Checkpoint) 사이의 극한의 밸런스 게임입니다.
📢 섹션 요약 비유: 검사점(Checkpoint) 회복 기법은 롤플레잉 게임(RPG)의 **'마을 세이브 포인트(Save Point) 저장'**과 100% 완벽하게 똑같습니다. 옛날 바보 게임(검사점 없는 DB)은 게임을 10년 동안 하다가 보스한테 맞아 죽으면, 레벨 1 태초마을로 강제 귀환당해서 10년 치 몬스터를 처음부터 다시 다 잡으며 렙업(전체 로그 Redo)을 해야 간신히 복구되었습니다. 빡친 유저들을 위해 게임사는 10분마다 만나는 마을에 **'세이브 포인트(Checkpoint)'**를 세워뒀습니다. 유저가 마을 돌에 손을 대는 순간, 그동안 모은 돈과 레벨이 영구 서버(디스크)에 완벽하게 100% 저장(Flush)됩니다. 이제 10분 뒤 보스한테 맞아 죽었다(장애 발생)? 레벨 1 태초마을로 안 갑니다! 방금 전 손을 댔던 세이브 포인트 마을(가장 최근 Checkpoint)에서 즉시 부활하여, 잃어버린 딱 10분 치의 기억(최근 로그)만 다시 몬스터를 잡아 복구(Redo)하면 됩니다. 10년 치 복구 노가다 시간을 10분으로 찢어버려 데이터베이스 관리자(DBA)들의 복구 타임라인을 로켓으로 당겨준 클라우드 시대 필수 생존 세이브 기술입니다.