Spring Data Jpa lock(락)에 대해 알아보자

예를들어 투표를 실시간으로 받아서 집계하는 테이블이 있다고 했을 때
2명의 사용자가 동시에 select를 하고 update를 한다고 치자

기존에 받은 표는 10표인데

사용자A가 select한 시점에서는 10표이고 여기에 +1표를 해서 11표로 업데이트를 친다.
사용자B가 select한 시점에서도 10표이고 여기에 +1표를 해서 11표로 업데이트를 친다.

우리가 원하는 결과는 12표가 되어야 하는데 위 상황이 발생 한다면 11표가 되어서 1표가 없어진다.

이게 그냥 단톡방에서 뭘 먹으러 갈지 투표 하는 거라면 크게 상관이 없지만 이게 만약 돈이라면 어떻게 될까?

그리고 백엔드 개발자 입장에서 만약 돈과 관련해서 1200만원이 되어야 하는데 1100만원이 되었다면 100만원은 백엔드 개발자가 물어주어야 할까?

이게 1200만원이 아니고 12억이라면?

이런 일들이 실제로 일어나기 때문에 lock이라는 것을 사용한다.

Spring Data Jpa에서 Lock은 두가지 종류가 있다.

optimistic locking(옵티미스틱 락킹)
pessimistic locking(프리스미스틱 락킹)

대부분의 경우는 옵티미스틱 락킹을 사용하고 몇몇 경우에만 프리스미스틱 락킹을 사용한다.

옵티미스틱 락킹은 번역을 해보면 '낙관적 락킹'인데 말 그대로 긍정적으로 본다는 뜻이다. 무엇을 긍정적으로 보냐면 대체로 위와 같은 일이 안 일어난다고 보는 것이다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now