JPA (+JPQL) & Hibernate & SpringData JPA 차이점 (+QueryDSL)

윤경·2021년 10월 30일
1

지식

목록 보기
6/7

스프링부트 강의를 쭈우우욱 듣다 보니 점점 개념이 많아지고 머릿속에서 정리가 안되기 시작했다. (라고 하기엔 한참 오래됐다.)

그래서 검색을 해보았고 이해되는 게시물을 찾아 정리를 해보았다. 감사합니다.


JPA는 인터페이스

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

특정 기능을 하는 라이브러리가 아니다.
단지, '관계형 데이터베이스를 어떻게 사용해야 하는지'를 정의하는 한 방법일 뿐.

인터페이스. 즉 구현이 없다.
그럼 구현체는?

JPQL

JPA는 다양한 쿼리 방법을 지원한다.

  • JPQL
  • JPA Criteria
  • QueryDSL
  • 네이티브 SQL
  • JDBC API 직접 사용, MyBatis, SpringJdbc Template 함꼐 사용

JPQL은 Java Persistence Query Language가장 단순한 조회 방법이다.

JPQL엔티티 객체를 대상으로 쿼리하고 SQL데이터베이스 테이블을 대상으로 쿼리한다.

Hibernate는 JPA의 구현체

Hibernate: JPA라는 명세의 구현체

EntityManager와 같은 인터페이스를 직접 구현한 라이브러리를 뜻한다.
(즉, 다른 JPA 구현체를 사용해도 되고 가능하다면 직접 JPA를 구현해 사용할 수도 있음. 하지만 하이버네이트는 이미 성숙한 라이브러리이기 때문에 이를 사용할 뿐)
JPA와 Hibernate는 마치 자바의 인터페이스와 해당 인터페이스를 구현한 class와 같은 관계

SpringData JPA는 JPA를 편리하게 사용하기 위한 모듈

SpringDataJPA: 스프링에서 제공하는 모듈 중 하나
JPA를 더 쉽고, 편하게 사용할 수 있도록 도와주는 역할을 수행
JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함 (이는 SpringDataJPA의 핵심)

Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면 스프링이 자동으로 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어 빈으로 등록해준다.

"SpringDataJPA가 JPA를 추상화하다." = "SpringDataJPA의 Repository의 구현에서 JPA를 사용하고 있다"

QueryDSL

: SQL, JPQL을 자바 코드로 작성할 수 있도록 도와주는 빌더 API.
JPA criteria에 비해 편리하고 실용적.

SQL, JPQL은 문자열인 반면 QueryDSL은 문자가 아닌 코드컴파일 시점에 문법 오류를 발견할 수 있다는 큰 장점이 있다.

참고로, 내가 듣는 강의 강사님 말씀으로 실무에서는 SpringBoot + JPA + QueryDSL을 기본으로 사용한다고 한다. 🙃


참고
참고
참고
참고

profile
개발 바보 이사 중

0개의 댓글