inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

엔티티매니저와 영속성컨텍스트에 관해서

897

shef

작성한 질문수 22

3

여러 질문 답변을 찾아보고 내용을 종합해서 이해해본 결과 

엔티티매니저와 영속성컨텍스트에 관해서 제가 현재 이해하고 있는게 맞는지 확인 부탁드립니다 ..

 

엔티티 매니저

1. 언제 생성되나

엔티티 매니저의 빈 스코프는 request로 설정되어 있다.

스프링이 처음 의존성을 주입하는 단계에서 엔티티 매니저를 의존하는 다른 빈들은 실제 엔티티 매니저가 아닌 가짜 엔티티 매니저(프록시)를 주입 받는다.

 고객의 요청이 오고 엔티티 매니저가 관련 로직을 실행해야 하는 시점에 가짜 엔티티 매니저는 해당 트랜잭션과 관련된 실제 엔티티 매니저를 호출해준다. 

여러 빈들이 엔티티매니저에 의존하고 있을 때 같은 고객의 요청 안에서는 모두 같은 엔티티매니저를 반환받는다.

2. 몇 개가 생성되나

고객이 요청할 때마다 생성되고 요청이 끝나면 사라진다.
고객의 요청이 동시에 100명이 오면 100개 10000명이 오면 10000개가 생성된다.

3. 영속성 컨텍스트와의 관계

엔티티 매니저가 트랜잭션을 실행하면 영속성 컨텍스트가 생성되고 트랜잭션이 종료되면 영속성 컨텍스트가 사라진다.

4. 궁금한 점 

같은 트랜잭션이면 서비스, 리포지토리에서 사용하는 EntityManager가 모두 같은 영속성 컨텍스트에 접근하게 되기 때문에 스프링 환경에서는 엔티티매니저와 영속성 컨텍스트의 관계가 N:1이 될 수 있다고 설명해주셨는데요.
답변 링크

같은 트랜잭션이면 같은 고객의 요청 안에서 이루어지고 있고 그렇다면 서비스, 리포지토리에서 사용하는 엔티티매니저는 모두 동일한 엔티티매니저이기 때문에 1:1 관계가 아닌가요?

 

entitymanager persistencecontext JPA java

답변 1

2

김영한

안녕하세요. 손튤립님

1. 언제 생성되나

엔티티 매니저의 빈 스코프는 request로 설정되어 있다.

-> 정확한 정답은 X입니다. 트랜잭션 범위에 종속적입니다. 하나의 요청이어도 트랜잭션이 시작하고, 끝나고 시작하고 끝나고 2번 실행되면 엔티티 매니저의 영속성 컨텍스트도 2번 생성되고 종료됩니다.

그래서 3번에 적어주신 답이 맞습니다.

 

4번은 사실 생각하신 내용도 맞습니다.

이렇게 생각히면 됩니다. 서비스에서 사용하는 엔티티 매니저, 리포지토리에서 사용하는 엔티티 메니저는 눈으로 보기에는 2개(N개) 입니다. 그런데 실제로는 1개의 영속성 컨텍스트를 바라보고 있습니다. 따라서 N:1입니다.

감사합니다.

 

 

0

shef

감사합니다 ^^

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

55

2

inheritance startegy 선택시 고려사항

0

36

1

Entity 동등성 비교

0

38

1

실무 조언 관련 질문입니다.

0

65

1

H2데이터베이스 파일 생성

0

76

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

66

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

62

1

JPQL 메소드와 락

0

62

1

Delivery @OneToOne

0

70

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

104

2

UnsupportedOperationException 발생

0

97

3

H2 Database 연결이 안됩니다.

0

101

2

연관관계 매핑 질문드립니다.

0

93

2

h2데이터베이스 실행오류

0

114

2

persistence.xml

0

119

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

87

1

영속성 컨텍스트

0

74

1

JPA 프록시

0

105

1

Native Query와 MyBatis

0

81

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

97

1

임베디드 타입 예시 코드 관련 질문

0

125

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

100

3

인텔리제이 패키지 커서 단축키 질문

0

112

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

152

1