인프런 커뮤니티 질문&답변

isLoaded()님의 프로필 이미지
isLoaded()

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

addStock, removeStock 동시성

작성

·

226

·

수정됨

0

addStock, removeStock의 동시성에 대해서 궁금해서 질문글을 찾아보니 동시성 문제가 당연히 발생할 수 있다는 글을 본적이 있습니다.

제가 궁금한 점은 order 클래스내에서 cancel() 메소드를 호출하게 되면, order와 연관된 orderItem 클래스로 들어가서 cancel() 메소드를 호출하게 되고, orderItem과 연관된 Item 클래스로 들어가서 다시 addStock() 메소드를 호출하게 됩니다.

여기서 서로 다른 스레드가 DB에서 같은 데이터(같은 레코드)를 가져오는 것은 알겠지만, 서로 다른 스레드가 똑같은 orderItem 인스턴스를 가져와 공유하게 되서 동시성 문제가 발생하는 것인가요?

영속성 컨텍스트는 각각의 스레드가 지연 로딩으로 서로 다른 EntityManager를 사용하여 서로 다른 트랜잭션을 사용하기 때문에, 같은 레코드를 DB로부터 가져오지만, 1차 캐시에서 인스턴스 생성시 내부 값만 같은 서로 다른 인스턴스로 생성하지 않을까 하는 추측이 생겨 질문드립니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. chunseunghun님

동시성 문제가 발생하는 것이 맞습니다.

다음을 참고해주세요.

https://www.inflearn.com/questions/17498

감사합니다.

isLoaded()님의 프로필 이미지
isLoaded()

작성한 질문수

질문하기