JPA(Java Persistent API) 란?
자바 어플리케이션에서 관계형 데이터베이스를 사용할 수 있도록 정의된 ORM(Object Relational Mapping) 기술에 대한 표준 명세이다.
JPA는 특정 라이브러리가 아닌 ORM을 위한 인터페이스 모음으로, 자체 구현체는 없다. 대부분의 JPA API는 javax.persistence 패키지에 정의된 인터페이스, 열거형(enum), 예외, 애노테이션 등으로 구성되어 있다.
package javax.persistence;
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// 기타 메서드...
}
JPA를 사용하려면 Hibernate, EclipseLink, DataNucleus 등의 ORM 프레임워크가 필요하다.
Hibernate는 가장 널리 사용되는 JPA 구현체로, 다양한 기능을 제공한다.
Hibernate
JPA의 대표적인 구현체 중 하나. SQL을 직접 작성하지 않고 직관적인 메소드를 사용하여 데이터를 조작할 수 있다. 내부적으로는 JDBC API를 사용한다.
PA와 Hibernate의 관계 : JPA는 인터페이스, Hibernate는 그 구현체 PA의 EntityManagerFactory, EntityManager, EntityTransaction은 Hibernate의 SessionFactory, Session, Transaction으로 구현됨
장점
- 생산성 : SQL을 직접 작성할 필요 없이 메소드 호출로 쿼리 수행
- 유지보수 : 테이블 컬럼 변경 시 JPA가 이를 관리
- 객체지향적 개발 : 데이터 관리가 객체지향적으로 가능하여 비즈니스 로직에 집중
- 벤더 독립성 : 다양한 DB 벤더 지원, DB 변경 용이
단점
- 학습 난이도 : 많은 내용을 이해해야 함
- 성능 : 내부적으로 많은 동작이 있어 직접 SQL보다 성능이 떨어질 수 있음
- 세밀함 부족 : 메서드 호출로 SQL을 실행하므로 세밀함이 떨어짐, 복잡한 쿼리 작성 어려움
Spring Data JPA
Spring Data JPA는 Spring에서 JPA를 더 쉽고 편리하게 사용할 수 있도록 제공하는 모듈
기능
- EntityManager를 직접 주입받지 않고, JPA를 한 단계 더 추상화한 Repository 인터페이스 제공
- Repository 인터페이스에 규칙에 맞는 메소드를 정의하면 Spring이 해당 메소드에 적합한 쿼리를 자동으로 생성
Hibernate와 Spring Data JPA의 차이점
- Hibernate는 JPA 구현체, Spring Data JPA는 JPA에 대한 데이터 접근을 추상화
- Spring Data JPA는 GenericDao라는 커스텀 구현체 제공, 메소드 명칭으로 JPA 쿼리 생성 가능
- Hibernate, EclipseLink 등의 JPA 구현체를 사용할 수 있으며, @Transaction 애노테이션을 통해 트랜잭션 영역 관리
- Spring Data JPA는 항상 Hibernate와 같은 JPA 구현체가 필요함
참고 출처
https://victorydntmd.tistory.com/195
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
'공부' 카테고리의 다른 글
PUT과 PATCH의 정의 및 차이점 (0) | 2024.06.12 |
---|---|
프록시(Proxy) (0) | 2024.06.07 |
REST / RESTful API 란? (0) | 2024.06.03 |
[Spring] Service와 ServiceImpl 구조 (0) | 2024.05.31 |
[Spring] Request/Response (0) | 2024.05.16 |