JPA(Java Persistence API)는 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스의 모음이다.
실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.
OOP에서 사용되는 객체와 관계형 데이터베이스간의 매핑을 자동으로 처리하는 기술이다.
우리가 일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다.
JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때 쿼리문을 개발자가 직접 작성하지 않아도 된다.
JPA가 개발자 대신 적절한 SQL을 생성해서 객체를 자동으로 Mapping하여 DB에 전달한다.
JPA를 사용한다면 대부분의 SQL에 대해 JPA를 구현한 프레임워크가 내부적으로 JDBC API를 활용하여 자동으로 데이터베이스와 상호 작용을 처리해주어 생산성이 향상된다.
JPA ≠ Spring Data JPA
자바 기반의 영속성 프레임워크로서, OOP 언어인 자바와 관계형 데이터베이스 간의 매핑을 쉽게 처리하도록 도와주는 도구이다.
대표적인 ORM 기술을 구현한 프레임워크로, DB의 테이블과 자바 객체 간의 매핑을 자동으로 처리하여 개발자가 객체 지향적인 방식으로 데이터를 다룰 수 있게 해준다.
자바 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리하여, 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 불일치를 해결한다.
다양한 데이터베이스 시스템에 대한 지원을 제공하며, 개발자가 특정 데이터베이스에 의존하지 않고 프로그래밍할 수 있도록 도와준다.
자동으로 트랜잭션을 관리하여 데이터베이스 작업의 일관성을 보장한다. 개발자가 명시적으로 트랜잭션을 제어할 수 있다.
여러 가지 매핑 전략을 지원하여 개발자가 객체와 데이터베이스 간의 매핑을 자유롭게 선택할 수 있다.
이미지 출처 : https://victorydntmd.tistory.com/195
JPA : 자바에서 영속성을 다루기 위한 표준 인터페이스를 제공한다. 자바 진영에서 ORM을 사용하는 표준 방법을 제시하며, 여러 ORM 프레임워크가 이 표준을 따르도록 규정한다.
Hibernate : JPA의 구현체 중 하나다. JPA의 스펙을 따르면서도 자체적으로 추가적인 기능을 제공한다.
JPA : 특정 데이터베이스에 의존하지 않고 여러 데이터베이스를 지원할 수 있도록 설계되어 있다. (벤더 독립성 제공)
Hibernate : 초기에는 MySQL, PostgreSQL 등과 같은 여러 데이터베이스에 대한 지원을 위해 개발되었으나, Hibernate의 기능 중 일부는 특정 데이터베이스에 종속적일 수 있다.
JPA : 표준을 따르므로, 다른 JPA 구현체로 전환하는 것이 비교적 쉬울 수 있다.
Hibernate : 강력하고 유연한 기능을 제공하지만, 특정한 Hibernate 기능을 사용하면 벤더 독립성이 어려울 수 있다.
JPA는 표준 인터페이스이고, Hibernate는 ORM 프레임워크이며 구현체이다.
일반적으로 JPA를 사용하여 벤더 독립성을 확보하면서, Hibernate를 선택하면 JPA의 표준을 따르면서 Hibernate만의 강력한 기능을 활용할 수 있다.
Hibernate는 많은 기능을 제공하지만, 프로젝트의 특정 요구 사항과 개발자의 경험 수준에 따라서 선택할 수 있다.