222. 타임스탬프 순서 (Timestamp Ordering) 기법 - 비관적 제어 아님 무자물쇠 동시성 제어 롤백 트랜잭션 진입 시간 직렬화
핵심 인사이트: (자물쇠의 붕괴와 새로운 차원) 자물쇠(Locking)로 쇼핑몰을 돌렸더니, 놈들이 엑셀 칸을 쥐고 안 놔줘서 서로 평생 멱살을 잡고 뒤지는 '데드락(교착상태)'이 터져 미쳐버렸다. 학자들이 책상을 엎었다. "야 ㅆㅂ!! 무겁고 귀찮은 쇳덩어리 자물쇠(Lock) 다 갖다 버려!! 아무도 엑셀 문 잠그지 마!! 대신, 손님(트랜잭션) 10만 명이 은행 정문을 열고 들어오는 그 찰나의 '0.001초 도착 시간(타임스탬프 번호표)'을 등판에 도장으로 쾅! 찍어줘!! 그리고 엑셀 칸을 수정할 때 무조건 '먼저 도착한 할아버지(번호표 낮은 놈)'가 먼저 쓰고, '나중에 온 싸가지 없는 젊은 놈(번호표 높은 놈)'이 나중에 쓰게 질서를 잡아!! 만약 싸가지 없는 젊은 놈이 할아버지보다 먼저 새치기해서 엑셀을 고치려 든다?! 그럼 그 젊은 놈 모가지를 쳐서 무자비하게 롤백(강제 취소) 시키고 등판에 새 번호표를 파서 맨 뒤로 쫓아내 버려!!" 자물쇠의 무거움을 버리고, 시간의 절대 순리(나이순)로 데드락을 원천 삭제해 버린 닌자 암살술, 타임스탬프 순서 기법이다.
Ⅰ. 무거운 쇳덩어리(Lock)의 공포
- 213번부터 주구장창 배운 락킹(Locking, 2PL) 기법은 결국 무식하게 **'문을 잠그는' 방어막(비관적 제어)**이었습니다.
- 치명적 약점: 락을 거느라 시스템 메모리를 갉아먹고(오버헤드), 놈들끼리 락을 쥐고 평생 안 놔주는 데드락(Deadlock) 지옥을 100% 필연적으로 달고 다녔습니다.
Ⅱ. 타임스탬프 순서 (Timestamp Ordering) 기법의 개념 🌟
데드락의 원흉인 자물쇠(Lock)를 아예 우주 밖으로 집어 던진 천재적 발상입니다.
- 개념: 데이터베이스에 트랜잭션이 들어오는 시간 순서대로 고유한 '타임스탬프(Timestamp, 도착 시간 번호표)'를 부여하고, 수만 개의 쿼리가 마구잡이로 뒤섞여(비직렬) 실행되다가 충돌(Read-Write 등)이 발생할 위기가 오면, 무조건 '번호표가 빠른(늙은) 트랜잭션'이 먼저 실행된 것과 동일한 결과가 나오도록 강제로 시간을 정렬시켜 버리는 동시성 제어 기법입니다.
- 핵심 무기: 자물쇠(Lock)가 물리학적으로 아예 존재하지 않습니다. (데드락 발생 가능성 0%).
Ⅲ. 나이순 절대 질서 룰 (작동 원리) 🌟 핵심 기출 🌟
DB 안의 엑셀 칸(데이터)에도 "마지막으로 나를 찌르고 간 놈의 번호표"가 기록되어 있습니다.
1. 장유유서의 원칙 (정상 작동)
T1(번호표 10시, 할아버지)과T2(번호표 11시, 젋은 놈)가 있습니다.- 할아버지가 엑셀을 먼저 고치고, 그 뒤에 젊은 놈이 엑셀을 덧붙여 고치러 왔습니다.
- 결과: "음, 나이순(시간표)에 맞게 올바르게 오셨군요. 통과!" ➜ 직렬 가능성 완벽 유지.
2. 새치기에 대한 무자비한 사형 선고 (충돌 시) 🌟
자물쇠(Lock)가 없으니 막무가내로 들어올 수 있지만, 엔진이 검사기를 들이댑니다.
- 엑셀 칸을 보니 **"마지막으로 이 엑셀 고친 놈: T2 (11시 젊은 놈)"**이라고 적혀있습니다.
- 근데 뒤늦게 지각한
T1(10시 할아버지)이 허겁지겁 뛰어와서 자기가 엑셀을 고치겠다(Write)고 펜을 들이댑니다! - DB 엔진의 철퇴: "야 이 할망구야! 시계가 거꾸로 가냐?! 이미 미래에서 온 젊은 놈(
T2)이 엑셀을 다 고쳐서 미래 상태로 만들어 놨는데, 네가 지금 와서 과거의 값으로 덮어써(Write)버리면 시간의 인과율이 붕괴되어 우주가 터지잖아!! 네놈이 늦었으니 넌 사형이다! 즉시 ROLLBACK(강제 취소)!! 그리고 번호표 새로(12시) 발급받아서 맨 뒤에 줄 다시 서!!" - 시간을 거스르는 연산이 들어오는 찰나, 즉각 그 트랜잭션을 찢어발겨 롤백시켜버림으로써 갱신 손실과 모순을 완벽하게 차단합니다.
Ⅳ. 타임스탬프의 장단점 (트레이드오프)
- 장점 (데드락의 멸종): 서로의 자물쇠를 기다리며 멈추는 데드락(Deadlock)이 지구상에서 완전히 사라집니다. 자물쇠를 쥐고 풀 필요가 없으니 오버헤드도 없습니다.
- 단점 (연쇄 복귀의 지옥): 너무 엄격하게 번호표로 사형(ROLLBACK)을 때리다 보니, 조금만 순서가 꼬여도 수백 명의 트랜잭션들이 도미노처럼 펑펑 롤백당해 연쇄 복귀(Cascading Rollback)가 비일비재하게 터집니다. 살짝 늦었다고 1만 줄짜리 쿼리가 처음부터 다시 시작해야 하는 가혹한 낭비(Starvation)가 발생합니다.
📢 섹션 요약 비유: 기존의 자물쇠(Locking 2PL) 기법은 1차선 좁은 다리(데이터)를 건널 때 양쪽 끝에 **'철문'**을 달아놓고 한 놈이 열쇠를 독점해 건너는 것입니다. 양쪽에서 서로 열쇠를 내놓으라고 멱살 잡고 멈추는 데드락(교착상태)이 무조건 터집니다. 이를 엎어버린 타임스탬프(Timestamp) 기법은 철문을 다 뜯어버리고 자물쇠를 강물에 던져버린 혁명입니다. 대신 모든 운전자 등에 톨게이트를 진입한 **'시간표 번호(나이)'**를 거대한 도장으로 찍어버립니다. 차들이 자물쇠 없이 다리에 우르르 난입해 섞여 달립니다(극강의 동시성). 단, 중앙 감시탑(DB 엔진)이 카메라를 보고 있습니다. 정상적으로 10시 진입 차가 11시 진입 차보다 다리를 먼저 밟고 지나가면 웃으며 박수를 칩니다(순리). 그런데 어랏? 다리 중간에 시멘트가 발려있는데, 11시에 진입한 젊은 놈의 타이어 자국이 이미 굳어있습니다. 근데 뒤늦게 기어 온 10시 진입 늙은 차가 그 위에 시멘트를 새로 덮어쓰려(Write) 합니다!! 감시탑은 대포를 쏴서 그 10시 차를 그 자리에서 폭파(ROLLBACK 롤백)시켜 버립니다. "과거의 놈이 미래를 덮어써서 역사를 꼬이게 할 순 없다!" 이 가혹한 시간의 순리(나이순) 하나만으로, 자물쇠 없이도 앞차와 뒤차가 부딪혀 데이터 모순이 터지는 것을 1초 만에 깔끔하게 암살해 버리는 무자비한 타임라인 통제술입니다.