inflearn logo
강의

Course

Instructor

Real-world! Spring Boot and JPA Utilization 1 - Web Application Development

안녕하세요, EntityManager에 대해 궁금한 점이 있어 질문 남깁니다.

3374

iamgood

10 asked

11

JPA 기본편 강의와 같이 듣고 있습니다.

좋은 강의 항상 감사드립니다.

(질문 도중 제가 잘못 이해 하고 있는 부분이 있다면 말씀주시기 바랍니다.)

다름 아니라 EntityManager는 요청이 들어올 때 생성되어 사용됬다가

해당 요청이 마무리 되면 삭제된다고 이해 하고 있습니다.

근데 @Repository를 DI를 통해 생성할 때 @RequiredArgsConstructor

를 통해 EntityManager도 생성해줍니다.

그럼 이 EntityManager 인스턴스는 @RequiredArgsConstructor

위 어노테이션으로 인해 필요할 때 마다 그 때 그 때 생성된다고 볼 수 있을까요? 

아니면 싱글톤 객체 안에 필드임으로 그 때 그 때 새로운 값을 할당 받는건가요?

감사합니다, 좋은 하루 되세요~

웹앱 spring JPA java spring-boot

Answer 2

20

yh

안녕하세요. 승범님

먼저 @RequiredArgsConstructor는 단순하게 생성자를 자동으로 만들어주는 롬복 애노테이션입니다.

스프링은 생성자가 하나이면 자동으로 @Autowired가 적용됩니다.

따라서 EntityManager가 생성자를 통해서 주입되고, 최종적으로 다음 필드에 담겨집니다.

private final EntityManager em;

결과적으로 주입된 EntityManager는 싱글톤이 맞습니다.

여기에서 싱글톤이니 동시성 문제가 될 수 있지요.

스프링 프레임워크는 여기에 실제 EntityManager를 주입하는 것이 아니라, 사실은 실제 EntityManager를 연결해주는 가짜 EntityManager를 주입해둡니다.

그리고 이 EntityManager를 호출하면, 현재 데이터베이스 트랜잭션과 관련된 실제 EntityManager를 호출해줍니다.

덕분에 개발자는 동시성 이슈에 대한 고민없이, 쉽게 개발할 수 있습니다.

관련해서 JPA 책 13.1 트랜잭션 범위의 영속성 컨텍스트를 참고해보시면 더 자세한 내용을 이해하실 수 있습니다.

추가로 생성자 하나, @RequiredArgsConstructor 주입 부분은 스프링 핵심 원리 - 기본편에서 자세히 설명드립니다^^

감사합니다.

6

iamgood

정말 최고의 답변이네요, 동시성 문제 하며 

제가 명확히 질문드리지 못한 궁금한 점까지

다 짚어 주셨습니다. 정말 감사드립니다.

책에서 한 번 찾아봐야겠습니다.

강의는 간단한 프로젝트 끝나고 스프링에 대한 깊은 이해를 위해

꼭 듣도록 하겠습니다. 

감사합니다. 좋은 하루 되세요~

sdk 설정 오류

0

49

2

오탈자 - @Transactional

0

55

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

63

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

137

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

100

1

멤버서비스테스트 부분에서 막힙니다.

0

164

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

118

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

112

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

108

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

76

2

Repository에서 EntityManager 주입 방식 차이

0

88

1

롬복과 사용자 정의 setter 메서드

0

71

1

주문 목록 조회 fetch join 질문드립니다

0

81

1

dirty checking 질문드립니다.

0

81

1

동시성 관련 질문입니다

0

74

1