[DB] database lock

📝 1yangsh·2022년 3월 28일
0

데이터베이스 락

  • 데이터베이스 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 실행을 보장할 수 있는 직렬화 장치
  • 동시에 접근해서 수정하려고 할 때 데이터의 일관성이 깨질 수 있다
  • 데이터의 일관성을 지키기 위해 lock을 걸고 이를 관리하는 것이 locking이다

    동시성
    일관성
    잠금

필요 업무

  • 돈 관련 송금 시스템
  • 도서 관리 시스템 (대여)
  • 수강 신청
  • 멀티 트랜잭션 환경

Lock의 종류

1. Optimistic Lock

  • 낙관적인
    • 기본적으로 데이터 갱신시 충돌이 일어나지 않을 것이라고 낙관적으로 바라 보는 것
  • 비선점적인
    • 데이터 갱신시 충돌이 발생하지 않을 것이라고 예상하기 때문에, 기본적으로 락을 걸지 않음

특징
1. 버전을 이용해 관리 (Version)
2. 어플리케이션 락
3. 충돌 방지

같은 데이터베이스에 접근하여 데이터 갱신시 먼저 커밋을 진행하면 DB의 버전을 업한다. 다음으로 갱신하려고 할 때 버전이 바뀌었기 때문에 Optimistic Lock이 발생한다

2. Pessimistic Lock

  • 비관적인
    • 기본적으로 데이터 갱신시 충돌할 것이라고 비관적으로 보고 미리 잠금하는 것
  • 선점적인
    • 데이터 갱신시 충돌이 발생할 것이라고 예상하기 때문에 우선적으로 락을 건다 (조회할 때 부터 락)

특징
1. 가져올 때 DB에 락을 건다
2. 데이터베이스 락
3. 무결성의 장점
4. 데드락의 위험성

Pessimistic Lock의 종류

Shared Lock

  • 다른 사용자가 동시에 읽을 수 있지만, Update, Delete 방지

Exclusive Lock

  • 다른 사용자가 읽기, 수정, 삭제 모두를 불가능하게 함

Optimistic vs Pessimistic

어떤 상황에 어떤 락을 사용하는게 용이할까? (락은 비쌈)

  • 충돌이 자주 발생한다
  • 읽기와 수정의 비율은 어디에 가까운가
  • 일반적으로 웹은 Optimistic Lock을 사용

Reference

카일의 데이터베이스 락

profile
개발 경험 저장소

0개의 댓글