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">
맨 아래 부분에 있음
'스파르타 코딩 클럽 | 자바 심화 과정 > Spring Master (입문 주차)' 카테고리의 다른 글
Entity - #3. JPA 트랜잭션 (데이터 변경 SQL을 DB에 요청 및 반영하기 위해서는 트랜잭션 필요) (1) | 2025.02.03 |
---|---|
persistence.xml에 넣은 설정 + gradle config 열기 + jpa hibernate 설정 (1) | 2025.02.02 |
Entity - #1. Entity (@Entity, @Table, @ Column, @ Id, @ GeneratedValue) (2) | 2025.02.01 |
JPA CORE - #1. DB의 ORM / JPA / 하이버네이트 (0) | 2025.01.26 |
IoC Container와 Bean (0) | 2025.01.26 |