Pessimistic Optimistic Lock
Pessimistic Optimistic Lock
DB Lock
- DB에서 여러 트랜잭션이 데이터를 수정 할 때 충돌이 일어날 수 있음
- 이런 경우에는 Lock을 걸어 트랜잭션의 격리 수준을 높임
- Lock을 거는 방법으로는
Pessimistic Lock
과 Optimistic Lock
존재 - Lock의 종류로는
Shared Lock
과 Exclusive Lock
존재
Optimistic Lock
- 낙관적 lock이라는 뜻으로, 데이터 수정 시 충돌이 일어나지 않을 것이라고 보는 lock
- DB가 제공하는 lock을 사용하지 않고 application level에서 lock을 걺
- JPA 에서는
@Entitiy
내부의 필드에 @Version
어노테이션을 붙여 구현 가능
- DB 수준의 롤백이 존재하지 않으므로, 충돌시 대처 방안을 구해야 함
- 성능적으로는 더 좋지만, 충돌 발생시 개발자가 직접 처리해야 한다는 단점 존재
Pessimistic Lock
- 비관적 lock이라는 뜻으로, 데이터 수정 시 충돌이 일어날 것이라고 보는 lock
- 트랜잭션이 시작될 때
shared lock
또는 exclusive lock
을 걸고 트랜잭션을 수행 - 충돌이 일어난 경우, 트랜잭션이 취소되고 롤백이 수행됨
- Repetable Read 혹은 Serializable 정도의 격리성 수준을 제공
- 무결성을 지키기 용이
Exclusive Lock
- 배타적 잠금, 쓰기 잠금이라고도 부름
- 어떤 트랜잭션에서 데이터를 변경할 때 해당 자원에 거는 lock
- 이 자원에 다른 트랜잭션에서 shared lock / exclusive lock을 걸 수 없음
- 즉, 다른 트랜잭션이 읽거나 쓰는 행위를 금지
Shared Lock
- 공유 잠금, 읽기 잠금이라고도 부름
- 어떤 트랜잭션에서 데이터를 읽을 때 해당 자원에 거는 lock
- 이 자원에 다른 트랜잭션에서 exclusive lock을 걸 수 없음
- 즉, 다른 트랜잭션이 쓰는 행위를 금지
- 다만 여러 트랜잭션이 동시에 한 리소스에 shared lock을 걸어 읽을 수 있음
References
- https://2step-hyun.tistory.com/116
- https://jeong-pro.tistory.com/94
- https://sabarada.tistory.com/175