동시성 제어를 위한 DB 락에 대해 알아보자

·
Java/JPA
이번에 컨텐츠를 사고팔 수 있는 커머스 서비스를 개발하다보니 동시에 일어난 결제를 처리하는 방법으로 락에 대해서 공부하게 되었다. 내용을 복습할 겸 블로그에 정리해보고자 한다. 1. 락이란?웹 서비스는 여러 사용자의 요청을 동시에 처리한다. 조회 API나 데이터 정합성이 덜 중요한 데이터라면 큰 문제가 없을 수 있지만, 잔액 차감, 재고 감소처럼 정합성에 민감한 데이터에서는 동시 요청이 치명적일 수 있다. 예를 들어 사용자 A의 크레딧 잔액이 10,000원이고, 동시에 두 개의 구매 요청이 들어왔다고 가정해보자.첫 번째 요청은 7,000원을 차감하려고 하고, 두 번째 요청도 7,000원을 차감하려고 한다. 둘 다 거의 동시에 잔액을 조회하면 두 요청 모두 “현재 잔액은 10,000원이므로 구매 가능하다”..