JPA, Hibernate, Spring Data JPA

Today Jeeho Learned·2022년 9월 29일
1

Spring

목록 보기
31/31

오늘 면접을 진행하면서 JPA, Hibernate, Spring Data JPA 차이에 대한 질문을 받았다.
JPA와 Hibernate에 대한 지식은 알고있었는데, Spring Data JPA에 대해서는 잘 모르고 있었다.
그냥 JPA = Spring Data JPA로 알고 있었는데 질문을 기억하고 정리했다.

추가
면접때 완전 엉터리로 얘기했다~ ㅋㅋㅋ그래도 배워가니 다행이다~

JPA(Java Persistent API)란?

  • JPA란 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미한다.
  • JPA는 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 방법중 하나이다.
  • JPA는 단순히 명세이기 때문에 구현이 없다.
  • JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 한다.
  • Hibernate를 많이 사용하는 이유는 가장 범용적으로 다양한 기능을 제공하기 때문이다.

    요런 느낌이다.

Hibernate란?

  • Hibernate는 JPA 구현체 중 하나이다.
  • Hibernate는 SQL을 사용하지 않고 직관적인 코드(메소드)를 사용해 데이터를 조작할 수 있다.
  • Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는 것은 아니다.
  • Hibernate가 지원하는 메소드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 작성하지 않을 뿐이다.

요런 느낌이다.

Spring Data JPA란?

  • Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 JPA를 쉽고 편하게 사용할 수 있도록 도와주는 역할이다.
  • 기존에 JPA를 사용하려면 EntityManager를 주입받아 사용해야하지만,Spring Data JPA는 JPA를 한 단계 더 추상화 시킨 Repository 인터페이스를 제공한다.
  • Spring Data JPA가 JPA를 추상화 했다는 말은, Spring Data JPA의 Repository의 구현에서 JPA를 사용하고 있다는 것이다.
  • 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.

Hibernate와 Spring Data JPA의 차이점

  • Hibernate는 JPA 구현체이고, 스프링 데이터 JPA는 JPA에 대한 데이터 접근의 추상화라고 말할 수 있다.

  • Spring Data JPA는 GenericDao라는 커스텀 구현체를 제공한.다. 이것의 메소드의 명칭으로 JPA 쿼리들을 생성할 수 있다.

  • Spring Data를 사용하면 Hibernate, Eclipse Link 등의 JPA 구현체를 사용할 수 있다.

  • @Transaction 어노테이션을 통해 트랜잭션 영역을 선언하여 관리할 수 있다.

  • Hibernate는 낮은 결합도의 이점을 살린 ORM 프레임워크로써 API 레퍼런스를 제공한다.
    여기서

  • 반드시 기억해야할 점은 Spring Data JPA는 항상 Hibernate와 같은 JPA 구현체가 필요하다.

  • Spring Data JPA 의 Repository Interface (SimpleJpaRepository)에는 EntityManager 가 포함되어 있기 때문에 직접 작성하지 않아도 내부에서 자동으로 호출된다. 또한, @Repository annotation 작성하지 않아도 spring data JPA가 알아서 Bean으로 등록해준다.
profile
기록해야 (살아)남는다 !

0개의 댓글