Database와 Race Condition (2)

fart man·2026년 2월 27일

전 포스트
https://velog.io/@imprity/Database%EC%99%80-Race-Condition-1

그럼 이의 대한 첫번째 해결방안 PESSIMISTIC LOCKING을 살펴보자.

뭔가 복잡할거 같지만 실제로는 간단하다. 첨 읽을 때 lock을 걸어주는 것이다.

시연

전에랑 마찬가지로 읽은 값을 바탕으로 재고를 차감한다.

이때

select * from products;

가 아닌

select * from products for update;

를 쓴다!

그리고 오른쪽이 똑같이

select * from products for update;

할려고 하면 block이 된다!

그리고 왼쪽이 commit을 하면 오른쪽이 값을 볼 수 있는데 오른쪽은 왼쪽이 commit을 한 후에만 값을 볼 수 있으므로 9를 보게 된다.

그럼 오른쪽도 9를 보고 '어, 재고가 9개네, 8개로 줄여하지 하고' 재고를 8로 업데이트 한다.

이를 통해 재고를 두번 차감할 경우 8개로 정상적으로 차감 된 것을 확인할 수 있다.

이에 대해 더 자세히 공부할려면 https://dev.mysql.com/doc/refman/8.4/en/update.html 참고

0개의 댓글