1. 영속성 컨텍스트란?

영속성 컨텍스트는 JPA의 핵심 기능 중 하나로, 엔티티 인스턴스를 영구적으로 저장하고 관리하는 환경이다.

2. 엔티티 매니저

엔티티 매니저는 JPA에서 제공하는 API로, 이를 통해 영속성 컨텍스트에 접근하고 엔티티에 대한 CRUD 연산을 할 수 있다.

3. 엔티티의 생명주기

엔티티는 크게 4단계의 생명주기를 가진다.

비영속(new / transient)

  • 영속성 컨텍스트와 전혀 관계없는 새로운 상태

영속 (managed)

  • 영속성 컨텍스트에 관리되는 상태

준영속 (detached)

  • 영속성 컨텍스트에 저장되었다가 분리된 상태

삭제 (deleted)

4. 영속성 컨텍스트의 이점

영속성 컨텍스트에는 다음과 같은 이점이 있다.

  1. 1차 캐시
    • 영속성 컨텍스트 내부에는 엔티티를 저장하기 위한 메모리 공간인 1차 캐시가 존재한다.
    • 엔티티 매니저를 통해 엔티티를 조회하면, 먼저 1차 캐시에서 해당 엔티티를 찾아본다. 1차 캐시에 존재한다면 데이터베이스에 접근하지 않고 캐시된 값을 반환한다. 이로 인해 성능이 향상된다.
  2. 동일성 보장
    • 같은 트랜잭션 안에서 같은 엔티티를 조회하면 항상 동일한 인스턴스를 반환한다.
    • 이러한 동일성은 객체 지향 프로그래밍의 중요한 특징을 지원한다. 데이터베이스의 같은 레코드를 기반으로 생성된 엔티티가 메모리에서도 동일한 것을 보장하기 때문에 데이터의 일관성을 유지할 수 있다.
  3. 트랜잭션을 지원하는 쓰기 지연
    • 영속성 컨텍스트는 트랜잭션 내에서의 변경사항을 모아두고, 트랜잭션 커밋 시점에 한꺼번에 데이터베이스에 반영한다.
    • 이렇게 변경사항을 한 번에 데이터베이스에 반영하면 네트워크 사용량이 줄어들고, 데이터베이스 액세스 횟수도 감소하여 성능이 향상된다.
    • 또한, 중간에 오류가 발생하면 트랜잭션 롤백을 통해 이전 상태로 쉽게 되돌릴 수 있다.
  4. 지연로딩
    • 연관된 엔티티나 컬렉션을 실제로 사용하는 시점에 데이터베이스에서 로딩하는 기능이다.
    • 초기 로딩 시 필요하지 않은 데이터를 로딩하지 않기 때문에 성능을 최적화할 수 있다.
    • 애플리케이션의 반응 시간을 향상시킬 수 있으며, 불필요한 데이터베이스 접근을 줄일 수 있다.

'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

+ Recent posts