Persist 영속성 컨텍스

한동훈·2023년 4월 16일
0

Spring

목록 보기
5/6
post-thumbnail

영속성 컨텍스트란?

영속성 컨텍스트란 일종의 메모리 저장소이며, 엔티티 타입과 식별자를 키로 사용하는 객체의 집합을 의미
엔티티 매니저(EntityManager)는 커밋 시점에 영속성 컨텍스트에서 관리하고 있던 영속 객체의 변경 내역을 추적하여 데이터베이스에 반영

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

엔티티 매니저를 생성할 때 하나의 영속성 컨텍스트가 생성

엔티티 매니저는 동일한 식별자를 갖는 엔티티를 2번 조회하게 되면

  • 첫 번째는 쿼리가 실행됨
  • 두 번째는 쿼리가 실행되지 않고 영속성 컨텍스트에서 가져옴

엔티티 매니저

엔티티 매니저는 데이터베이스에 엑세스하기 위해 사용되는 객체
엔티티 매니저를 통해 데이터베이스에 데이터를 조회, 등록, 수정, 삭제 작업을 수행

엔티티 매니저 종류

  1. 애플리케이션에서 관리하는 엔티티 매니저
    (1) 애플리케이션에서 직접 생성하고 종료하는 엔티티 매니저
    (2) 애플리케이션을 시작하면서 EntityManagerFactory를 초기화하고
    필요한 상황에서 EntityManager를 생성하여 사용
    (3) EntityManager의 사용을 마치면 close하여 마침
    (4) 애플리케이션 코드에서 엔티티 매니저를 관리하기 때문에 자원 누수에 대한 문제가 발생할 수 있음
  2. 컨테이너에서 관리하는 엔티티 매니저
    (1) JEE 컨테이너에서 관리하는 엔티티 매니저
    (2) 컨테이너에서 관리하는 앤티티 매니저는 JEE 컨테이너에서 EntityManagerFactory와 EntityManager의 라이프사이클을 관리
    (3) 애플리케이션 코드에서는 컨테이너가 제공하는 엔티티 매니저를 사용하면 됨
    (4) 이 경우 PersistenceContext를 사용하여 구현

정리:

즉, 영속성 컨텍스트는 엔티티 객체와 데이터베이스 사이의 매개체 역할을 하며, 엔티티 객체의 상태 변화를 추적하고, 이를 데이터베이스에 적용하는 일련의 작업을 처리합니다. 이를 통해 개발자는 객체 지향적인 방식으로 데이터베이스와 상호작용할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.

ChatGPT에 질문:

EntityManagerFactory와 BeanFactory를 서로 관계가 있나?

EntityManagerFactory와 BeanFactory는 서로 관계가 없는 것은 아니지만, 다른 역할을 가진 개념입니다.

EntityManagerFactory는 JPA를 사용할 때 영속성 컨텍스트를 생성하고 관리하는 객체입니다. EntityManagerFactory는 데이터베이스 연결 정보와 JPA 설정 정보를 사용하여 EntityManager를 생성하며, EntityManager는 영속성 컨텍스트를 제공합니다. EntityManagerFactory는 애플리케이션에서 단 하나만 존재하며, EntityManager를 생성하는데 사용됩니다.

반면, BeanFactory는 스프링 컨테이너에서 빈 객체를 생성하고 관리하는 객체입니다. 스프링 컨테이너는 빈 객체를 생성하고 필요한 시점에 빈을 주입하여 사용합니다. BeanFactory는 애플리케이션에서 여러 개 존재할 수 있으며, 빈 객체를 생성하고 관리하는데 사용됩니다.

EntityManagerFactory는 일반적으로 스프링에서 빈으로 등록되어 관리되며, 스프링 컨테이너는 EntityManagerFactory를 생성하고 관리합니다. 따라서 EntityManagerFactory는 BeanFactory의 일종이라고 할 수 있습니다.

하지만 EntityManagerFactory와 BeanFactory는 서로 다른 역할을 가지고 있으며, 상호작용하는 방식도 다릅니다. EntityManagerFactory는 영속성 컨텍스트를 생성하고 관리하는데 사용되며, BeanFactory는 스프링 빈을 생성하고 관리하는데 사용됩니다.

Container > Factory

출처: https://www.youtube.com/watch?v=XlL0eq9Phws

profile
돌덩이

0개의 댓글