JPA(1) - Hibernate, JPA, Spring Data JPA

SW고구마·2021년 11월 5일
0
post-custom-banner

JPA를 접하게 되면서 어느 곳에서는 EntityManager를 활용해 CRUD를 생성하고, 다른 곳에서는 JpaRepository 인터페이스를 활용해 제공되는 CRUD를 활용해 프로젝트를 진행한다.
JPA를 다루면서 Hibernate, JPA, Spring Data JPA 의 용어가 있는데 어떻게 다른지 알아보고자 글을 작성하게 됐다

JPA ?

JPA 란 "Java Persistence API"의 약자이며 자바에서 관계형 데이터베이스를 사용하는 방식에 대해 정의해놓은 단순한 "인터페이스" 이다.
따라서 JPA는 어떤 특정 기능을 하는 라이브러리가 아닌 자바 어플리케이션이 관계형 데이터베이스를 어떻게 사용하는 지에 대해 정의만 해놓은 것이다.

JPA는 단순한 인터페이스로 명세만 할 뿐 실제 구현체가 없다. 실제 java.persistence 의 내용들을 보면 각종 enum, Annotation 들로 구성이 되어있고 EntityManager 또한 인터페이스로 기술되어 있다

Hibernate ?

Hibernate는 위에서 언급한 JPA를 구현해놓은 실제 구현체이다.
한마디로 JPA라는 Interface를 바탕으로 class로 실제 구현한 것이 Hibernate라는 라이브러리이다. 따라서 Hibernate를 사용한다는 것은 JPA의 실제적인 동작이 Hibernate 라이브러리를 통해 수행된다는 의미이다.

아래 그림은 JPA의 인터페이스를 Hibernate 에서 어떻게 상속받아 구현하고 있는 지를 보여주는 그림이다.

따라서 JPA를 사용하기 위해 반드시 Hibernate를 활용하지 않아도 된다는 뜻이 된다.(아파치에서 제공하는 OpenJPA 같은 것도 있음)

Spring Data JPA ?

JPA를 활용한 많은 프로젝트 예시를 보면 Repository인터페이스를 상속해 CRUD를 구현하고 있는 것을 볼 수 있다.
Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 JPA를 더 쉽게 사용할 수 있도록 해주는 것이다.
Repository의 인터페이스에서 정해놓은 규칙대로 메소드를 입력하면 Spring이 알아서 메소드의 이름을 바탕으로 알맞는 쿼리를 만들어 날리는 구현체를 완성해 Bean으로 등록해준다
필자가 사용하는 starter-jpa에는 기본적으로 의존성으로 hibernate가 붙어 있어 Spring Data Jpa를 활용할 때 hibernate의 구현체로 동작하게 되어있다.


출처 및 참고
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
jboss hibernate docs

profile
하루하루 조금씩이라도
post-custom-banner

0개의 댓글