1. 문제 상황
<aside>
💡 주문/결제 요청 시 재고 수량보다 많은 결제가 처리되는 문제 발생
</aside>
상황 : 재고조회 → 주문 → 결제 시나리오에 대해 1만개 요청을 동시에 발생시키는 상황
1. 재고수량 30개에 대해 1000개의 주문 요청 시 30개 이상이 결제 처리 됨
- 실제 상품 재고 수량은 30개 였지만, 총 249건이 결제 처리 되었다.
2. 주문 기록을 확인해보니 수량은 30개지만 주문 요청을 30개 이상 받았음
- 즉, 주문처리과정에서 249개 통과되었기 때문에, 결제처리도 249개가 처리되었다.
3. 재고 수량 30개에 대해 동시성 문제가 발생하여 주문요청이 30개 이상이 수행되었다.
- MySQL DB에서 stock 엔티티를 조회하고 증가/감소 하는 부분에서 동시성 문제가 발생함을 확인하였다.
- 소스코드
2. 해결 방법