선점 잠금(pessimistic lock)
비선점 잠금(optimistic lock)
보통 비관적인 락이라 불림.
다른 스레드가 수정하지 못하도록 우선 해당 row에 락을 거는 방식
해당 트랜잭션이 커밋 되면, row에 걸린 락은 해제됨.
보통 DBMS가 제공하는 행단위 장금 을 사용해서 구현함.
for update
JPA 로는 LockModeType 을 이용해서 구현함.
LockModeType
Spring data jpa는 @Lock 제공.
@Lock
선점 잠금에 따른 교착 상태는 사용자가 많을수록 발생할 가능성이 높음.
이러한 교착상태를 방지하고자 최대 대기 시간 정해야함
Spring Data jpa 에서는 @QueryHint 를 통해 이를 구현하고 있음.
@QueryHint
변경한 데이터가 실제 DB에 반영하는 시점에, 변경이 가능한지 확인하는 방식
Version 을 이용해서, 업데이트하려는 row가 적절한지 판단함.
JPA에서는 @Version 을 통해, 버져닝을 할 수 있는 컬럼을 추가할 수 있음.
@Version
Last updated 2 years ago