작성
·
190
답변 2
0
ABBCD 님 안녕하세요.
말씀하신 방법으로 해결이 가능합니다.
다만 그러한 방법을 사용하려면 where 절에 조건을 추가해주어야 할 것 같습니다.
update stock set quantity = quantity - :quantity where production_id = :id and quantity >= :quantity
강의의 예제에서는 말씀해주신 방법으로 해결이 가능하지만, 해결이 불가능한 상황들도 있기때문에 여러가지 방법을 알려드리고자 하였습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문자님의 상황에서는 동시성 문제를 해결하기 위해 데이터베이스에서 직접 UPDATE
문을 수행하여 재고 수량을 감소시키는 방식을 고려하고 계신 것 같습니다. JPA를 사용할 때, 엔티티를 가져와서 데이터를 변경하고 저장하는 과정에서 발생할 수 있는 동시성 문제를 update stock set quantity = quantity - :quantity where product_id = :id
와 같은 쿼리로 해결하고자 하는 것으로 보입니다.
실제로 JPA를 사용하는 상황에서 이러한 방식을 사용하기 위해서는 JPA의 @Query
어노테이션을 활용하여 커스텀 쿼리를 생성하고 @Modifying
어노테이션과 함께 사용할 수 있습니다. 이렇게 하면 엔티티를 로드하여 업데이트하는 대신 데이터베이스 레벨에서 직접 수량 감소를 수행할 수 있으며, 이 방식은 동시성 문제에 있어 다른 솔루션과 비교하여 더 효율적일 수 있습니다.
제가 찾아본 기존 답변 중 유사한 상황에 대해 설명하고 있는 경우는 없었으나, JPA의 @Query
와 @Modifying
에 대한 설명은 다음 URL을 통해 확인할 수 있습니다.
이러한 방식을 사용하여 동시성 문제를 해결하는 것이 적절한지 아니면 다른 방식을 사용하는 것이 더 낫다고 생각하는 경우, 추가적인 논의가 필요할 수 있습니다. 이와 관련하여 더 지식공유자와의 상세한 논의가 필요하다면, 해당 강의의 Q&A 섹션을 활용하시는 것이 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그럼 update stock set quantity = quantity - :quantity where product_id = :id 이렇게 사용하는 방식이 더 비효율적이거나 사용이 불가능한 상황이 어느때인지 알수있을까요?