1. JPA (Java Persistence API)
- 정의
- JPA는 자바의 ORM 표준 인터페이스이다.
- 객체와 데이터베이스의 매핑을 정의한 명세이다.
- 자바에서 데이터베이스 작업을 위한 규칙을 정해두고, 이를 구현한 라이브러리를 통해 데이터를 처리한다.
- 특징
- 표준 인터페이스를 제공하기 때문에, 특정 구현체에 종속되지 않고 코드를 작성할 수 있다.
- JPA 명세에 맞춰 작성된 코드는 Hibernate, EclipseLink, OpenJPA 등의 다양한 JPA 구현체에서 사용할 수 있다.
- 주요 기능
- Entity, Id, OneToMany, ManyToOne 등의 어노테이션을 통해 객체와 테이블 간의 매핑을 정의한다.
- 영속성 컨텍스트 개념을 사용하여 엔티티를 관리한다.
2. Hibernate
- 정의
- Hibernate는 JPA의 구현체 중 하나로, JPA 명세를 기반으로 하지만 JPA에서 제공하지 않는 추가 기능을 제공한다.
- 특징
- Hibernate는 JPA 명세를 준수하며 이를 확장한 추가적인 기능(캐싱, 확장된 쿼리 지원 등)을 제공한다.
- 전 세계적으로 많이 사용되는 JPA 구현체 중 하나로, 성능 및 안정성이 우수하다.
- 주요 기능
- 캐시 지원: 1차 캐시와 2차 캐시를 통해 성능 최적화가 가능하다.
- QueryLanguage(HQL): Hibernate는 JPQL과 유사한 HQL을 제공하여 SQL처럼 객체를 조작하는 쿼리를 작성할 수 있다.
- JPA와 동일한 ORM 매핑을 지원하면서도, JPA 표준에 포함되지 않는 Hibernate 전용 기능을 활용할 수 있다.
3. JPA와 Hibernate의 관계
- JPA는 인터페이스이고, Hiberante는 JPA를 구현한 구현체이다.
- JPA는 무엇을 할 수 있는지에 대한 규칙을 정의한 것이고, Hibernate는 실제로 이 규칙에 맞춰 동작하는 라이브러리이다.
- 확장성: JPA 명세에서 정해진 기능 외에, Hibernate는 캐싱이나 HQL 등 다양한 추가 기능을 제공한다.