1. 영속성 컨텍스트란?
영속성 컨텍스트는 JPA의 핵심 기능 중 하나로, 엔티티 인스턴스를 영구적으로 저장하고 관리하는 환경이다.
2. 엔티티 매니저
엔티티 매니저는 JPA에서 제공하는 API로, 이를 통해 영속성 컨텍스트에 접근하고 엔티티에 대한 CRUD 연산을 할 수 있다.
3. 엔티티의 생명주기
엔티티는 크게 4단계의 생명주기를 가진다.
비영속(new / transient)
- 영속성 컨텍스트와 전혀 관계없는 새로운 상태
영속 (managed)
- 영속성 컨텍스트에 관리되는 상태
준영속 (detached)
- 영속성 컨텍스트에 저장되었다가 분리된 상태
삭제 (deleted)
4. 영속성 컨텍스트의 이점
영속성 컨텍스트에는 다음과 같은 이점이 있다.
- 1차 캐시
- 영속성 컨텍스트 내부에는 엔티티를 저장하기 위한 메모리 공간인 1차 캐시가 존재한다.
- 엔티티 매니저를 통해 엔티티를 조회하면, 먼저 1차 캐시에서 해당 엔티티를 찾아본다. 1차 캐시에 존재한다면 데이터베이스에 접근하지 않고 캐시된 값을 반환한다. 이로 인해 성능이 향상된다.
- 동일성 보장
- 같은 트랜잭션 안에서 같은 엔티티를 조회하면 항상 동일한 인스턴스를 반환한다.
- 이러한 동일성은 객체 지향 프로그래밍의 중요한 특징을 지원한다. 데이터베이스의 같은 레코드를 기반으로 생성된 엔티티가 메모리에서도 동일한 것을 보장하기 때문에 데이터의 일관성을 유지할 수 있다.
- 트랜잭션을 지원하는 쓰기 지연
- 영속성 컨텍스트는 트랜잭션 내에서의 변경사항을 모아두고, 트랜잭션 커밋 시점에 한꺼번에 데이터베이스에 반영한다.
- 이렇게 변경사항을 한 번에 데이터베이스에 반영하면 네트워크 사용량이 줄어들고, 데이터베이스 액세스 횟수도 감소하여 성능이 향상된다.
- 또한, 중간에 오류가 발생하면 트랜잭션 롤백을 통해 이전 상태로 쉽게 되돌릴 수 있다.
- 지연로딩
- 연관된 엔티티나 컬렉션을 실제로 사용하는 시점에 데이터베이스에서 로딩하는 기능이다.
- 초기 로딩 시 필요하지 않은 데이터를 로딩하지 않기 때문에 성능을 최적화할 수 있다.
- 애플리케이션의 반응 시간을 향상시킬 수 있으며, 불필요한 데이터베이스 접근을 줄일 수 있다.
'Java > JPA' 카테고리의 다른 글
JPA - 상속관계 매핑, @MappedSuperclass (0) | 2023.10.04 |
---|---|
JPA - 연관관계 (0) | 2023.10.01 |
JPA - 기본 키 매핑 : @GeneratedValue (0) | 2023.09.23 |
JPA - 플러시, 준영속 상태 (0) | 2023.09.20 |
JPA - 영속성컨텍스트(2) (0) | 2023.09.20 |