[question] JPA Lock과 DB Lock
Closed this issue · 3 comments
wooyounggggg commented
질문
JPA Lock과 DB Lock
상세 내용
책 p.537에서, @Version 애너테이션을 적용한 애트리뷰트 값을 낙관적 잠금(Optimistic Locking) 메커니즘에 사용한다고 합니다.
이와 관련해서 JPA의 Lock을 조사해보니 JPA의 Lock에는 낙관적 잠금(Optimistic Locking)과 비관적 잠금(Pessimistic Locking) 이 존재한다고 하는데, 각각에 대해 조사해보면 좋을 것 같습니다.
또한, Lock과 관련해서 데이터베이스의 Lock이라는 키워드도 생각이 나는데, 이것도 함께 조사해보면 좋을 것 같습니다. 😄
연관 챕터
참고
JPA Lock - JPA에서 Optimistic Lock과 Pessimistic Lock
DB Lock - Lock으로 이해하는 Transaction의 Isolation Level
JasonYoo1995 commented
문제 상황
비관적 잠금 (Pessimistic Lock, 선점 잠금)
Order order = entityManager.find(Order.class, orderNo, LockModeType.PESSIMISTIC_WRITE);
교착상태 가능성
- 스레드 1: A 정보를 구하고 잠금
- 스레드 2: B 정보를 구하고 잠금
- 스레드 1: B 정보를 구하고자할 때 블로킹
- 스레드 2: A 정보를 구하고자할 때 블로킹
교착 상태 해결
최대 잠금 시간 지정
낙관적 잠금 (Optimistic Lock, 비선점 잠금)
- 잠금(Lock)하지 않음
- version 불일치 시 트랜잭션 커밋 실패
@Entity
@Table(name = "order")
public class Order {
...
@Version
private long version;
...
}
@Version
을 붙여주면, 별도의 로직을 작성할 필요 없이
낙관적 잠금을 위해 필요한 코드 또는 쿼리를 자동 생성해 줌
emiling commented
DB Lock 추가 설명이 필요합니다~
JasonYoo1995 commented
#71 참고