Database (2) 썸네일형 리스트형 재고가 한 개 남은 물건을 동시에 여러명이 장바구니에 담으면? (feat. Redis) 비관적 잠금(Pessimistic Lock) 비관적 잠금이란 동일한 데이터를 동시에 수정 할 가능성이 높다는 비관적인 전제로 잠금을 거는 방식을 말합니다. 지난 포스팅에서 MySql의 User Level Lock을 활용한 동시성 제어에 대해 알아보았었는데 해당 방식을 예로들 수 있습니다. MySql에서 문자열을 통해 잠금을 획득하고 해당 잠금이 해제될 때 까지 대기해야하는 User Level Lock은 사용하기에 편리하고 추가적인 인프라 구성이 필요없는 점이 장점이지만 코드가 Block된다는 점이 개발자에게 부담으로 다가올 수 있습니다. 낙관적 잠금(Optimistic Lock) 낙관적 잠금은 동시에 데이터를 수정하지 않을 것이라고 낙관적으로 판단하여 잠금을 거는 방식을 말합니다. 데이터베이스에 락을 거.. 재고가 한 개 남은 물건을 동시에 여러명이 장바구니에 담으면? (feat. MySql User Level Lock) 재고 차감 동시성 문제 A라는 상품이 현재 창고에 3개가 남아있는데 이 상품을 동시에 10명이 구매하려고 장바구니에 추가하면 개발자는 먼저 주문한 3명의 장바구니에만 상품이 담기는 결과를 원할 것 입니다. 그러면 원하는 결과가 나오는지 한번 테스트 해보겠습니다. 아래는 테스트를 위한 테이블 입니다. 상품과 주문 테이블은 1:N의 구조입니다. 동시에 10명이 1이라는 id를 가진 상품을 장바구니에 담으려고 시도할 때 아무런 조치를 취하지 않고 단순히 상품의 재고와 현재 주문된 상품의 차이를 통해 재고를 차감시켰을때 결과 입니다. public int addOrder(Long productId) { if(validationQuantity(productId)) { orderMapper.addOrder(produ.. 이전 1 다음