## 루비 온 레일즈에서 동시에 다수 사용자가 DB 수정이 필요한 작업을 수행할 때 처리하는 방법, 동시성 제어, lock(At the same time, how to handle when multiple users perform a task that requires DB modification in Ruby on Rails, concurrency control, lock)
동시에 다수 사용자가 동일한 row의 값을 변경하게 되는 때가 있다. 예를 들어, 판매 물품의 재고가 1개 남았는데 동시에 2명의 사용자가 그 물품을 사게 된다면 어떻게 될까? 재고는 1개인데 둘 다 구매한 것으로 저장된다면? 좋은 예시(송금 예시와 같은)인지는 잘 모르겠으나, 이런 경우 처리할 수 있는 방법 중 하나를 적어보려고 한다.
```ruby
product = Product.first
product.with_lock do
if product.amount > 0
product.amount -= 1
product.save!
end
end
```
특정 상품에 lock 처리를 해서 1개 남아있을 때, 2명이 동시에 구매 시도를 하더라도 1명만 구매할 수 있도록 처리를 한다.
댓글
댓글 쓰기