준준의 기록일지

[JPA] JPA, Hibernate, Spring Data JPA 본문

스프링

[JPA] JPA, Hibernate, Spring Data JPA

junjunwon 2021. 8. 31. 17:01

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."




 

JPA는 기술 명세이다

JPA는 Java Persistence API의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.

중요한 부분은 JPA는 특정 기능을 하는 라이브러리가 아닌 인터페이스라는 점!

JPA는 단순한 명세이기 때문에 구현은 없다. JPA를 정의한 javax.persistence 패키지의 대부분은 interface ,enum, Exception, 그리고 각종 Annotation으로 이루어져 있다. 예를 들어, JPA의 핵심이 되는 EntityManager는 아래와 같이 javax.persistence.EntitiyManager라는 파일에 interface로 정의되어 있다.

 

 

Hibernate는 JPA의 구현체!

Hibernate는 JPA라는 명세의 구현체이다. 즉, 위에서 언급한 javaw.persistence.EntitiyManager와 같은 인터페이스를 직접 구현한 라이브러리이다. JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.

위 사진은 JPA와 Hibernate의 상속 및 구현 관계를 나타낸것이라고 한다. 

JPA의 핵심   ------------------------> Hibernate 상속으로 상속받고 Impl로 구현하고 있다.

EntitiyManagerFactory -------------> SessionFactory

EntitiyManager --------------------> Session 

EntitiyTransaction -----------------> Transaction

 

"JPA를 사용하기 위해서는 반드시 Hibernate를 사용할 필요는 없다"

Hibernate의 작동 방식이 맘에 안들면 언제나 DataNucleus, EclipseLink 등 다른JPA 구현체를 사용해도 되고, 본인이 직접 JPA를 구현해서 사용할 수 있다.

 

Spring Data JPA는 JPA를 쓰기 편하게 만들어 놓은 모듈!

DB에 접근할 필요가 있는 상황에서는 Repository를 정의하여 사용한다. -> 이 Repository가 바로 Spring Data SPA의 핵심

 

Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로, 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다.이는 JPA를 한단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 이루어진다. 사용자가 Repository인터페이스에 정해진 규칙대로 메소드를 입력하면, spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.

 

Spring Data JPA가 JPA를 추상화했다는 말은 Spring Data JPA의 Repository 의 구현에서 JPA를 사용하고 있다는 것이다 예를 들어 Repository 인터페이스의 기본 구현체인 SimpleJpaRepository 의 코드를 보면 아래와 같이 내부적으로 EntitiyManager을 사용하고 있다.

 

JPA, Spring Data JPA, Hibernate 셋이 어떻게 사용되는지 구분해야 한다!

 

- Spring Data JPA는 JPA 인터페이스 Repository 모듈을 만들어서 Spring Data JPA -> JPA -> Hibernate -> JDBC로 보내는 반면 

- Hibernate 구현체 경우 Repository 인터페이스 구현체를 만들어서 -> JPA -> Hibernate ->JDBC 순으로 동작하는 것 같다.

(해당 부분이 잘못됐으면 피드백 부탁드려요 ㅠ)

 

Hibernate부분은 JPA의 구현체이기 때문에 반드시 포함되는 부분이고 Hibernate가 아닐 경우 DataNucleus, EclipseLink  등으로 대체할 수 있다고 한다.

 

 

https://okky.kr/article/405284

 

OKKY | Spring Data JPA 에 Hibernate 가 필요한가요?

안녕하세요 현재 새로운 프로젝트 준비중이라 이것저것 생각하느라 고민이 많네요 Spring Boot Spring Data JPA 를 이용하기로하고 준비 작업중인데 이것저것 검색하다보니 Spring Boot Spring Data JPA Hibernat

okky.kr

출처 : https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

suhwan.dev

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