Lock & JPA Lock

jaegeunsong97·2023년 8월 22일
0

테코톡공부

목록 보기
2/2

출처

10분 테코톡 우르의 Lock & JPA Lock


Lock

1. Lock

  • 데이터가 동시에 수정 요청이 생기는 경우! -> 데이터의 일관성 문제가 발생

만약 수정중에 누군가가 읽으면?

  • 데이터 일관성을 해결하는 방법 중 1가지 -> Lock

내가 하는 동안 아무도 못 건드려!


Lock과 Transaction

1. Lock과 Transaction

Lock : 동시성 제어
Transaction : All or Nothing

결론 : 각 트랜젝션들을 어떻게 처리할지 구현 방법 중 1가지 -> Lock

따라서 Lock이 Transaction에 포함됨


Lock 전략

1. 낙관적 Lock / 비관적 Lock

낙관적 Lock : 애초에 트랜젝션이 부딪히지 않는다. 따라서 트랜잭션이 부딪히면 그 때 조치를 취함

비관적 Lock : 애초에 트랜젝션이 계속해서 부딪힘


JPA 낙관적 Lock / 비관적 Lock

쿠폰5장 사람20명 - 쿠폰 발급받기

결과 : 20장 쿠폰 발급

1. 낙관적 Lock 해결

결과 : 쿠폰발급 3장 / 낙관적 Lock 획득 실패 횟수 17번

why : JPA에서는 최초의 커밋만 인정하기 때문에 JVM이 어떻게 되느냐에 따라서 발급되는 쿠폰이 달라짐 (1장..2장..3장..최대 5장까지만)

버전 변경

낙관적 Lock을 얻을 수 없다. 따라서 Count X

결론 : 낙관적 Lock은 최초의 커밋이 발생한다. 이때 JVM이 어떻게 되느냐에 따라서 발급되는 쿠폰이 달라진다. 고정적인데 아니다.

2. 비관적 Lock 해결

결과 : 쿠폰발급 5장 / 갯수 부족 횟수 = 15

why : 동시에 Transaction이 발동해도 먼저 들어간 Transaction만 발동하고 Lock이 걸리기 때문에

Transaction이 DB에 접근할 때부터 Lock을 걸어버리는 쿼리

3. 차이

비관적 Lock은 DB에 접근할 때부터 Lock을 걸어버리지만 낙관적 Lock은 DB에 접근할 때는 Lock하지 않고 처음 순서대로 커밋을 하고 처음 commit과 다르면 Transaction을 하지 않는다.

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글