inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

영속성 컨텍스트 1

엔티티매니저의 대해 질문이 있습니다!

419

YOGURT

작성한 질문수 30

1

EntityManager는 빈 스코프가 프록시로 설정된다고 알고있습니다. 하지만 결국은 원본 엔티티매니저를 사용하는것이라고 이해했습니다. 그러면 요청이 들어오면 엔티티매니저를 사용하는데 엔티티매니저 내에 영속성 컨텍스트가 있고 싱글톤으로 유지된다면 영속성컨텍스트가 다른 요청이랑 공유되는게 아닌가요?

싱글톤으로 등록되어 있는데 영속성컨텍스트가 공유되지 않는 이유가 궁금합니다. 엔티티매니저가 빈인데 어떻게 요청마다 생성되는것인지 궁금합니다.

java jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. EntityManager와 영속성 컨텍스트에 대한 질문이시군요.

EntityManager는 일종의 영속성 컨텍스트를 관리하는 역할을 하며, 이를 통해 데이터베이스와의 상호작용을 담당합니다. 영속성 컨텍스트는 엔티티를 관리하고 데이터베이스와의 변화를 추적합니다. 따라서 EntityManager는 엔티티매니저 팩토리에서 생성되며, 요청이 들어올 때마다 새로운 EntityManager가 생성됩니다.

EntityManager는 보통 스프링 프레임워크에서는 빈 스코프가 프록시로 설정되지 않습니다. 대신에 스프링에서는 EntityManager를 요청이 들어올 때마다 생성해주는 프록시 개념인 EntityManager Proxy를 사용합니다. 이 Proxy는 실제 EntityManager를 생성하고, 요청이 끝난 후에 자동으로 종료시키는 역할을 합니다.

따라서 각각의 요청은 독립된 EntityManager를 사용하게 되며, 그에 따라 각각의 영속성 컨텍스트도 독립적으로 관리되게 됩니다. 이를 통해 각각의 요청과 엔티티의 생명주기를 독립적으로 관리할 수 있습니다.

싱글톤으로 등록된 EntityManager가 영속성 컨텍스트가 공유되지 않는 이유는 스프링 프레임워크의 트랜잭션 매니저와의 연동이 해당 EntityManager의 영속성 컨텍스트를 적절히 관리하기 때문입니다. 트랜잭션의 시작과 종료에 따라 EntityManager의 영속성 컨텍스트가 생성과 소멸을 반복하게 되며, 이를 통해 각각의 요청마다 독립된 영속성 컨텍스트를 유지할 수 있게 됩니다.

요청마다 EntityManager가 생성되는 이유는, 스프링 프레임워크가 해당 EntityManager를 요청 단위로 관리하기 위해 새로운 EntityManager를 생성하는 것입니다. 이를 통해 엔티티매니저의 생명주기와 요청의 생명주기를 동일하게 관리할 수 있고, 요청이 처리되는 동안에만 영속성 컨텍스트가 유지되도록 구현됩니다.

더 자세한 내용은 스프링 프레임워크의 트랜잭션 매니저와 영속성 컨텍스트의 동작 원리를 참고하시면 좋을 것 같아요. 추가적인 질문이 있으면 언제든지 물어보세요! 즐거운 개발하세요! :)

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

0

22

2

inheritance startegy 선택시 고려사항

0

21

1

Entity 동등성 비교

0

18

1

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

0

44

1

H2데이터베이스 파일 생성

0

56

2

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

0

52

2

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

0

51

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

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

0

92

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

92

2

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

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

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

0

80

1

영속성 컨텍스트

0

65

1

JPA 프록시

0

94

1

Native Query와 MyBatis

0

68

1

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

0

85

1

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

0

114

3

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

0

94

3

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

0

108

2

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

0

143

1