데이터베이스 락

바퀴달린 개발자·2021년 10월 25일
0
  • 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치

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

0개의 댓글