Spring/JPA
영속성 컨텍스트란?
blockbuddy93
2023. 12. 3. 17:35
영속성 컨텍스트란?
- 인스턴스에 존재하는 엔티티를 관리하고 영속화 시키는 논리적인 영역
- 영속성 컨텍스트에서 엔티티를 관리하고 필요에 따라 DB 데이터를 CRUD 할 수 있는데 이러한 작업을 담당하는 객체를 엔티티 매니저라고 함
엔티티 생명 주기
- 비영속(New) : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(Managed) : 영속성 컨텍스트에 저장되어 관리되고 있는 상태
- 준영속(Detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(Removed) : 영속성 컨텍스트와 DB에서 삭제된 상태.
영속성 컨텍스트의 특징
- 영속성 컨텍스트는 식별자 값이 반드시 있어야한다.
- JPA는 보통 트랜잭션을 커밋하는 순간에 영속성 컨텍스트에서 새로 저장된 엔티티를 데이터 베이스에 저장하는데 이를 플러시라고함.
- 영속성 컨텍스트의 주요 기능을 활용하여 데이터베이스와 통신횟수를 줄이고 애플리케이션 성능을 향상시킴
영속성 컨텍스트 주요 기능
- 1차 캐시: 영속성 컨텍스트 내부에는 데이터베이스에서 검색한 엔티티를 저장하는 캐시인 1차 캐시 존재.
- 동일성 보장: 영속성 컨텍스트에서 조회한 동일한 엔티티 객체는 항상 동일한 자바 객체로 반환되어 동일성이 보장
- 쓰기 지연: 트랜잭션 커밋 시 쓰기 작업을 지연시키는 메커니즘으로, 모아둔 쿼리를 한꺼번에 일괄 처리하여 DB 연결 횟수를 줄임
- 변경 감지: 엔티티의 변경 사항을 자동으로 감지하여 트랜잭션 커밋 시에 수정 쿼리를 생성하고 적용.
- 지연 로딩: 엔티티가 실제로 사용될 때까지 연관된 엔티티를 로드하지 않고, 실제로 필요한 시점에 엔티티를 로딩.
참고
- 자바 ORM 표준 JPA 프로그래밍
- https://siyoon210.tistory.com/138
- https://lordofkangs.tistory.com/347