LUMI_dev

Entity - #2 영속성 컨텍스트 / EntityManagerFactory 본문

스파르타 코딩 클럽 | 자바 심화 과정/Spring Master (입문 주차)

Entity - #2 영속성 컨텍스트 / EntityManagerFactory

luminous_dev 2025. 2. 2. 00:49

 

Persistence (영속성, 지속성)

: 객체가 생명(객체가 유지되는 시간), 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질

 

영속성 컨텍스트 

: Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

 

개발자들은 직접 SQL 작성 안해도 JPA를 사용하여 DB에 데이터를 저장하거나 조회할 수 있으며 수정/ 삭제 또한 가능

이 과정을 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통 

 

EntityManager

  • Entity를 관리하는 관리자
  • 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 Entity Manager가 필요 
  • 개발자들은 이것을 통해 Entity를 저장/조회/수정/삭제할 수 있음 
  • EntityMangerFatory를 통해 생성하여 사용할 수 있음

 

EntityManagerFactory

  • 일반적으로 DB 하나에 하나만 생성
  • 애플리케이션이 동작하는 동안 사용됨
  • 만들기 위해 DB 정보 전달해야 함 
    • 정보 전달하기 위해서 /resources/META-INF/ 위치에 persistence.xml 파일 만들어 정보 넣기 
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="memo">
        <class>com.sparta.entity.Memo</class>
        <properties>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="root"/>
            <property name="jakarta.persistence.jdbc.password" value="{비밀번호}"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/memo"/>

            <property name="hibernate.hbm2ddl.auto" value="create" />

            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

 

위와 같이 설정해주면 아래 코드 호출 시 EntityManagerFactory 생성

EntityManagerFactory emf = Persistence.createEntityManagerFactory("memo");
EntityManager em = emf.createEntityManager();

 

EntityMangerFactory (persistence.xml 의 정보를 토대로 EntityManagerFactory를 생성)

 EntityManger(EntityManagerFactory 기반으로 EntityManager 생성)

 

이때

EntityManagerFactory emf = Persistence.createEntityManagerFactory("memo");

 

의 memo 부분에는 persistenceUnitName을 줘야 함

 

이 persistenceUnitName은 persistence.xml의 다음 부분에 있음 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="memo">

 

맨 아래 부분에 있음