[Spring Boot] JPA vs. Hibernate vs. Spring Data JPA

hameee·2024년 1월 7일
0

Spring Boot

목록 보기
14/20
post-thumbnail

이미지 출처

📍 JPA(Java Persistence API)

  • 정의
    • 자바에서 데이터베이스와의 상호 작용을 위한 표준 인터페이스를 제공하는 스펙(구현X)이다.
  • 목적
    • ORM 표준화
      자바 언어의 객체 지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 표준화하여, 다양한 ORM 프레임워크를 사용하는 경우에도 일관된 방식으로 데이터베이스와 상호 작용할 수 있도록 한다.
    • 객체-관계 매핑 간소화
      자바 클래스와 데이터베이스 테이블 간의 매핑을 어노테이션을 사용하여 간소화하고, XML 설정 파일을 통한 설정도 가능하다.
  • 기능
    • 엔터티 매핑
      자바 클래스를 데이터베이스 테이블과 매핑할 수 있도록 지원하며, 어노테이션을 통해 매핑 정보를 제공한다.
    • JPQL(Java Persistence Query Language)
      객체 지향 쿼리 언어를 제공하여 데이터베이스에서 데이터를 검색하고 조작할 수 있는 방법을 제공한다.
    • 트랜잭션 관리
      트랜잭션을 관리하여 데이터베이스 작업을 일관된 상태로 유지하고 롤백 등의 기능을 제공한다.
    • 캐싱 기능
      엔터티나 쿼리 결과를 캐싱하여 성능을 최적화할 수 있는 기능을 제공한다.
    • 리스너 및 콜백 메서드
      엔터티 생명주기 이벤트에 대한 리스너 및 콜백 메서드를 정의할 수 있다.

📍 Hibernate

  • 정의
    • JPA의 구현체로 ORM 프레임워크이다.
    • JPA를 사용하기 위해 반드시 Hibernate를 사용할 필요는 없다. 직접 JPA를 구현하거나 다른 구현체(EclipseLink, OpenJPA 등)를 사용할 수 있다.
  • 목적
    • 객체-관계 매핑
      자바 객체와 데이터베이스 테이블 간의 매핑을 지원하여 객체 지향 언어에서 사용하는 객체 모델과 관계형 데이터베이스의 테이블 간에 데이터를 매핑할 수 있도록 돕는다.
    • 데이터베이스 액세스 간소화
      복잡한 SQL 쿼리를 작성하지 않고도 데이터베이스에 쉽게 액세스할 수 있도록 지원한다. JDBC를 사용하는 것보다 훨씬 간소한 코드로 데이터베이스 연동을 제공한다.
  • 기능
    • 자동 테이블 생성 및 스키마 업데이트
      매핑 정보를 기반으로 데이터베이스 테이블을 자동으로 생성하거나 업데이트할 수 있다.
    • 지연 로딩 및 즉시 로딩
      객체 간의 관계를 정의할 때 지연 로딩이나 즉시 로딩과 같은 로딩 전략을 선택할 수 있도록 한다.
    • 캐싱 기능
      쿼리나 객체의 상태를 캐싱하여 성능을 향상시킬 수 있도록 지원한다.
    • 트랜잭션 관리
      트랜잭션 관리를 지원하여 데이터베이스 작업을 원자적으로 처리할 수 있다.
    • 검색 기능
      강력한 검색 기능을 제공하여 복잡한 검색 조건을 지정할 수 있다.

📍 Spring Data JPA

  • 정의
    • JPA의 구현체로, Spring 프레임워크의 모듈 중 하나이다.
    • JPA를 좀 더 쉽고 편리하게 사용할 수 있도록 Spring의 기능과 통합된 방식으로 제공한다.
    • JPA를 사용하기 위해 반드시 Spring Data JPA를 사용할 필요는 없다. Spring Data JPA를 사용자하지 않고(=Repository에서 JpaRepository 인터페이스를 상속받지 않고) 직접 JPA를 사용(=JPA의 인터페이스 중 하나인 EntityManager를 직접 사용)할 수 있다.
    • 다양한 JPA 구현체와 통합이 가능하도록 설계되어 있지만, 일반적인 설정에서는 Hibernate가 기본값으로 설정되어 있다.
  • 목적
    • 간소화된 데이터 액세스 계층
      반복적이고 일상적인 데이터 액세스 작업을 단순화하여 개발자가 더 적은 코드로 데이터베이스와 상호 작용할 수 있도록 한다.
  • 기능
    • CRUD 작업의 간편한 구현
      JpaRepository 인터페이스를 제공하여 CRUD 작업을 위한 기본 메서드들을 이미 포함하고 있다.
    • 쿼리 메서드 지원
      메서드 이름을 통해 쿼리를 생성하는 방식을 지원하여, 복잡한 쿼리(JPA의 JPQL)를 작성하지 않고도 메서드 명명 규칙을 활용하여 데이터를 조회할 수 있다.
    • 동적 쿼리 지원
      조건에 따라 동적으로 쿼리를 생성할 수 있는 기능을 제공한다.
    • 트랜잭션 관리
      Spring의 트랜잭션 관리를 이용하여 데이터베이스 트랜잭션을 처리한다.

References

🔗 https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/en/ArchitectureInDetail/DataAccessJpa.html#database-access-jpa
🔗 https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

0개의 댓글