JPA
JPA 구동방식
devJK93
2024. 12. 5. 22:28
📝 JPA 구동 방식
JPA의 구동 방식은 Persistence → EntityManagerFactory → EntityManager의 계층적 구조를 따릅니다. 주요 클래스와 구동 방식을 단계별로 설명합니다.
1. JPA의 주요 클래스 및 역할
- Persistence:
- JPA 표준에서 제공하는 유틸리티 클래스.
META-INF/persistence.xml
파일을 읽어 EntityManagerFactory를 생성하는 역할.
- EntityManagerFactory:
- EntityManager를 생성하기 위한 팩토리 클래스.
- 데이터베이스와의 연결 정보를 포함하며 애플리케이션 전반에서 공유 가능.
- EntityManager:
- 데이터베이스와의 실제 상호작용(삽입, 조회, 수정, 삭제 등)을 처리.
- 영속성 컨텍스트(Persistence Context)를 관리.
2. JPA 구동 방식
- persistence.xml 읽기:
- JPA는 애플리케이션 시작 시
META-INF/persistence.xml
을 읽어 설정 정보를 로드합니다.
- JPA는 애플리케이션 시작 시
- Persistence.createEntityManagerFactory() 호출:
- Persistence 클래스는
persistence.xml
파일의 설정을 기반으로 EntityManagerFactory를 생성합니다.
- Persistence 클래스는
- EntityManagerFactory 생성:
- 데이터베이스 연결 정보 및 ORM 매핑 정보를 초기화합니다.
- EntityManager 생성:
- EntityManagerFactory는 트랜잭션 단위로 사용할 EntityManager를 생성합니다.
3. JPA 실행 흐름
- Persistence.createEntityManagerFactory() 호출:JPA 표준 클래스인 Persistence가
persistence.xml
을 읽어 설정을 로드합니다. - EntityManagerFactory 초기화:데이터베이스 연결 정보와 Hibernate Dialect를 기반으로 초기화됩니다.
- EntityManager 생성:EntityManager는 각 트랜잭션마다 생성되며 영속성 컨텍스트를 관리합니다.
- 데이터베이스 작업 수행:EntityManager를 통해 데이터베이스 작업(CRUD)을 수행합니다.
- 리소스 정리:EntityManager와 EntityManagerFactory를 닫아 리소스를 해제합니다.
4. JPA 코드 예제
import javax.persistence.*;
@Entity
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getter, Setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
public class JpaExample {
public static void main(String[] args) {
// 1. EntityManagerFactory 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
// 2. EntityManager 생성
EntityManager em = emf.createEntityManager();
// 3. 트랜잭션 시작
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
// 4. 엔티티 저장
User user = new User();
user.setName("John Doe");
em.persist(user);
// 5. 트랜잭션 커밋
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
// 6. EntityManager 종료
em.close();
}
// 7. EntityManagerFactory 종료
emf.close();
}
}
5. 주요 클래스 요약
- Persistence 클래스:
- JPA 설정 파일(
persistence.xml
)을 읽고 EntityManagerFactory를 생성하는 역할.
- JPA 설정 파일(
- EntityManagerFactory 클래스:
- 데이터베이스 연결 정보를 기반으로 초기화.
- EntityManager를 생성하는 팩토리 역할.
- EntityManager 클래스:
- 데이터베이스와 상호작용하며, 영속성 컨텍스트를 관리.
- EntityTransaction 클래스:
- 트랜잭션을 관리하며, 시작(
begin
), 커밋(commit
), 롤백(rollback
) 작업을 처리.
- 트랜잭션을 관리하며, 시작(
6. 결론
JPA는 Persistence → EntityManagerFactory → EntityManager의 계층적 구조를 통해 데이터베이스와 상호작용합니다. 이러한 계층적 구조 덕분에 데이터베이스 독립성과 확장성을 제공합니다.