본문 바로가기
Spring/JPA

JPA 동작원리

by YoonJong 2022. 9. 20.
728x90

JPA ( Java Persistence API ) 

 - 자바 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준

 - 스프링에서 제공하는 것이 아닌, JAVA 에서 제공하는 API

 - 라이브러리가 아닌, 인터페이스


구동방식

- 설정 정보를 조회 및 기준으로 하여 EntityManagerFactory를 생성한다.

EntityManager는 하나만 생성하여 공유한다.

 

- EntityManagerFactory 를 통해 EntityManager 가 생성된다

 EntityManager는 쓰레드간 절대 공유하지 않는다. 사용하고 폐기한다.

 

- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다.

 조회를 제외한 등록, 수정, 삭제 모두


META-INF/persistence.xml 예제 

 -persistence-unit name 을 확인한다.

<?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="hello">
        <properties>
            <!-- 필수 속성 -->
           ... 생략 / DB 설정

            <!-- 옵션 -->
            ... 생략 / 콘솔 SQL 나타내는 설정
        </properties>
    </persistence-unit>
</persistence>

 

생성 및 사용 예제

 - 트랜잭션을 시작해주어야 한다.

 - 로직이 끝나면 닫아주어야 한다

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 팩토리 생성

        EntityManager em = emf.createEntityManager(); // manager 생성
        EntityTransaction tx = em.getTransaction(); // 트랜잭션 생성
        tx.begin(); // 트랜잭션 시작

        try {
            ...
            tx.commit(); // DB 에 저장
        } catch (Exception e) {
            tx.rollback(); // 예외 발생 시 롤백 진행
        } finally {
            em.close(); // manager close
        }
        emf.close(); // factory close
    }
}

 


동작과정

 

전체적인 JPA 동작과정

그림을 통해 어떤 순서로 동작하는지 확인

 

1. 개발자가 JAVA 애플리케이션에서 JPA를 사용

2. JPA 내부에서 JDBC API를 사용

3. SQL을 호출해서 DB와 통신


JPA insert 관련 동작과정

1. MemberDAO에서 객체를 저장하고 싶을 때 persist(영속하다) 라는 메서드를 호출해 저장한다.

2. Member 엔티티를 분석한다.

3. Insert SQL 을 JPA가 생성한다.

4. JDBC API를 사용해서 DB에 SQL 문을 날린다.


JPA find 관련 동작과정

1. Member 의 PK 값을 JPA에게 전달한다.

2. 엔티티 매핑정보를 적절한 SELECT SQL을 생성해서 DB 에 날린다.

3. DB 로 부터 결과를 받아온다


 

Hibernate은 JPA 인터페이스를 구현한 ORM 프레임워크이다.

 

 

참고

- 인프런 자바 ORM 표준 JPA 프로그래밍 - 기본편

 

https://velog.io/@adam2/JPA%EB%8A%94-%EB%8F%84%EB%8D%B0%EC%B2%B4-%EB%AD%98%EA%B9%8C-orm-%EC%98%81%EC%86%8D%EC%84%B1-hibernate-spring-data-jpa

 

JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)

JPA는 도대체 무엇일까요? orm, jdbc, 영속성, hibernate, ... 관련 지식까지 모두 파해쳐봅니다.

velog.io

https://taesan94.tistory.com/207

 

JPA구동 방식

참조 인프런 - 김영한 강사님 강의 [강추] JPA 구동 방식 설정정보를 기준으로 EntityManagerFactory를 생성한다. EntityManagerFactory는 하나만 생성하여 애플리케이션 전체에서 공유한다. EntityManagerFactor..

taesan94.tistory.com

 

728x90

댓글