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 구동 방식

  1. persistence.xml 읽기:
    • JPA는 애플리케이션 시작 시 META-INF/persistence.xml을 읽어 설정 정보를 로드합니다.
  2. Persistence.createEntityManagerFactory() 호출:
    • Persistence 클래스는 persistence.xml 파일의 설정을 기반으로 EntityManagerFactory를 생성합니다.
  3. EntityManagerFactory 생성:
    • 데이터베이스 연결 정보 및 ORM 매핑 정보를 초기화합니다.
  4. EntityManager 생성:
    • EntityManagerFactory는 트랜잭션 단위로 사용할 EntityManager를 생성합니다.

3. JPA 실행 흐름

  1. Persistence.createEntityManagerFactory() 호출:JPA 표준 클래스인 Persistence가 persistence.xml을 읽어 설정을 로드합니다.
  2. EntityManagerFactory 초기화:데이터베이스 연결 정보와 Hibernate Dialect를 기반으로 초기화됩니다.
  3. EntityManager 생성:EntityManager는 각 트랜잭션마다 생성되며 영속성 컨텍스트를 관리합니다.
  4. 데이터베이스 작업 수행:EntityManager를 통해 데이터베이스 작업(CRUD)을 수행합니다.
  5. 리소스 정리: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를 생성하는 역할.
  • EntityManagerFactory 클래스:
    • 데이터베이스 연결 정보를 기반으로 초기화.
    • EntityManager를 생성하는 팩토리 역할.
  • EntityManager 클래스:
    • 데이터베이스와 상호작용하며, 영속성 컨텍스트를 관리.
  • EntityTransaction 클래스:
    • 트랜잭션을 관리하며, 시작(begin), 커밋(commit), 롤백(rollback) 작업을 처리.

6. 결론

JPA는 Persistence → EntityManagerFactory → EntityManager의 계층적 구조를 통해 데이터베이스와 상호작용합니다. 이러한 계층적 구조 덕분에 데이터베이스 독립성과 확장성을 제공합니다.

댓글수0