안녕하세요 영한님, 여러 강의에서 질문드린적이 있는데요.
오늘 드릴 질문에 대한 답을 찾다가 이 강의까지와서 질문을 남기게 되네요..
JPA 강의 시리즈(?)를 보다보면 JPA Shop 프로젝트를 하게되는데요.
비즈니스 로직 중에서 주문을 하면 해당 상품에 대한 재고 수량을 감소시키는 로직이 있습니다.
만약 A라는 상품의 재고가 10인 상태에서 thread-A와 thread-B가 동시에 주문 로직을 수행할 경우, 두 스레드 모두 A라는 상품에 대한 재고 수량을 10으로 인지하게 됩니다. 그리고 두 스레드의 로직이 끝났을 때(트랜잭션이 종료되었을 때) A 상품의 재고수량을 1씩 감소시켜 8이라는 재고 수량을 기대하게 되겠지만 실제로는 9라는 수량을 갖게되지 않을까...생각됩니다.
실제 쿼리를 날렸다면 (DB 밴더사에 따라 다를 수 있지만) thread-A가 update하는 동안 thread-B는 대기 상태로 있다가 thread-A가 커밋을 한 뒤에 update를 마저 수행할 텐데요.
1차 캐시를 사용하는 JPA의 경우, 위에서 질문드린 데이터 불일치 문제가 발생하지 않을까 생각됩니다.. 혹시 제가 놓친 부분이라든지 해당 부분과 관련된 키워드 같은 걸 알려주시면 감사하겠습니다.