스프링/개념

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

문상휘파람 2024. 9. 10. 14:06

엔티티 매니저란?

  • 엔티티를 저장, 수정, 조회, 삭제하는 등 엔티티와 관련된 모든 일을 처리합니다.
  • 말 그대로 엔티티를 관리하는 관리자 입니다.
  • 영속성 컨텍스트 사용(엔티티를 영구 저장하는 환경 이라는 뜻.) => 영속성 컨텍스트에 엔티티를 저장하거나 조회하고 보관합니다.

 

엔티티 매니저 팩토리와 엔티티 매니저

  • 데이터베이스 사용하는 애플리케이션은 일반적으로 하나의 엔티티 매니저 팩토리 생성. => 필요할 때마다 엔티티 매니저 펙토리에서 엔티티 매니저 생성
    • 중요 엔티티 매니저 팩토리는 여러 스레드가 동시에 공유해도 안전 BUT 엔티티 매니저는 여러 스레드 동시 접근 시 동시성 문제 발생

엔티티의 생명주기

  1. 비영속 : 영속성 컨텍스트와 관계가 없는 상태
  2. 영속 : 영속성 컨텍스트에 저장된 상태 -> 엔티티가 영속성 컨텍스트에 의해 관리됩니다.
  3. 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 -> 이에 해당하는 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없습니다.
  4. 삭제 : 삭제된 상태

영속성 컨텍스트의 특징

  1. 영속성 컨텍스트와 식별자 값
    • 영속상태는 식별자가 반드시 있어야 함.(엔티티를 식별자로 구별 -> 없으면 예외 발생)
  2. 플러시를 통해 영속성 컨텍스트 안에 있는 엔티티를 데베에 저장
  3. 장점
    • 1차 캐시 지원
    • 동일성 보장
    • 트랜잭션을 지원하는 쓰기 지연
    • 변경 감지
    • 지연 로딩

 


JPA가 동작할 때, 엔티티 매니저가 어떤 식으로 동작하는지에 대한 흐름에 관한 글을 포스팅 해봤습니다. 1차 캐시나 트랜잭션에 관한 자세한 글은 추후에 포스팅 해보겠습니다!!