일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- EXTJS
- table
- DATABASE
- GIT
- Vue
- 스프링부트
- 보안취약점
- 컴포넌트
- java
- crud
- JS
- Intellij
- 자바
- 리액트
- javascript
- restapi
- springboot
- 데이터베이스
- 자바스크립트
- sql
- 개발
- React
- reactjs
- jdk
- 스프링
- Spring
- component
- mssql
- 개발공부
- 쿼리
- Today
- Total
준준의 기록일지
[JPA] JPA, Hibernate, Spring Data JPA 본문
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
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
출처 : https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
'스프링' 카테고리의 다른 글
[스프링부트] 패키지 구조에 대한 고민 (0) | 2021.10.29 |
---|---|
[DTO] 왜 Entity와 나눠야하는가에 대한 고민 (0) | 2021.09.06 |
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] Spring 비즈니스 로직의 영역 설명 (0) | 2021.08.27 |
[lombok] 기능정리 펌 (0) | 2021.08.25 |
[Spring] 스프링 Filter, DoFilter (0) | 2021.08.02 |