1. 문제 상황
<aside>
💡 주문/결제 요청 시 재고 수량보다 많은 결제가 처리되는 문제 발생
</aside>
상황 : 재고조회 → 주문 → 결제 시나리오에 대해 1만개 요청을 동시에 발생시키는 상황
1. 재고수량 30개에 대해 1000개의 주문 요청 시 30개 이상이 결제 처리 됨
- 실제 상품 재고 수량은 30개 였지만, 총 249건이 결제 처리 되었다.
![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/91b13575-7f27-447c-976a-eadcbb201c70/f5e7e2d5-e19c-4689-9d44-9864e0d4a0ec/Untitled.png)
2. 주문 기록을 확인해보니 수량은 30개지만 주문 요청을 30개 이상 받았음
- 즉, 주문처리과정에서 249개 통과되었기 때문에, 결제처리도 249개가 처리되었다.
![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/91b13575-7f27-447c-976a-eadcbb201c70/a49e3a49-8486-4ef1-a9fc-d7a712b3b4e1/Untitled.png)
3. 재고 수량 30개에 대해 동시성 문제가 발생하여 주문요청이 30개 이상이 수행되었다.
- MySQL DB에서 stock 엔티티를 조회하고 증가/감소 하는 부분에서 동시성 문제가 발생함을 확인하였다.
- 소스코드
2. 해결 방법