218. 축소 단계 (Shrinking Phase) - 2PL 2단계 락 반납 전용 Unlock 락 포인트 다운그레이드 연쇄 복귀 한계 동시성 제어
핵심 인사이트: (217번 확장 단계의 후반전) "야! 네가 드디어 못 참고 카트에서 양파 자물쇠(Lock)를 하나 바닥에 툭 내려놨어(Unlock)! 경비원이 호루라기를 불어재낀다! 삐익-!! 너는 방금 '락 포인트(Lock Point)'의 정점을 찍고 내려왔다! 지금 이 1초부터 넌 1단계(확장)에서 쫓겨나 영구히 '2단계(축소)'로 강제 진입했다!! 축소 단계에 들어선 놈의 운명은 단 하나! 네가 쥐고 있는 남은 수십 개의 락을 하나씩 눈물을 흘리며 바닥에 버리고 풀어주기(Unlock)만 해라! 가다가 '아차 마늘 락 안 집었네!' 하고 새로운 락(Lock)을 잡으려고 손을 뻗어?! 어림없는 소리!! 축소 단계에선 새로운 락 획득이 우주 끝까지 절대 영구 불가능이다!!" 산 정상에서 자물쇠를 버리며 하산하는 2PL의 후반전, 축소 단계다.
Ⅰ. 운명의 전환점: 락 포인트 (Lock Point) 🌟
- 산을 오르는 것(확장 단계, 락을 모음)과 산을 내려오는 것(축소 단계, 락을 버림) 사이의 정확한 산 정상의 꼭대기 시점을 **락 포인트(Lock Point)**라고 부릅니다.
- 정의: 트랜잭션이 자신이 필요로 하는 '마지막 락(Lock)'을 획득하고, '최초로 딱 1개의 락을 풀어버리는(Unlock)' 바로 그 아슬아슬한 찰나의 순간을 락 포인트라고 부르며, 이때부터 트랜잭션은 얄짤없이 2단계(축소 단계)로 전환됩니다.
Ⅱ. 축소 단계 (Shrinking Phase)의 절대 강제 룰 🌟
- 개념: 락 포인트를 지나 2PL의 제2페이즈에 접어든 상태입니다.
- 허용 (반납의 미학): 자신이 손에 꽉 쥐고 있던 자물쇠(S-Lock, X-Lock)들을 하나씩 차례대로 풀어서(Unlock) 시스템에 반납하는 행위만 무한정 허용됩니다. 내가 락을 하나씩 풀면 뒤에서 멈춰있던 불쌍한 다른 놈들이 락을 줍고 일을 시작하게 되어 병목이 스르륵 풀립니다.
- 금지 (재획득 불가): 가장 치명적이고 중요한 룰입니다. 축소 단계에서는 단 1개의 새로운 자물쇠(Lock)도 절대로, 맹세코, 우주가 터져도 다시 획득(Lock Request)할 수 없습니다. 만약 내가 깜빡하고 이순신 데이터의 락을 안 잡고 축소 단계로 넘어왔다면? 그 트랜잭션은 이순신 데이터를 영원히 건드릴 수 없게 되어 에러를 뿜고 장렬히 자결(Rollback)해야 합니다.
Ⅲ. 숨겨진 꿀팁: 락의 다운그레이드 (Lock Downgrade)
확장 단계(217번)와 정반대로, 힘을 잃어가는 축소 단계다운 마법입니다.
- 상황: 내가 1단계에서 홍길동 데이터를 뜯어고치려고 쎈 **배타 락(X-Lock)**을 쥐어놨습니다. 근데 고치고 나서 그냥 책 읽듯 눈으로만(Read) 한 번 더 확인하고 싶습니다.
- 다운그레이드: 축소 단계에서는 내가 쥐고 있던 무서운 X-Lock을, 남들도 들어와서 구경할 수 있는 착하고 부드러운 **공유 락(S-Lock)**으로 힘을 빼는(Downgrade) 짓이 합법적으로 허용됩니다! (어차피 자물쇠의 독점력을 '풀어서 줄이는' 축소 행위의 일환이니까요.)
Ⅳ. 축소 단계가 낳는 최대의 재앙: 연쇄 복귀 (Cascading Rollback) 🌟 핵심 기출 🌟
2PL 뼈대의 가장 치명적인 구멍이자, 220번 '엄격한 2PL'이 태어나게 된 원흉입니다.
- 재앙 시나리오 (오손 읽기 폭발):
T1이 홍길동의 X-Lock을 쥐고 값을 5만 원으로 고쳤습니다.T1이 축소 단계로 넘어와서, 자기가 고친 홍길동의 X-Lock을 땅에 툭 버렸습니다(Unlock). (※ 아직T1은 최종 COMMIT 도장을 안 찍었습니다! 미완성 상태!)- 뒤에서 대기 타던
T2가 땅에 떨어진 락을 주워 먹고 방에 들어가, 홍길동의 덜 익은 쓰레기 값 **'5만 원'**을 읽어버렸습니다 (205번 오손 읽기 Dirty Read 터짐). - 그리고
T2는 5만 원인 줄 알고 신나서 작업을 끝내버립니다. - 1초 뒤!
T1이 마지막 쿼리에서 에러가 터져서 "아 ㅆㅂ 나 취소할래! ROLLBACK!!" 해버립니다. 홍길동은 0원으로 돌아갑니다. - 대참사 결론:
T1이 축소 단계에서 성급하게 락을 툭툭 던져버린 탓에, 그걸 주워 먹은 불쌍한T2,T3까지 모조리 다 쓰레기를 먹은 꼴이 되어 도미노처럼 다 같이 취소당하는 206번 연쇄 복귀(Cascading Rollback)의 생지옥이 열려버립니다.
📢 섹션 요약 비유: **축소 단계(Shrinking Phase)**는 군대 혹한기 훈련에서 산 정상(Lock Point)을 찍고 **'가방(자물쇠)의 돌덩이를 하나씩 버리며 내려오는 하산 과정'**입니다. 산을 오를 때(확장 단계)는 무조건 돌덩이 락(Lock)을 가방에 쓸어 담기만 했습니다. 그러다 정상을 찍고 돌덩이를 하나라도 툭 버리는(Unlock) 순간! 하산(축소 단계)이 시작됩니다. 2PL의 하산 절대 룰은 "버릴 순 있어도, 다시 돌을 주워 담을 순 없다(새로운 Lock 획득 불가)!" 입니다. 내가 하산하며 버린 락을, 뒤따라오던 후임병(트랜잭션 T2)이 주워서 씁니다. 그런데 여기서 끔찍한 사고가 터집니다. 내가 산 중턱에서 X-Lock을 던져버리고 내려왔는데, 후임병이 그걸 주워서 내가 반쯤 먹다 남긴 썩은 빵(미확정 데이터)을 주워 먹었습니다(오손 읽기). 근데 내가 산 밑 다 와서 발목이 부러져 "아 씨 나 포기! 처음부터 다시 등반할래(ROLLBACK)!" 해버립니다. 그럼 산 중턱에서 내가 던진 썩은 빵을 주워 먹었던 수십 명의 후임병들도 다 식중독에 걸려 도미노처럼 등반을 싹 다 포기하고 연쇄적으로 산 밑으로 굴러떨어져야 하는(Cascading Rollback) 대재앙이 터집니다. 2PL이 직렬 가능성은 완벽히 지켜주지만, 축소 단계에서 락을 질질 흘리고 다니는 이 가벼운 입방정 때문에 연쇄 붕괴의 씨앗을 품고 있는 불완전한 방패인 이유입니다.