DB

데이터베이스 락(Lock)

개발자가 되고 싶어요 ㅣ 2024. 6. 7. 20:36

락(Lock)이란?

데이터베이스 락(Lock)은 여러 사용자가 동시에 데이터베이스에 접근할 때, 데이터의 무결성과 일관성을 유지하기 위해 데이터에 대한 접근을 제어하는 메커니즘이다. 락은 데이터베이스의 레코드, 페이지, 테이블 또는 데이터베이스 전체에 걸릴 수 있으며, 일반적으로 트랜잭션에서 사용된다.

 

주요 락의 종류

공유 락 (Shared Lock, S Lock)

공유 락의 목적은 데이터의 읽기 작업을 보호하는 것이다. 여러 트랜잭션이 동시에 공유 락을 획득할 수 있는 것이 특징이다. 예를 들어 트랜잭션 A와 B가 동시에 동일한 데이터를 읽을 때 두 트랜잭션 모두 공유 락을 걸 수 있어 읽기 작업이 가능하지만, 데이터 수정은 불가능하다. 하지만 공유 락이 걸린 데이터에 대해 동시에 배타 락을 걸 수는 없다.

 

배타 락 (Exclusive Lock, X Lock)

배타 락의 목적은 데이터의 쓰기 작업을 보호하는 것이다. 하나의 트랜잭션만 배타 락을 획득할 수 있고, 다른 트랜잭션은 해당 데이터에 대해 어떤 락도 걸 수 없다는 것이 특징이다. 예를 들어 트랜잭션 A가 데이터를 수정할 때 배타 락을 걸어 다른 트랜잭션이 데이터에 접근하지 못하게 할 수 있다. 배타 락이 걸린 데이터는 다른 트랜잭션에서 읽기나 쓰기 작업이 불가능하다.

 

업데이트 락 (Update Lock, U Lock)

업데이트 락의 목적은 충돌을 최소화하면서 데이터 업데이트 작업을 보호하는 것이다. 데이터에 대한 잠재적인 수정 작업을 위해 사용된다. 처음에는 공유 락 처럼 작동하다가 나중에 배타 락으로 전환되는 것이 특징이다. 예를 들어 트랜잭션 A가 데이터 수정 가능성을 염두에 두고 업데이트 락을 걸어 다른 트랜잭션이 배타 락을 걸지 못하게 하다가 나중에 실제로 데이터를 수정할 때 배타 락으로 전환된다. 다른 트랜잭션은 업데이트 락이 걸린 데이터에 대해 공유 락은 걸 수 있지만 배타 락은 걸 수 없다.

 

(Lock) 사용의 필요성

  • 일관성 유지: 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 데이터의 일관성을 유지할 수 있게 한다.
  • 무결성 보장: 데이터의 무결성을 보장하여 트랜잭션이 안전하게 수행될 수 있게 한다.
  • 동시성 제어: 여러 사용자가 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 방지한다.

 

(Lock) 관련 문제

교착 상태(Deadlock)

교착 상태는 두 개 이상의 트랜잭션이 서로의 자원을 기다리면서 무한히 대기하는 상황이다.

 

잠금 경합(Lock Contention)

잠금 경합은 여러 트랜잭션이 동시에 동일한 자원에 접근하려고 하면서 발생하는 성능 저하 문제이다. 이로 인해 트랜잭션들이 자원을 획득하기 위해 대기하게 되고, 전체 시스템의 성능이 저하될 수 있다.

 

낙관적 락 (Optimistic Lock) 과 비관적 락 (Pessimistic Lock)

데이터 충돌이 드물다고 가정하는 낙관적 락과 충돌이 자주 발생한다고 가정하는 비관적 락은 트랜잭션이 자원에 접근할 때 발생할 수 있는 충돌을 처리하는 두 가지 다른 접근 방식이다.