gony-dev 님의 블로그

[JPA] 자바 ORM 표준 JPA 프로그래밍 - 영속성 관리 본문

Spring/JPA

[JPA] 자바 ORM 표준 JPA 프로그래밍 - 영속성 관리

minarinamu 2024. 8. 8. 15:34

JPA에서 가장 중요한 것 2가지는
객체와 관계형 데이터베이스 매핑(=ORM)
  영속성 컨텍스트
이다!

영속성 컨텍스트


영속성 컨텍스트란 "엔티티를 영구 저장하는 환경이다"
ex. EntityManager.persist(entity);

 

1. 엔티티 매니저와 영속성 컨텍스트

  • 영속성 컨텍스트는 사실 논리적인 개념이며, 물리적 개념인 EntityManager를 통해 영속성 컨텍스트에 접근한다.

2. J2SE 환경

  • Java SE로 가장 보편적으로 쓰이는 자바 API 집합체라고한다.
  • 이를 통해 EntityManager와 PersistenceContext를 1대1로 매핑할 수 있다.

3. 엔티티의 생명주기

- 생명주기는 비영속과 영속, 준영속, 삭제로 나뉜다.

  • 비영속은 영속성 컨텍스트와 전혀 상관없는 관계 상태를 말한다. 즉 객체를 생성한 상태를 의미한다.
  • 영속은 영속성 컨텍스트에 의해 관리되는 상태를 말한다. 즉 객체를 저장한 상태를 의미한다.
  • 준영속은 영속성 컨텍스트에 저장되었다가 분리된 상태를 의미한다. 그래서 '준'이라고 써붙히는 것 같다.
  • 삭제는 말 그대로 삭제된 상태를 의미한다.

이해가 안된다면 그림으로 이해하면 쉬울 것이다!

 

※ 다음과 같은 상태를 갖는 영속성 컨텍스트를 사용한다면 아래와 같은 이점을 얻을 수 있다.

  1. 1차 캐시 사용
  2. 동일성 보장
  3. 트랜잭션을 지원하는 쓰기 지연
  4. 변경 감지 용이
  5. 지연 로딩 채택

다음 블로그는 영속성 관리 중 플러시와 준영속 상태에 대해 게시해 보겠다.