[JPA] JPA, Hibernate과 Spring Data JPA에 대한 이해

🙈·2023년 7월 4일
0

[Dev] JAVA

목록 보기
1/2
post-thumbnail

프로젝트를 시작하여 JPA, Hibernate, Spring Data JPA에 대해 제대로 이해하지 못하고 활용하고 있다는 생각이 들었다. 따라서 이번 기회에 이를 정리해 보고자 한다.

1. JPA(Java Persistent API)는 인터페이스이다.

ORM(Object-Relation Mapping)

JPA를 이해하기 전 ORM(Object-Relation Mapping)의 개념에 대해 이해할 필요가 있다.

간단히 정리하면 아래와 같은 특징이 있다.

  • 객체와 RDB(Relational Database, 관계형 데이터베이스)의 데이터를 자동으로 매핑한다.
  • 객체지향프로그램의 클래스와 RDB의 테이블 사용한다.
  • ORM을 사용하면 SQL Query가 아닌 코드로 데이터 조작할 수 있다.

JPA(Java Persistent API)

JPA는 Java ORM 기술에 대한 명세이다.
즉, Java 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스로 이해할 수 있다.
특정 기능을 하는 라이브러리가 아니다!

JPA를 사용하기 위해서는 JPA를 구현한 프레임워크(Hibernate나 EclipseLink 등)을 사용해야 한다.

2. Hibernate는 JPA의 구현체이다.

Hibernate는 JPA의 구현체 중 하나이다.

JPA에 정의된 EntityManagerFactory, EntityManager, EntityTransaction과 같은 인터페이스를
Hibernate의 SesscionFactory, Session, Transaction이 상속받고 있는 것을 확인할 수 있다.

Hibernate 내부에서 JDBC API가 동작하고 있어 사용자가 직접 connection을 관리하지 않아도 된다.

3. Spring Data JPA로 JPA 사용을 편하게하는 모듈이다.

Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 사용자가 JPA를 편하게 사용할 수 있도록 도와준다.
이는 JPA를 추상화한 Repository라는 인터페이스를 통해 가능하다.

만약 Spring Data JPA 없이 Hibernate만 사용한다면 어떨까?
Hibernate만을 사용한다면 JPA의 영속성을 관리하는 EntityManager를 주입 받아 사용해야한다.
(해당 과정은 이곳에 자세히 나와있다.)

하지만 Spring Data JPA를 활용한다면 훨씬 간편하게 JPA를 사용할 수 있다.

public interface FOODao extends JpaRepository<Foo, Long> {
	Foo findByName(String name);
}

(사용 방법은 이곳에 나와있다.)

⭐요약

  1. JPA는 ORM 기술의 명세다.
  2. Hibernate는 JPA의 구현체이다.
  3. Spring Data JPA는 데이터베이스 접근과 같은 반복되는 코드의 사용을 줄여주는 인터페이스이다.
    ⇒ Spring Data JPA를 사용하기 위해선 Hibernate과 같은 JPA privider가 필요하다.

Spring Data를 사용하면

  • Hibernate과 같은 JPA provider를 사용할 수 있다.
  • @Transaction을 통해 트랜잭션 영역을 선언하고 관리할 수 있다.



<참고 자료>

ORM

JPA, Hibernate과 Spring Data JPA

Spring Data JPA와 QueryDSL


<이미지 출처>

JPA 구현 프레임워크

JPA와 Hibernate의 상속관계

Jpa, Hibernate, Spring Data JPA의 상관관계

profile
개발 일기🌱

0개의 댓글