DB Lock

0

TIL

목록 보기
145/183

DB Lock은 데이터베이스에서 여러 사용자가 동시에 데이터를 읽거나 쓰는 작업을 수행할 때, 데이터의 일관성과 무결성을 보장하기 위해 특정 데이터에 대한 접근을 제어하는 메커니즘을 말한다.

주요 목적

  1. 동시성 제어: 여러 트랜잭션이 동시에 실행될 때, 데이터의 일관성을 유지하기 위해 사용된다.
  2. 데이터 무결성 보장: 동시에 여러 사용자가 동일한 데이터를 변경하는 경우 데이터의 무결성을 보장한다.

DB Lock의 종류

1. 공유 락 (Shared Lock, S Lock)

  • 정의: 공유 락은 여러 트랜잭션이 동시에 동일한 데이터를 읽을 수 있도록 허용하는 잠금이다. 하지만, 데이터에 공유 락이 걸려 있는 동안에는 다른 트랜잭션이 해당 데이터를 수정할 수 없다.
  • 특징:
    - 여러 트랜잭션이 동시에 공유 락을 획득할 수 있다.
    - 공유 락이 걸린 데이터는 읽기 작업만 가능하며, 쓰기 작업은 불가능하다.
  • 사용 예시: 트랜잭션이 데이터베이스의 특정 행을 조회할 때, 다른 트랜잭션이 동일한 행을 수정하지 못하도록 하기 위해 사용된다.

2. 배타 락 (Exclusive Lock, X Lock)

  • 정의: 배타 락은 특정 트랜잭션이 데이터에 대해 단독으로 접근하여 수정할 수 있도록 하는 잠금이다. 배타 락이 걸린 데이터에 대해서는 다른 트랜잭션이 읽기나 쓰기 작업을 수행할 수 없다.
  • 특징:
    - 오직 하나의 트랜잭션만 배타 락을 획득할 수 있다.
    - 배타 락이 걸린 데이터는 읽기 및 쓰기 작업이 모두 불가능하다.
  • 사용 예시: 트랜잭션이 데이터베이스의 특정 행을 수정할 때, 다른 트랜잭션이 그 데이터를 읽거나 수정하지 못하도록 하기 위해 사용된다.

3. 비관적 락 (Pessimistic Locking)

  • 정의: 비관적 락은 데이터 충돌이 발생할 가능성이 높다고 가정하고, 데이터에 접근할 때마다 잠금을 걸어 다른 트랜잭션이 해당 데이터를 수정하지 못하도록 하는 방식이다.
  • 특징:
    - 데이터의 수정이 예상되면 바로 락을 획득한다.
    - 락이 걸려 있는 동안 다른 트랜잭션은 해당 데이터에 접근할 수 없다.
  • 장점: 충돌이 발생할 가능성이 높은 상황에서 데이터 무결성을 보장할 수 있다.
  • 단점: 성능이 저하될 수 있으며, 과도한 잠금으로 인해 교착 상태가 발생할 수 있다.
  • 사용 예시: 은행 계좌의 잔액을 수정하는 경우처럼, 데이터 충돌이 빈번하게 발생할 수 있는 상황에서 사용된다.

4. 낙관적 락 (Optimistic Locking)

  • 정의: 낙관적 락은 데이터 충돌이 드물게 발생할 것으로 가정하고, 데이터를 수정하기 전까지 잠금을 걸지 않고 트랜잭션이 완료될 때 충돌이 있는지 확인하는 방식이다.
  • 특징:
    - 트랜잭션 동안에는 잠금이 걸리지 않지만, 커밋 시점에 데이터가 변경되지 않았는지 확인한다.
    - 충돌이 감지되면 트랜잭션을 롤백하고 다시 시도한다.
  • 장점: 동시성 제어가 필요하지만 충돌이 드문 경우 성능을 최적화할 수 있다.
  • 단점: 충돌이 발생하면 롤백과 재시도로 인한 오버헤드가 발생할 수 있다.
  • 사용 예시: 쇼핑 카트에 상품을 추가하는 것과 같은, 데이터 충돌이 드물게 발생하는 상황에서 사용된다.

5. 명명된 락 (Named Lock)

  • 정의: 명명된 락은 데이터베이스 객체나 특정 데이터가 아닌, 이름을 기반으로 잠금을 걸 수 있는 메커니즘입니다. 특정 리소스에 대한 접근을 제어하는 데 사용된다.
  • 특징:
    - 락에 이름을 부여하여, 트랜잭션 간의 동기화를 위해 사용된다.
    - 잠금의 범위가 데이터베이스 객체에 국한되지 않으며, 임의의 리소스에 대해 잠금을 설정할 수 있다.
  • 사용 예시: 애플리케이션 레벨에서 동기화가 필요한 작업을 제어하기 위해 사용된다. 예를 들어, 대기열(queue) 작업을 처리하는 동안 중복 처리를 방지하기 위해 사용된다.

6. 분산 락 (Distributed Lock)

  • 정의: 분산 락은 여러 서버나 노드에 걸쳐 있는 분산 시스템에서 특정 자원에 대한 접근을 제어하기 위해 사용되는 락이다. 주로 분산 환경에서 데이터의 일관성과 동기화를 보장하기 위해 사용된다.
  • 특징:
    - 여러 노드에서 동일한 자원에 접근할 때, 데이터의 일관성을 보장하기 위해 사용된다.
    - 분산 시스템의 특성상 네트워크 지연이나 장애를 고려한 설계가 필요하다.
  • 장점: 분산 환경에서 데이터의 일관성을 유지할 수 있다.
  • 단점: 분산 시스템에서의 네트워크 지연, 장애 처리 등의 복잡성을 동반한다.
  • 사용 예시: 분산 캐시 시스템에서 같은 데이터를 동시에 수정하는 상황을 방지하기 위해 사용된다. 대표적인 예로 Redis의 SETNX 명령어를 이용한 락 구현이 있다.

0개의 댓글

관련 채용 정보