로킹

기술노트

🔒 로킹 (Locking)

로킹은 데이터베이스의 병행 제어(Concurrency Control) 기법 중 가장 대표적인 방식으로, 여러 트랜잭션이 동시에 데이터베이스의 특정 데이터에 접근하여 조작할 때, 데이터의 일관성과 무결성을 유지하기 위해 해당 데이터에 잠금(Lock)을 설정하는 것입니다.

마치 화장실에 한 명이 들어가면 문을 잠가 다른 사람이 들어오지 못하게 하는 것과 같습니다.


⚙️ 로킹의 종류

  • 공유 락 (Shared Lock / Read Lock) : 데이터를 '읽을' 때 설정하는 잠금입니다. 여러 트랜잭션이 동시에 공유 락을 설정하고 데이터를 읽을 수 있습니다. 하지만 공유 락이 설정된 데이터에는 배타 락을 설정할 수 없습니다.
  • 배타 락 (Exclusive Lock / Write Lock) : 데이터를 '쓰거나 수정할' 때 설정하는 잠금입니다. 배타 락이 설정된 데이터에는 다른 어떤 종류의 락(공유 락, 배타 락)도 설정할 수 없습니다. 오직 하나의 트랜잭션만 접근할 수 있습니다.

📚 로킹의 단위

로킹은 데이터베이스 전체부터 테이블, 페이지, 레코드(행) 등 다양한 단위로 설정할 수 있습니다. 로킹 단위가 클수록 병행성은 낮아지지만 관리는 쉬워지고, 로킹 단위가 작을수록 병행성은 높아지지만 관리는 복잡해집니다.


💀 교착 상태 (Deadlock)

로킹 기법을 사용할 때 발생할 수 있는 심각한 문제 중 하나가 교착 상태(Deadlock)입니다. 두 개 이상의 트랜잭션이 서로 상대방이 점유하고 있는 자원을 기다리면서, 영원히 다음 작업을 진행하지 못하는 상태를 말합니다.

  • 발생 조건 :

> 1. 상호 배제 : 자원은 한 번에 하나의 트랜잭션만 사용할 수 있습니다. > 2. 점유와 대기 : 자원을 점유한 상태에서 다른 자원을 기다립니다. > 3. 비선점 : 자원을 강제로 빼앗을 수 없습니다. > 4. 환형 대기 : 자원을 기다리는 트랜잭션들이 원형으로 꼬리를 물고 있습니다.

  • 해결 방법 :

> * 예방 : 교착 상태 발생 조건 중 하나를 제거합니다. > * 회피 : 자원 할당 시 교착 상태가 발생할 가능성이 있는지 미리 검사합니다. > * 탐지 및 회복 : 교착 상태가 발생했는지 주기적으로 확인하고, 발생하면 트랜잭션을 강제로 종료하여 회복합니다.


💡 정보처리기사 핵심 Point

  • 로킹은 병행 제어의 가장 기본적인 방법이며, 공유 락과 배타 락의 개념을 정확히 이해하는 것이 중요합니다.
  • 정보처리기사 시험에서는 교착 상태의 4가지 발생 조건해결 방법을 묻는 문제가 매우 자주 출제됩니다.
  • 로킹 단위가 작을수록 병행성은 높아지지만, 오버헤드가 증가한다는 트레이드오프 관계를 이해해야 합니다.