CS 잡지식
EntityManager에 대한 동시성(concurrency) 문제
JIN_YOUNG _KIM
2023. 5. 17. 16:16
@SpringBootTest
@Transactional
public class QuerydslBasicTest {
@Autowired
EntityManager entityManager;
// 이하 생략
}
[필드값]인 EntityManger는 싱글톤이므로, 만약 멀티 쓰레딩 환경에서 여러 쓰레드가 동시에 접근하는 issue가 발생을 한
다.
그러나 다들 아시다시피, 실제로 Spring을 사용하면 그러한 문제는 전혀 발생하지 않는다.
당연히 Spring이 동시성 문제를 해결해 놓은 것이다.
과연 어떻게 EntityManager의 동시성 문제를 해결한 것일까??
스프링 프레임워크는 여기에 실제 EntityManager를 주입하는 것이 아니라,
사실은 실제 EntityManager를 연결해주는 [가짜 EntityManager]를 주입해둡니다.
그리고 이 EntityManager를 호출하면, 현재 데이터베이스 트랜잭션과 관련된 실제 EntityManager를 호출해줍니다.
덕분에 개발자는 동시성 이슈에 대한 고민없이, 쉽게 개발할 수 있습니다.
(구체적인 것은 JPA 책을 봐야 한다)