본문 바로가기
JPA

[JPA] JPA 개념 정리

by 코딩로그 2023. 1. 15.

 

JPA란?

JPA는 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행한다.

JPA는 표준 인터페이스입니다. 구현체 중에는 Hibernate, EclipseLink, DataNucelus가 있습니다. 그중에 가장 보편적으로 사용되는 게 Hibernate입니다. 

 

 

 

 

JPA를 왜 사용할까??

 1. 유지보수 향상

기존에는 컬럼을 추가해야 하는 경우 쿼리도 수정하고, 자바 클래스도 이에 맞게 필드를 추가했습니다. 

JPA를 사용하면 필드만 추가하면 SQL은 JPA가 처리해 주기 때문에 유지보수 측면에서 좋습니다.

 

=> 그렇다면 JPA는 어떻게 값이 변경된 것을 알 수 있을까??

1차 캐시를 사용하기 때문이다. 

 

 

2. 패러다임의 불일치 해결

객체는 상속, 추상화, 다형성의 특징을 가지고 있습니다. 반면에 관계형 데이터베이스는 데이터 중심으로 이루어져 있다 보니 관계형 데이터베이스에 객체를 저장하려면 서로 지향하는 목적이 다르기 때문에 불일치가 발생합니다.

JPA는 이러한 문제를 해결해줄 수 있습니다.

 

 

 

 

JPA는 어떻게 동작할까?

JPA는 매 요청시마다 EntityManagerFactory를 통해 EntityManager를 생성하고 내부적인 커넥션 풀을 통해 DB에 접근합니다. 트랜잭션 관리는 EntityTransaction으로 관리하게 됩니다.

스프링과 연동할때는 대부분 스프링이 처리해 주기 때문에 매핑 설정 중심으로 구현하면 될 것 같습니다.

 

 

이에 대해 정리해보면 다음과 같습니다.

 

1. JPA는 하나의 Persistence로부터 시작된다.

2. Persistence에서 설장한 정보를 토대로 EntityManagerFactory를 생성한다. 이때, EntityManagerFactory는 한 번만 생성되고, 마지막에 종료합니다.

3. EntityManagerFactory를 사용하여 EntityManager를 생성합니다. JPA는 Transaction 단위로 수행하기 때문에 하나의 Transaction을 수행할 때마다 하나의 EntityManager를 필요로 합니다.

4. EntityManager는 Transaction을 기반으로 생성된 SQL을 데이터베이스에 전달하는 역할을 수행합니다.

 

 

https://javabydeveloper.com/wp-content/uploads/2019/12/Jpa-architecture-768x403.png?ezimgfmt=ngcb330/notWebP

 

 

 

 

회원을 등록하는 코드 구현은 다음과 같이 구현됩니다.

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();//트랜잭션 얻어옴
        tx.begin();

        try {
            //회원 등록
            //객체를 생성한 상태(비영속)
            Member member = new Member();
            member.setId(101L);
            member.setName("HelloApple");

            //트랜잭션 커밋(이때 쿼리가 날라감)
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }
        emf.close();


    }
}

 

 

 

 

JPA를 공부하며 알아야 할 개념 설명

1. Entity 

RDBMS에서 테이블을 객체화시킨 것으로 볼 수 있다. 즉, Entity는 데이터베이스의 테이블에 대응하는 클래스이다.

특히, JPA에서 쿼리를 직접 작성할 필요가 없어졌는데, 이를 가능하게 하는 것이 Entity이다.

 

2. EntityManager

EntityManager는 엔티티를 관리하는 객체입니다. EntityManager를 통해 데이터베이스에 접근해서 CRUD 작업을 수행합니다.

 

 

 

다음 그림과 같이 Entity는 테이블에 대응되는 것을 알 수 있습니다.

https://javabydeveloper.com/wp-content/uploads/2016/02/jpa-entity.png?ezimgfmt=ng:webp/ngcb330

 

 

 

 

 

Spring Data JPA 

JPA를 더 쉽게 사용하기 위한 모듈입니다. 위에서 설명드린 동작방식처럼 Hibernate의 EntityManager를 직접 다루지 않고 JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 이루어집니다.

 

 

 

 

 

 

 

 

참고 

https://javabydeveloper.com/basic-terminology-to-know-before-coding/

'JPA' 카테고리의 다른 글

[JPA] Entity 개발 시 참고 사항  (0) 2023.02.27