Optimistic Locking & Pessimistic Locking

Woozy9ucci·2023년 12월 28일
0

DB

목록 보기
4/4
  • 낙관적 락(Optimistic Locking)

    트랜잭션이 충돌하지 않는다고 가정하고 데이터를 수정하는 시점에 충돌을 감지하여 처리하는 방법이다.
    각각의 트랜잭션에 대해 버전 정보를 사용하여 충돌을 감지하는데
    트랜잭션이 데이터를 읽을 때 버전 정보를 함께 가져오고, 수정 시에는 해당 버전 정보를 확인하여 충돌이 발생한 경우 롤백 또는 재시도 등의 처리를 수행한다.
    데이터 충돌이 적은 경우에 유리하며, 동시성이 높아질 수 있다.
    (MVCC의 일종)

  • 비관적 락(Pessimistic Locking)

    트랜잭션이 충돌한다고 가정하고 데이터베이스의 특정 레코드나 테이블에 락을 걸어
    다른 트랜잭션이 해당 데이터를 읽거나 수정하지 못하도록 한다.
    이를 통해 데이터의 일관성을 유지하고 데이터 충돌을 방지할 수 있지만
    락이 오래 지속될 경우 다른 트랜잭션들의 성능에 영향을 줄 수 있으며, 동시성이 낮아질 수도 있다

  • In JPA

    • Optimistic Locking

      • @Version 어노테이션을 사용하여 Entity class의 version필드를 정의한다.
      • 조회시점의 버전과 수정시점(아마 write & flush?)의 버전이 다르면 충돌을 감지하고
      • ObjectOptimisticLockingFailureException 을 발생시킨다
      • @Lock(LockModeType.OPTIMISTIC) 등 과 같이 여러가지 Type으로 설정할 수 있다
    • Pessimistic Locking

      • @Lock 어노테이션을 사용하여 readLock or writeLock 을 설정할 수 있다
      • @Lock(LockModeType.PESSIMISTIC_WITE) ..
      • (select ..for share, select ..for update)
    • 각각의 LockModType : https://jaehoney.tistory.com/159

  • Isolation Level 과의 관계

    • Isolation level은 해당 Transaction이 다른 Transaction에서 변경한 데이터를 볼 수 있는 기준을 정의
    • Locking은 다른 트랜잭션이 해당 데이터에 접근(read or write)하는것을 제어

0개의 댓글