도메인-주도-개발-시작하기

도메인 주도 개발 시작하기

ch 8

  • 선점 잠금(pessimistic lock)

  • 비선점 잠금(optimistic lock)

선점 잠금

  • 보통 비관적인 락이라 불림.

  • 다른 스레드가 수정하지 못하도록 우선 해당 row에 락을 거는 방식

  • 해당 트랜잭션이 커밋 되면, row에 걸린 락은 해제됨.

  • 보통 DBMS가 제공하는 행단위 장금 을 사용해서 구현함.

    • for update

  • JPA 로는 LockModeType 을 이용해서 구현함.

  • Spring data jpa는 @Lock 제공.

교착 상태

  • 선점 잠금에 따른 교착 상태는 사용자가 많을수록 발생할 가능성이 높음.

  • 이러한 교착상태를 방지하고자 최대 대기 시간 정해야함

  • Spring Data jpa 에서는 @QueryHint 를 통해 이를 구현하고 있음.

비선점 잠금

  • 변경한 데이터가 실제 DB에 반영하는 시점에, 변경이 가능한지 확인하는 방식

  • Version 을 이용해서, 업데이트하려는 row가 적절한지 판단함.

  • JPA에서는 @Version 을 통해, 버져닝을 할 수 있는 컬럼을 추가할 수 있음.

Last updated