235. Undo (취소) - 장애 발생 후 미커밋 트랜잭션 롤백 롤백원상복구 원자성(Atomicity) 보장 언두 세그먼트 로그 기반 회복
핵심 인사이트: (233번 회복의 두 번째 칼날, Redo의 쌍둥이) 내가 100만 원짜리 명품백 결제 버튼을 눌렀다. 시스템이 내 통장에서 돈은 100만 원 뺐는데, 아직 상인 통장에 돈을 넣지 못해서 "결제 완료(COMMIT)" 도장을 못 찍은 미완성 상태다. 근데 그 찰나에 서버실에 벼락이 떨어져서 서버가 뻗어버렸다!! 10분 뒤 서버가 켜졌는데, 내 통장에 돈 100만 원이 여전히 빠져나가 있다?! 나는 돈 뺏기고 명품백은 못 받는 호구가 됐다!! 빡친 DB 엔진이 소리친다. "야 ㅆㅂ!! 193번 원자성(Atomicity) 원칙 잊었냐?! '100% 다 끝내지 못할 거면, 중간에 하던 짓거리도 아예 싹 다 없었던 일로 지워버려야(All or Nothing)' 한다고!! 당장 블랙박스 일기장(로그 파일) 뒤져서 아까 'COMMIT' 도장 못 찍고 뻗어버린 찌끄러기(미커밋) 새끼들 다 색출해 내!! 그리고 걔네들이 디스크에 묻혀놓은 100만 원 뺄셈 쓰레기 흔적들을, 100만 원 덧셈으로 거꾸로 엎어버려서(Undo) 1초라도 건드리기 전의 태초마을(0원)로 100% 완벽하게 빡빡 지워(Roll-backward) 버려라!!" 덜 익은 쓰레기 데이터를 살처분하여 무결성을 지키는 무자비한 암살술, Undo다.
Ⅰ. 덜 익은 데이터의 디스크 침공 (왜 똥이 묻어있을까?)
- 234번
Redo에서는 디스크가 너무 느려서 COMMIT 된 게 날아간다고 했습니다. - 반대의 딜레마: 서버 램(RAM)이 꽉 찼습니다. 아직 내가 결제 완료(
COMMIT) 도장을 안 찍었는데도, DB 엔진은 메모리가 모자라니까 내가 고치고 있던 피투성이 '100만 원 차감' 데이터를 쇳덩어리 디스크(원본)로 슬쩍 먼저 내려버립니다(Flush). - 비극의 틈새: 이렇게 미완성 찌끄러기 데이터가 디스크에 묻어버렸는데 서버에 벼락(정전)이 치면?! 재부팅 된 디스크 원본에는 **"결제는 안 끝났는데 내 돈만 100만 원 빠져있는 미친 모순 상태(원자성 박살)"**가 영구적으로 새겨져 남게 됩니다.
Ⅱ. Undo (취소 / Roll-backward)의 개념 🌟
- 개념: 시스템 장애로 뻗었다가 재부팅 되었을 때, 장애 발생 순간까지 최종 'COMMIT(완료)' 도장을 찍지 못하고 비명횡사한 '미완성 트랜잭션(Uncommitted)'들을 찾아내어, 이 놈들이 물리적 디스크에 싸질러놓은 더러운 쓰레기 데이터 흔적들을 로그(Log)를 보고 거꾸로 되짚어가며 완벽하게 지워내고 엎어버려(Undo), 작업이 1%도 시작되지 않았던 과거의 순결한 상태로 시스템을 후진(Roll-backward) 시키는 회복 기법입니다.
Ⅲ. Undo의 절대 임무: 원자성(Atomicity) 사수 🌟 핵심 기출 🌟
- 트랜잭션 ACID 원칙 중 **원자성(Atomicity)**을 지켜내는 유일하고도 절대적인 무기입니다. (시험에서 Undo = 원자성 매칭은 100% 나옵니다.) "완벽히 못 할 거면 흔적도 남기지 마라!"
Ⅳ. 어떻게 태초마을로 되돌릴까? (과거로의 시간여행)
- 234번
Redo와 똑같이, 얘도 딴딴한 블랙박스 일기장(Log File)과 225번에서 배운 **'언두 세그먼트(Undo Segment 과거 사진관)'**를 파헤쳐서 복구합니다. - Undo 검사 로직: "로그에
<T2, START>는 찍혀있네. 근데 쭉 보니까 벼락 칠 때까지<T2, COMMIT>도장이 없잖아?! 이 새끼 덜 끝내고 죽은 쓰레기 놈이네!! 야, 디스크 까봐! 헐, T2가 고친 100만 원 차감 흔적이 묻어있어!! 당장 로그를 거꾸로 뒤지면서, T2가 했던 행동과 **정반대의 행동(100만 원 다시 더하기)**을 디스크에 쾅쾅 덮어써서(Undo) 옛날 깨끗했던 0원 시절로 완벽하게 후진(Roll-backward) 시켜라!!" - 이렇게 쓰레기 흔적들을 거꾸로 닦아내면서 뒤로 쫙쫙 물러나서(Roll-backward) 과거의 무결점을 되찾습니다.
📢 섹션 요약 비유: **Undo(취소)**는 화재 현장에서 불타다 만 소설책의 **'미완성 문장을 화이트로 벅벅 지워버리는 가차 없는 교정 작업'**입니다. 소설가(트랜잭션)가 "1장 10페이지"를 막 쓰고 있는데(미완성), 출판사에 불이 났습니다(시스템 장애). 소설가는 "10페이지 완성!(COMMIT)"이라는 말을 못 남기고 죽었습니다. 원칙(원자성 Atomicity)상, 10페이지가 100% 완벽하게 완성되지 않았으면 아예 9페이지 상태로 깔끔하게 놔둬야지, 10페이지가 쓰다 만 쓰레기 문장들로 더럽혀져 있으면 다음 소설가가 이어서 쓸 수가 없습니다(모순 상태). 편집자(DB 엔진)는 불타지 않은 비밀 일기장(로그 파일)을 까봅니다. "어? 이놈 COMMIT 글자가 없네? 쓰다 죽은 놈이네! 근데 원고지(디스크)에 지저분하게 3줄을 적어놨어! 당장 지우개와 화이트를 가져와!! 이 놈이 적어놓은 3줄의 흔적을 흔적조차 안 남게 뒤에서부터 벅벅 지워버려(Undo 취소)!! 그래서 아무 일도 없었던 깔끔한 9페이지 백지상태(과거 태초마을)로 완벽하게 후진(Roll-backward 후진 복구)시켜 놔라!!" 죽은 자의 불완전한 쓰레기를 우주에서 완벽히 소멸시켜 데이터베이스의 순결(원자성)을 사수하는 무자비한 청소부입니다.