215. 배타 락 (Exclusive Lock / Write Lock, X-Lock) - 읽기 쓰기 모두 불가 독점 무결성 보장 데이터베이스 트랜잭션 갱신 동시성 제어 한계

핵심 인사이트: (214번 공유 락과 정반대의 흑염룡) "야! 214번 공유 락(S-Lock)은 눈으로 보는 착한 놈들끼리 10만 명씩 손잡고 같이 들어가는 평화주의자였지? 근데 세상엔 엑셀 칸을 칼로 째고 값을 뜯어고쳐 덮어쓰는(Write/UPDATE) 무자비한 해커 트랜잭션들이 존재한다. 내가 지금 홍길동의 잔고를 10만 원에서 1만 원으로 깎아버리는 수술(Write)을 시작할 거야. 내가 수술용 칼을 들고 엑셀에 들어가는 그 순간! 내 뒤에 10만 명이 '나 쓰기(Write) 할래!' 하고 들어오는 건 당연히 거부고, 심지어 '난 눈으로 보기(Read)만 할게!' 하고 구경하러 오는 놈들마저도 1%의 예외 없이 전부 모가지 잡고 밖으로 던져버려!! 내가 수술을 끝내고 봉합(COMMIT)할 때까지 우주에서 오직 나 혼자만 이 엑셀 칸을 절대 독점한다!!" 피도 눈물도 없이 읽기/쓰기 모든 접근을 싹 다 걸어 잠그는 절대 군주의 무쇠 자물쇠, 배타 락이다.

Ⅰ. 파괴적 연산(Write)의 공포

  • 203번 갱신 손실과 205번 오손 읽기(Dirty Read)의 원인은 무조건 '누군가 데이터를 고치고(Write) 있는 불안정한 수술 중간에' 딴 놈이 들어와서 같이 고치려 들거나(Write), 그 덜 익은 피투성이 데이터를 몰래 훔쳐서 읽어갔기(Read) 때문입니다.
  • 데이터를 뜯어고치는 순간에는 그 어떤 간섭(Read, Write 둘 다)도 허용하면 안 됩니다.

Ⅱ. 배타 락 (Exclusive Lock / X-Lock)의 개념 🌟

  • Exclusive (독점적인, 배타적인)
  • 개념: 트랜잭션이 어떤 데이터 항목의 값을 **뜯어고치거나 덮어쓰는 등 '쓰기 연산(Write/UPDATE/DELETE)'을 수행하고자 할 때 엑셀 칸에 쾅! 걸어 잠그는 '절대 권력의 무쇠 자물쇠'**입니다. (다른 말로 Write Lock이라고도 합니다.)

Ⅲ. 배타 락(X-Lock)의 피도 눈물도 없는 절대 룰 🌟 핵심 기출 🌟

1. 내가 걸면, 너흰 다 아웃 (절대 독점의 원칙)

  • 악당(T1)이 홍길동 엑셀 칸에 1등으로 도착해서 수술용 메스를 들고 **배타 락(X-Lock)**을 쾅! 걸었습니다.
  • 1초 뒤 뒤따라온 해커(T2)가 "형님, 저도 메스 들고 와서 그 데이터 좀 같이 고칩시다(X-Lock 요청)"라고 덤빕니다.
  • 결과: 어림 반 푼어치도 없습니다! 거절! T2는 문 밖으로 쫓겨나 무한 대기(Wait)합니다. (X-Lock끼리는 절대 중복 허용 불가 ➜ 203번 갱신 손실 완벽 차단)

2. 읽는 놈(구경꾼)도 무자비하게 차단 (S-Lock 거부) 🌟

이게 제일 중요합니다! X-Lock의 폭력성입니다.

  • 1초 뒤, 이번엔 눈동자가 맑은 선량한 구경꾼(T3)이 옵니다. "형님, 전 아무것도 안 고칠게요. 그냥 S-Lock 걸고 그 엑셀 칸 뒤에서 눈으로 쳐다만(Read) 보고 갈게요~"
  • 결과: 이 구경꾼의 싸대기를 때려서 쫓아냅니다! 절대 거절!
  • 왜 그럴까요? 지금 T1이 엑셀 값을 100만 원에서 1만 원으로 고치고 있는 피 튀기는 덜 익은 수술 중간 상황인데, 구경꾼(T3)이 들어와서 그 덜 익은 쓰레기 1만 원을 진짜인 줄 알고 눈으로 읽어서(Read) 들고 나가버리면? 바로 205번 오손 읽기(Dirty Read) 대참사가 터지기 때문입니다.
  • 그래서 X-Lock이 걸려있는 방에는, 같은 X-Lock(쓰기) 놈이든, 천사 같은 S-Lock(읽기) 놈이든 종류를 불문하고 파리가 한 마리도 못 들어오게 100% 셧다운(Shut down) 시켜버립니다.

3. 내가 들어갈 땐, 아무도 없어야 해

  • 반대로, 내가 X-Lock을 걸려고 방 문을 열었는데, 안에 천사들 10명이 S-Lock을 걸고 조용히 책을 읽고(Read) 있었습니다.
  • 나는 X-Lock을 걸 수 있을까요? 못 겁니다!
  • 독자들이 책을 다 읽고 S-Lock을 모두 풀고 퇴근해서 방 안이 **0명(텅텅 빈 완벽한 진공 상태)**이 될 때까지 나는 밖에서 쭈그려 기다려야 합니다. (214번 규칙과 맞물림)

Ⅳ. 도입 효과와 트레이드오프 (호환성 행렬)

  • 이 끔찍한 독재(X-Lock) 덕분에 DB는 '데이터 모순과 붕괴 에러(무결성 훼손)'의 공포에서 완벽하게 해방됩니다. 우주 최고 수준의 데이터 보호막입니다.
  • 단점: 동시성(성능)이 개박살 납니다. 티켓 예매 사이트에서 내가 내 좌석을 고르는(Write/X-Lock) 동안, 뒤에 있는 10만 명은 내 자리가 빈자리인지 쳐다보는 것(Read)조차 불가능해져서 모두 무한 대기열(병목)에 갇혀 서버가 터지는 원흉이 됩니다.

📢 섹션 요약 비유: **배타 락(Exclusive Lock, X-Lock)**은 수술실에서 진행되는 **'초정밀 심장 개복 수술 시의 완벽한 출입 통제막'**입니다. 의사(트랜잭션 T1)가 메스(Write)를 들고 환자의 배를 가르는 수술(배타 락 획득)을 시작합니다. 이때 밖에서 다른 의사(T2)가 메스를 들고 "나도 같이 배 가를래!(X-Lock 추가 요청)" 하고 들어오면 의사 두 명이 환자 하나를 놓고 칼싸움을 하다가 환자가 죽습니다(갱신 손실 에러). 당연히 다른 의사의 출입을 막습니다. 더 무서운 건, 지나가던 간호사나 구경꾼(T3)이 "난 아무것도 안 만지고 그냥 뒤에서 눈으로 환자 장기 구경만(Read) 할게~(S-Lock 요청)" 하고 들어오려는 것도 가차 없이 "당장 나가 ㅆㅂ!! 지금 피 튀기고 배가 열린 더러운 미완성 상태(Dirty Data)인데 어딜 감히 구경하러 들어와!!" 라며 수술실 문을 안에서 3중 무쇠 자물쇠로 쾅쾅 쾅 잠가버리고 구경꾼마저 100% 다 쫓아내 버립니다(오손 읽기 방지). 의사가 수술을 완벽하게 끝내고 피부를 깔끔하게 꿰맨 뒤(COMMIT) 문을 열어줄 때까지, 그 어떤 누구도 수술실 안에 한 발짝도 못 들어오게 만드는, 극단적으로 답답하지만 환자의 목숨(데이터 무결성)을 완벽하게 지켜내는 절대 고독의 잠금장치입니다.