본문 바로가기

JPA

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

엔티티 매니저란? (Entity Manager)

데이터 베이스에 접근하기 위해 사용되는 객체 ➡️ 엔티티 매니저를 통해 DB 조회 / 등록 / 수정 / 삭제 작업 수행

엔티티 매니저 종류

  1. 애플리케이션에서 관리하는 엔티티 매니저
    • 애플리케이션을 시작하면서 EntityManagerFactory를 초기화
    • 필요할 때, Entity Manager 생성 후 사용
    • 사용이 끝난 Entity Manager는 close()
      • 사용이 끝난 EM은 바로바로 **close 해주지 않으면 자원 누수 발생** 가능
  2. 컨테이너(JEE)에서 관리하는 엔티티 매니저
    • 컨테이너가 제공하는 EntityManager를 사용(@PersistenceContext)

영속성 컨텍스트(Persistence Context)

  • 일종의 캐시 저장소
  • 엔티티 타입, 식별자 (Key) ↔️ 객체(Value)
  • Entity Manager가 Commit 시점에 영속성 컨텍스트(Persistence Context)에서 관리하고 있던 영속 객체의 변경 내역을 추척해 DB에 반영
    flowchart LR
      subgraph pc[Persistence Context]
        a("영속 객체들")
      end;
    subgraph db[DataBase]
        b("레코드들 ")
      end;
      pc --> em["Entity Manager"] --> db
  • 영속 객체 : 영속성 컨텍스트에 들어있는 Entity 객체
  • 엔티티 매니저를 생성할 때, 생성한 엔티티 매니저에 대한 하나의 영속성 컨텍스트가 생성됨
  • 동일한 엔티티를 2번 조회할 경우,
    1. 첫 번째 조회 시, 조회 쿼리 실행 ➡️ 영속성 컨텍스트에 엔티티가 담김(영속 객체)
    2. 두 번째 조회 시, 조회 쿼리 실행 ❌ (영속성 컨텍스트에서 꺼내옴)

'JPA' 카테고리의 다른 글

JPA - 연관관계 주인(feat. mappedBy)  (0) 2023.05.19
영속성 컨텍스트!  (2) 2023.05.11
자바의 트랜잭션  (0) 2023.05.09
1. JPA의 등장  (0) 2023.04.26
[JPA] N+1문제  (0) 2023.04.18