JPA vs Spring Data JPA

개요


JPASpring Data JPA 를 학습하면서 둘 간의 명확한 차이점이 뭐지⁉️ 라는 궁금점이 계속 생겼던 것 같습니다. 이번 포스팅에선 JPASpring Data JPA 가 각각 무엇이고 어떤 것을 우리에게 제공해주는지 구분할 수 있도록 하는 것을 목표로 학습해보는 시간을 가져보도록 하겠습니다 😁

0. 학습을 시작하기 전에


일단 Spring Framework 는 엄청나게 거대하고 잘만들어진 프레임워크로 저희같은 개발자들이 어플리케이션을 개발할 때 필요한 수많은 기능들을 제공해줍니다.

수많은 기능들을 제공 ? → 그만큼 알아야할 내용도 많다! → 공부할게 많다!😢

그래서 스프링 프레임워크를 공부하다보면 어 이게 뭐지? 라는 물음을 시작으로 계속 궁금점을 유발하는 것 같습니다.

저번주에는 JPA를 학습하면서, JPA, Hibernate, Spring Data JPA 라는 개념을 짧은 시간에 학습하며 각각의 개념간의 차이점에 대해서 궁금했었습니다. 조금이라도 제대로 알고 사용해야 고수🥷🏻 흉내라도 낼 수 있기에 이번 포스팅을 준비하게 되었습니다.

1. JPA(Java Persistence API)


1-1. JPA란?


JPA는 Java Persistence API의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의하는 인터페이스입니다. 즉, 인터페이스라는 점에서 특정 기능을 수행하는 라이브러리 개념이 아닌 특정한 기술을 명세한 것에 더 가깝다고 볼 수 있습니다. 여기서 특정한 기술이란 위에서 말한 '자바 어플리케이션에서 관계형 데이터베이스를 사용하는 기술'을 의미한다고 볼 수 있습니다.

  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 기술
  • JavaORM(Object Relational Mapping) 기술에 대한 표준 명세
  • ORM이기 때문에 자바 클래스DB 테이블매핑합니다.

ORM VS SQL Mapper


가) ORM


  • DB Data매핑Object 필드
    • 객체를 통해 간접적으로 DB Data를 다룹니다.
  • 객체와 DB의 데이터를 자동으로 매핑해줍니다.
    • SQL 쿼리가 아닌 메서드로 데이터를 조작할 수 있습니다.
    • 객체간 관계를 바탕으로 SQL을 자동으로 생성 합니다.
  • Persistant API라고 할 수 있습니다.
  • JPA, Hibernate

나) SQL Mapper


  • SQL매핑Object 필드
  • SQL 문으로 직접 DB를 조작합니다.
  • 예) Mybatis, jdbcTemplate

JPA 대표 패키지


javax.persistence 패키지에는 대부분 interface, enum, Exception, Annotation 등을 통해 JPA 를 정의하고 있습니다.

예를 들어서, JPA의 핵심 개념인 EntityManager 는 interface로 정의 되어있습니다.

EntityManager.interface

package javax.persistence;

import ...

public interface EntityManager {

    public void persist(Object entity);

    public <T> T merge(T entity);

    public void remove(Object entity);

    public <T> T find(Class<T> entityClass, Object primaryKey);

    // More interface methods...
}

2. Hibernate


2-1. Hibernate란?


HibernateJPA 인터페이스의 구현체 입니다. → 라이브러리!(Library)

위 사진처럼 JPA의 핵심 인터페이스인 EntityManagerFactory, EntityManager, EntityTransactionHinbernate 에서 각각 SessionFactory, Session, Transaction 으로 상속받고 각각 Impl 로 구현한 것을 확인할 수 있습니다.

여기서 우리가 알 수 있는 것!


HibernateJPA의 인터페이스를 상속받아 만들어진 구현체라고 학습하였습니다. 이 말은 즉슨, JPA를 사용하기 위해 꼭 Hibernate 를 사용하지 않아도 된다는 말입니다. 하지만‼️ 잘 만들어진 JPA의 구현체인 Hibernate를 사용하지 않을 이유도 많이 없어 보입니다 😂

3. Spring Data JPA


3-1. Spring Data JPA 란?


Spring Data JPA 는 Spring에서 제공하는 모듈 중 하나로, 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와줍니다. Spring Data JPA 의 핵심은 Repository 입니다.

Repository : JPA를 한 단계 더 추상화 시킨 인터페이스

  • 구현에 있어서 JPA를 사용합니다.
  • 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring 이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해줍니다.
    • 메서드 호출
    • 해당 메서드에 해당하는 쿼리 실행 구현체 생성
    • Bean으로 등록

여담:

  • JPARepository를 사용하면서 솔직히 이게 JPA 인거 아닌가? 라고 생각했는데 Spring Data JPA 라는 모듈에서 JPA(영속성에 관련된 기술 명세)를 사용자가 좀 더 편리하게 사용하게 해주는 것이 JPARepository 였다.. ㅋㅋ

회고 (정리)


Java Application에서 DB에 접근하는 과정을 나타낸 순서도


Raw JPA 사용과 Spring Data JPA 사용


참고문서


JPA, Hibernate, 그리고 Spring Data JPA의 차이점
JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)

좋은 웹페이지 즐겨찾기