본문 바로가기

JPA

JPA로 CRUD해보기(2) 틀 코드 작성하기

JPA의 동작방식 알아보기

1. Persistence라는 클래스로부터 시작된다.

2. Persistence 클래스는 먼저 META-INF/persistence.xml에서 설정을 읽어온다.

3. 읽어온 설정을 통해 EntityManagerFactory라는 클래스를 만들어준다.

4. 우리는 EntityManagerFactory에서 필요할 때마다 EntityManager를 찍어내서 코드를 실행하면 된다.

 

이것만 읽고는 이해하기 힘들 것이다!!! 실습하면서 이해해보자!!!!!

hellojpa 패키지 안에 JpaMain 클래스를 다음과 같이 만들어주면 틀 코드 완성이다~~~

package hellojpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        //애플리케이션 로딩 시점에 DB당 딱 하나만 만들어야 하며, 애플리케이션 전체에서 공유한다.
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        //트랜잭션마다 EntityManager를 만들어줘야 한다.
        EntityManager em = emf.createEntityManager(); // 고객요청 시마다 생성(쓰레드 간에 공유 X)

        EntityTransaction tx = em.getTransaction();
        tx.begin(); //트랜잭션 시작

        try {
            // CRUD 로직
            tx.commit(); // 커밋(트랜잭션 끝)
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close(); //사용 후 반드시 닫아줘야 한다
        }
        emf.close(); //애플리케이션이 끝나면 EntityManagerFactory를 닫아줘야 한다.
    }
}

 

코드를 보면 크게 4부분으로 나뉜다.

1. EntityManagerFactory 객체를 Persistence로부터 얻어온다.

EntityManagerFactory 객체는 애플리케이션 로딩 시점에 DB당 하나씩만 만들어야 하고,
애플리케이션 전체에서 공유해야 한다.
이 객체로부터 EntityManager를 받아와서 사용할 수 있다.

createEntityManagerFactory의 매개변수로 hello를 넣어줬는데,

여기에는 기존에 persistence.xml에서 설정한 persistence-unit의 name을 넣어주면
해당 설정으로 EntityManagerFactory 객체를 만들어준다.

 

2. EntityManager 객체를 EntityManagerFactory로부터 얻어온다.

EntityManager는 각 Transaction마다 생성돼야 한다. Transaction은 DB의 작업단위를 뜻하는데,
JPA에서도 DB와 같은 메커니즘으로 Transaction이 돌아간다. 이건 모르면 한 번 찾아보자!!!

 

3. EntityManager로부터 Transaction을 얻어오고 Transaction 안에서 CRUD 작업을 수행한다.

이 Transaction 안에서 CRUD 로직을 작성하면 된다. tx.begin()은 Transaction을 시작한다는 의미이고,
그 아래에 try-catch문이 있다. try문 안쪽의 CRUD로직을 수행하면서 에러가 발생하지 않는다면 commit을
에러가 발생한다면 rollback을 하게 된다.(transaction 공부하면서 커밋, 롤백 정도는 당연히 봐야제~~~)

 

4.  EntityManager와 EntityManagerFactory를 닫아준다.

이렇게 작업이 끝나면 붙들고 있던 자원을 놓아줘야 한다.
EntityManager의 경우 각 트랜잭션이 끝날 때마다 할당을 해제해주면 되고,

EntityManagerFactory의 경우 어플리케이션이 끝날 때 마지막에 할당을 해제해주면 된다.

 

참고강의: 배달의 민족 개발팀장 김영한 강사님의 JPA 강의

'JPA' 카테고리의 다른 글

JPA로 CRUD해보기(4) JPQL  (0) 2021.02.09
JPA로 CRUD해보기(3) Entity와 CRUD 코드 작성해보기  (0) 2021.02.08
JPA로 CRUD해보기(1) DB 구축하기  (0) 2021.02.08
JPA로 CRUD해보기(0) 프로젝트 생성  (0) 2021.02.08
JPA란?  (0) 2021.02.07