Spring-Boot/재고시스템으로 알아보는 동시성이슈 해결방법
-
동시성 문제 해결 방안Spring-Boot/재고시스템으로 알아보는 동시성이슈 해결방법 2023. 4. 24. 09:22
예상 - 스레드 1의 작업이 끝나고 스레드 2의 작업이 이루어질 것이라고 예상 실제 - 스레드 1이 데이터를 가져가서 갱신하기 전에 스레드 2가 데이터를 가져간다. - 둘 다 갱신을 하지만 quantity가 5이기에 갱신 누락 발생 * 이렇게 둘 이상의 스레드가 공유 데이터에 Access할 수 있고 동시에 변경할려고 할 때 발생하는 문제점이 동시성 문제이다. 1. Synchronized 이용 // @Transactional public synchronized void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository..