들어가며
지금까지 ORM 사용시 JPA, Hibernate, Spring Data JPA, QueryDsl 등 여러가지를 접했지만 JPA 진영의 각각의 관계가 정리가 잘 되지 않아 포스팅하고자한다. 구글링해보니 운좋게도 이미 많은분들이 나와같은 고민을 가지고 포스팅한 내용이 수두룩해 요약만 하기로 했다.
JPA
JAVA 애플리케이션에서 RDB를 표현하는 ORM 기술 종류중 하나이며, 단순히 기술 명세다.
따라서 JPA는 구현체가 아니며 JPA의 요소들로 구현체가 없는 EntityManager와 같은 인터페이스를 가지고 있다.
Hibernate
추상적인 JPA의 구현체이며 EntityManager와 같은 인터페이스를 구현한다. Hibernate 이외에 많은 구현체가 존재하지만 (EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등) Hibernate가 가장 성숙하므로 대부분이 Hibernate를 채택해서 제공한다.
JDBC
자바에서 DB를 접근하기위해 사용되는 API이며 Hibernate는 이 JDBC를 내부적으로 사용하여 JPA를 구현한다.
Spring Data JPA
Spring Data 모듈중 하나로 Hibernate같은 JPA Provider를 사용하여 JPA 더 쉽게 적용하기위해 이미 추상화된 JPA를 한단계 더 추상화 시킨것이라고 생각하면된다. (JPA Provider는 Hibernate 이외에 다른 종류도 있다.) 아래 그림은 지금까지 내용을 명확히 표현한다.
참고자료
suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
'📦 JPA' 카테고리의 다른 글
OneToOne 연관관계에서 Lazy 로딩 전략이 작동하지 않는 이슈 (1) | 2022.04.07 |
---|---|
영속성 컨텍스트(Persistence Context)와 영속성 관리 (0) | 2020.05.05 |