220. 엄격한 2PL (Strict 2PL) - 2단계 락킹 프로토콜 진화형 배타 락(X-Lock) 커밋 시 반납 연쇄 복귀 방지 오손 읽기 방지 트랜잭션 고립성 오라클 DB
핵심 인사이트: (219번 연쇄 복귀 멸망의 구원자) "야! 2PL 2단계(축소) 룰 때문에, 놈들이 지가 수술한 피투성이 엑셀 칸을 아직 100% 확정(COMMIT) 짓지도 않았으면서 자물쇠(Lock)를 바닥에 툭툭 던지고 가버리잖아!! 뒤따라오던 놈들이 그 덜 익은 피투성이 데이터(Dirty Data)를 주워 먹었다가, 첫 번째 놈이 에러 나서 롤백(취소) 치니까 다 같이 도미노처럼 피를 토하며 뒤지는 연쇄 롤백(Cascading Rollback)이 터진 거 아니야!! 당장 헌법을 개정해라!! '네가 엑셀을 뜯어고칠 수 있는 무시무시한 배타 락(X-Lock)을 한 번이라도 잡았어? 그럼 2단계 축소고 나발이고, 네가 완벽하게 수술을 끝내고 서류에 COMMIT(성공) 도장을 쾅 찍어 영구 보존시킬 그 찰나의 마지막 순간까지, 이 X-Lock을 우주가 터져도 절대 놓지 말고 피 터지게 꽉 쥐고 있어라!!'" 미완성 쓰레기 데이터 유출을 100% 셧다운 시켜 연쇄 복귀 지옥의 숨통을 끊어버린 현대 상용 DB의 철혈 독재, 엄격한 2PL이다.
Ⅰ. 기본 2PL의 가벼운 입방정 (문제점 복습)
- 기본 2단계 락킹 프로토콜(216번)은 락 포인트를 지나면, 트랜잭션이 아직 살아서 돌아가고 있고 최종 COMMIT 도장을 안 찍었음에도 불구하고 자물쇠를 풀 수(Unlock) 있었습니다.
- 내가 데이터를 고치고 무심코 X-Lock을 던지면, 딴 놈이 그 덜 익은 데이터에 쏜살같이 접근해서 **오손 읽기(Dirty Read)**를 때리고, 내가 에러 나서 취소 치면 딴 놈까지 싹 다 무덤으로 끌려가는 연쇄 복귀(Cascading Rollback) 지옥이 열립니다.
Ⅱ. 엄격한 2PL (Strict 2PL)의 핏빛 룰 🌟 현대 DB의 표준 🌟
오라클, MySQL 등 여러분이 쓰는 대부분의 RDBMS가 뒤에서 굴리고 있는 진짜 뼈대입니다.
- 개념: 기본 2PL의 1, 2단계 구조는 그대로 쓰되, 데이터의 무결성을 박살 내는 주범인 '배타 락(X-Lock, 쓰기 전용 자물쇠)'에 한해서만큼은 축소 단계가 와도 절대로 미리 풀지 못하게 막고, 오직 트랜잭션이 100% 완벽하게 종료(COMMIT 성공 또는 ROLLBACK 실패)되는 그 찰나의 마지막 시점에만 일괄적으로 한 방에 풀어버리도록 강제하는 특수 락킹 규약입니다.
Ⅲ. Strict 2PL이 세상을 구원한 2대 마법 🌟 핵심 기출 🌟
1. 연쇄 복귀 (Cascading Rollback)의 100% 차단
- 악당
T1이 홍길동 값을 '5만 원'으로 뜯어고치고(Write) 있습니다 (X-Lock 보유). - 기본 2PL에선 중간에 X-Lock을 땅에 버렸겠지만, 엄격한 2PL에서는
T1이 최종 COMMIT 도장을 찍기 전까지는 하늘이 두 쪽 나도 X-Lock을 손에서 놓지 않습니다. - 그래서 불쌍한
T2가 덜 익은 '5만 원'을 주워 먹으러 와도,T1이 X-Lock으로 철문을 꽉 걸어 잠그고 안 열어주기 때문에 밖에서 무한 대기(Wait)하게 됩니다. - 1분 뒤
T1이COMMIT을 찍고 5만 원이 '영구적인 진실'로 확정된 순간에야 비로소 X-Lock 철문이 촥 열립니다! 그때 들어간T2는 100% 안전한 확정 데이터를 읽게 되므로, 오손 읽기(Dirty Read)가 원천 차단되고, 그로 인한 연쇄 도미노 롤백의 공포가 지구상에서 완전히 소멸합니다.
2. 읽기 락(S-Lock)에 대한 너그러움 (동시성 챙기기)
- 주의할 점: 엄격한 2PL은 무서운 **'배타 락(X-Lock)'**만 트랜잭션 종료 시까지 꽉 쥐게 합니다.
- 단순히 구경만 하려고 잡았던 **'공유 락(S-Lock)'**은 기본 2PL 룰대로 2단계 축소 페이즈에 툭툭 던지고 미리 반납(Unlock)해도 봐줍니다.
- 어차피 눈으로 읽기만 한 데이터(S-Lock)는 내가 롤백 치든 말든 다른 놈들에게 피해를 1도 안 주기 때문에, 미리 풀어줘서 뒷놈들이 팍팍 들어오게 만들어 조회 시스템의 성능(동시성)을 최대한 쥐어짜 내는 똑똑한 타협점입니다.
Ⅳ. 여전히 남은 그림자 (데드락)
- 연쇄 복귀(Cascading Rollback)는 완벽하게 박살 냈지만, 219번에서 터졌던 **'교착 상태(Deadlock)'**는 쥐고 있는 락을 안 놔줘서 터지는 병이므로 Strict 2PL에서도 고쳐지지 않고 오히려 더 징하게 터집니다. 여전히 데드락 탐지기 몽둥이를 들고 다니며 감시해야 합니다.
📢 섹션 요약 비유: **엄격한 2PL(Strict 2PL)**은 도자기 장인(트랜잭션)이 작업하는 공방의 **'가마솥 쇳물 자물쇠 룰'**입니다. 기존 룰(기본 2PL)에서는 장인이 도자기에 흙(Write)을 바르고 아직 불가마에 구워 완성(COMMIT)하지도 않았는데 덥석 자물쇠(X-Lock)를 풀어 문을 열어버렸습니다. 밖에 있던 구경꾼이 덜 익은 도자기를 만졌다가(Dirty Read), 장인이 맘에 안 들어서 흙을 박살 내버리니(ROLLBACK) 구경꾼들 멘탈까지 도미노로 털렸습니다(연쇄 복귀). 이를 부숴버린 엄격한 2PL 헌법은 "흙을 한 줌이라도 바르는 무시무시한 작업(X-Lock)을 시작했다면, 그 도자기를 가마에 넣어 100% 완벽한 청자로 굽고 관인 도장(COMMIT)을 쾅! 찍어 굳히기 전까지는 공방의 셔터를 우주가 무너져도 1cm도 열지 마라!!" 라며 수술이 끝날 때까지 밀실을 100% 통제합니다. 밖의 구경꾼들은 도자기가 100% 완벽하게 구워지고 장인이 퇴근(트랜잭션 종료)할 때까지 밖에서 무한 대기해야 하지만, 그 덕분에 세상에 덜 익은 쓰레기 도자기 데이터가 단 1개라도 밖으로 유출되어 시장 질서를 무너뜨리는 참사를 100% 완벽하게 차단해 내는 현대 상용 DB들의 절대적인 철혈 방어막입니다.