-
[JPA] 영속성 컨텍스트 기본 개념Backend/Springboot 2022. 9. 16. 16:45
1. 영속성 컨텍스트 정의
일종의 메모리 저장소이며 엔티티 타입과 식별자를 키로 사용하는 객체의 집합을 의미
엔티티 매니저(EM)는 커밋 시점에 영속성 컨텍스트에서 관리하고 있던 영속 객체의 변경 내역을 추적하여 DB에 반영
2. 엔티티 매니저와 영속성 컨텍스트
엔티티 매니저를 생성할 때 하나의 영속성 컨텍스트가 생성
엔티티 매니저는 동일한 식별자를 갖는 엔티티를 2번 조회하게 되면
- 첫 번째는 쿼리가 실행됨
- 두 번째는 쿼리가 실행되지 않고 캐시에 저장되어있는 영속 객체를 영속성 컨텍스트에서 가져옴
3. 엔티티 매니저
DB에 엑세스 하기 위해 사용되는 객체
엔티티 매니저를 통해 DB에 데이터를 CRUD 작업을 수행
3-1. 엔티티 매니저 종류
- 애플리케이션에서 관리하는 엔티티 매니저
애플리케이션에서 직접 생성하고 종료하는 엔티티 매니저
-> 애플리케이션을 시작하면서 EMF를 초기화하고 필요한 상황에서 EM을 생성하여 사용
EM의 사용을 마치면 close하여 마침
애플리케이션 코드에서 EM을 관리하기 때문에 자원 누수에 대한 문제가 발생할 수 있음
가령, close를 안해주게되면 메모리에 계속해서 축적되기때문에 자원 누수 발생
- 컨테이너에서 관리하는 엔티티 매니저
JEE(Java Enterprise Edituin) 컨테이너에서 관리하는 엔티티 매니저
컨테이너에서 관리하는 EM은 JEE 컨테이너에서 EMF와 EM의 라이프 사이클을 관리
애플리케이션 코드에서는 컨테이너가 제공하는 EM을 사용하면 됨
이 경우 @persistenceContext를 사용하여 구현
참고 : https://www.youtube.com/watch?v=XlL0eq9Phws
'Backend > Springboot' 카테고리의 다른 글
intelij로 jar 앱으로 따로 배포하기 (0) 2022.10.26 logback There is no conversion class registered for composite conversion word [clr] error (0) 2022.10.25 Logback을 통한 Log 관리하기 (0) 2022.10.25 JPA Repository 호출 시 NullPointerException, Cannot invoke "repository.메소드명()" because "this.repository" is null 해결 방법 (0) 2022.10.04 [JPA] NativeQuery를 POJO로 mapping하기 (2) 2022.09.16