[JPA] 영속성 컨텍스트

kyungjoon·2022년 2월 24일
0
  • 영속성 컨텍스트란?
  • 엔티티 매니저
  • 엔티티 생명주기
  • 영속성 컨텍스트의 이점

영속성 컨텍스트란?

엔티티를 영구 저장하는 환경

  • 논리적인 개념
  • 어플리케이션과 DB 중간에 위치하여 둘 간의 연결을 조율한다

엔티티 매니저 (Entity Manager)

영속성 컨텍스트를 관리하는 클래스

  • 하나의 요청에 하나의 EntityManager를 생성하여 사용
  • 여러 스레드에서 동시에 접속하면 동시성 문제가 발생
  • 하나의 EntityManagerFactory 에서 여러 EntityManager 생성
  • EntityManagerFactory 생성 비용이 크기 때문에
    하나의 DB에 하나의 EntityManagerFactory 사용하도록 관리 필요

엔티티 생명주기

  • 영속

    엔티티가 영속성 컨텍스트에 관리되는 상태

  • 비영속

    엔티티가 영속성 컨텍스트와 관계없는 상태 (새로이 생성된 엔티티)

  • 준영속

    영속성 컨텍스트에 속했다가 분리된 상태

  • 삭제

    영속성 컨텍스트 및 실제 DB에서 삭제

// 엔티티 매니저 생성
EntityManager em = entityManagerFactory.createEntityManager();

// 엔티티 생성. 비영속 상태
Member member = new Member("박경준"); 
// 영속 상태
em.persist(member); 
// 준영속 상태
em.detach(member);
// 삭제 상태
em.remove(member);

영속성 컨텍스트의 이점

  • 1차 캐시

    영속성 컨텍스트에 관리되는 엔티티를 조회할 때 새로 쿼리를 만들지 않고 캐시에서 조회함

  • 동일성 보장

  • 트랜잭션을 지원하는 쓰기 지연

    트랜잭션 단위로 쿼리문을 모아서 한번에 전송.
    네트워크 연결을 최소화할 수 있음

  • 변경 감지

    엔티티 값의 변경을 추적하고, 자동으로 update 쿼리를 생성함

  • 지연 로딩

profile
하룻강아지

0개의 댓글