<aside> 🔥
정확한 재고 수량 관리 : 플래시 세일, 이벤트 할인 등 대규모 트래픽 상황에서 다수의 사용자가 동시에 재고를 구매하려고 시도할 수 있습니다. 이때 재고 부족 상황이 발생하지 않도록, 여러 프로세스나 인스턴스에서 재고 관리가 가능하도록 하였습니다.
</aside>
<aside> 🔥
경쟁 상태(race condition)를 방지 : Redis 분산 락을 사용하여 한 번에 하나의 프로세스만 재고를 감소할 수 있어, 동시에 여러 프로세스가 재고를 변경하는 것을 방지하였습니다.
</aside>
lockKey = productIdmaxRetries를 통해 락 획득 시도 횟수를 제한함으로써, 무한 대기하지 않도록 방지Product updatedProduct = redisLockService
.lockAndExecute("product_stock_lock:" + productId, () ->
productService.decreaseStock(productId, request.quantit()));