JPA와 Spring Data JPA 차이점 (+Hibernate)
JPA, Spring Data JPA 둘의 차이점이 무엇일까?
JPA는 자바 애플리케이션에서 객체 관계 매핑(ORM)을 위해 기술 표준으로 채택된 인터페이스이다.
JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스와 어노테이션의 표준 집합을 정의한다.
즉, 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미한다.
JPA는 특정 기능을 하는 라이브러리가 아니다.
자바 애플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 한 방법일 뿐이고 단순한 명세이기에 구현은 없고, 다양한 ORM 프레임워크(예: Hibernate, EclipseLink, OpenJPA 등) 에서 구현할 수 있는 공통 API를 제공한다.
Hibernate는 JPA의 구현체이다.
인터페이스를 직접 구현한 라이브러리이다. JPA와 Hibernate의 관게는 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.
Hibernate는 JPA의 모든 기능을 지원하며 객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리해서 개발자가 일일이 SQL 쿼리를 작성하지 않도록 도와준다.
Hibernate는 JPA의 구현체이다. 즉, JPA를 사용하기 위해서 반드시 Hibernate'만'을 사용할 필요가 없다.
Spring Data JPA는 JPA 를 쓰기 편하게 만들어 놓은 모듈 이다.
@Repository 어노테이션이 Spring Data JPA의 핵심이다.
Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다. 이는 JPA를 한 단계 추상화시킨 Repository 라는 인터페이스를 제공함으로써 이루어진다.
기존에 JPA를 사용하려면 EntityManager를 주입받아 사용해야 하지만, Spring Data JPA는 Repository 인터페이스를 제공한다.
Spring Data JPA가 JPA를 추상화 했다는 말은, Spring Data JPA의 Repository의 구현에서 JPA를 사용하고 있다는 것이다.