- 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치
optimistic lock
- 낙관적인
: 충돌이 발생하지 않을 것이라고 낙관적으로 보는 것
- 버전값을 통해서 관리한다.
조회할때는 둘다 버전이 1 그래서 오더라인 추가후 커밋하면 버전값도 하나 올린다. 이때 버전값이 2가된다.
B가 커밋하려고 했는데 가져올때 버전은 1이었는데 커밋하려니까 버전2가 되니까 optimistic lock exception을 발생시키는 것
jpa는 @Version만 달아주면 알아서 됨
pessimistic lock
- 비관적인
: 충돌이 발생할것으로 보고 잠궈놓는다.
- 한쪽이 끝나야 order를 가져올 수 있다.
- 가져올때 db에 락을 건다.
- db에 직접 락을 걸기 때문에 데드락 위험
shared lock
- 읽을 수는 잇는데 update, delete 방지
exclusive lock
둘 중 어떤게 좋을까?
- 충돌이 자주 발생하는 상황인가?
- 읽기와 수정하기의 비율은 어디에 가까운가
- 일반적으로 웹 어플리케이션은 optimistic lock을 주로 사용한다.
참고
https://www.youtube.com/watch?v=w6sFR3ZM64c&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=74