Java Persistent API의 약자로 자바 표준 ORM 이며 JPA는 ORM 기술을 규격화한 인터페이스 이며 이를 구현한 대표적인 구현체 하이버네이트가 있다.
ORM기술은 과거 EJB시절에도 존재하였다고 한다. 하지만 기술의 완성도가 떨어져 사용이 불편하였으며 어플리케이션 서버에서만 동작하거나 하는 여러가지의 불편한 점이 다수 존재하였다. 여기에서 불편함을 느껴 탄생한 것이 하이버네이트 이며 기존 ORM 보다 성능이 훨씬 뛰어나 자바진영에서는 이것을 표준 API로 만들어 탄생한 것이 현재의 JPA이다.

JPA는 자바 어플리케이션과 JDBC API사이에서 동작하며 JPA는 내부적으로 JDBC API를 실행하여 데이터베이스와 통신하여 원하는 데이터를 주고 받는다.
Object Relational Mapping의 약자로 자바의 객체와 데이터베이스 테이블의 매핑을 시켜준다.
ORM의 기술 덕분에 기존의 객체와 데이터베이스 사용시 발생하였던 문제인 패러다임 불일치 문제를 해결해준다.
패러다임 불일치는 객체는 객체의 특성인 상속 다형성 캡슐화 추상화 등이 있으며 참조라는 것을 사용하여 다른 객체의 데이터를 사용할 수 있지만 데이터베이스는 관계형 데이터베이스로 외래키라는 것을 가지고 다른 객체를 참조할 수 있다.
객체의 참조는 단방향 조회로 객체의 참조값을 가진 객체만 일방적으로 데이터를 조회할 수 있는 반면에 외래키를 가진 데이터베이스 테이블은 JOIN을 통하여 서로 양방향 조회가 가능하다.
예를들어 Member 라는 클래스가 있으며 Member클래스에는 필드값으로 Team이라는 타입으로 선언한 변수에 참조값이 있다. Member클래스의 객체는 Team객체의 참조값을 갖고 있으며 이 참조값을 사용하여 Team객체의 값을 조회할 수 있다. 반면에 관계형 데이터베이스에서는 PK와 FK를 이용하여 서로의 테이블을 JOIN 이라는 기능을 활용하여 한번에 데이터를 조회할 수 있다.
이런 점이 객체지향과 관계형 데이터베이스가 추구하면 방향 마치 동그라미와 세모를 합치려고 하는 현상 즉 패러다임 불일치 라는 문제가 발생한다.
패러다임 불일치가 발생하게 되면서 생기는 격차를 없애기 위해 직접 자바 객체와 SQL을 맵핑을 하면서 이 격차를 해결하고는 한다. 하지만 개발자가 패러다임 불일치를 해결하기 위하여 많은 시간을 투자하며 테이블에 종속 되어 객체지향적인 설계를 하지 못하게 되는 단점이 있다. 또한 자바의 객체가 쿼리에 종속이 되어 객체에서 필드 하나만 추가해줘도 이를 위해 쿼리문 전체를 수정해줘야 하는 참사가 일어나게 된다. 결국 객체지향적으로 설계를 하지도 못한체 객체는 쿼리에 데이터를 전송하기 위한 객체로 사용되기만 한다.
기존 패러다임의 불일치한 문제를 해결하기 위해서 나온 기술이 바로 ORM프레임워크이다. 객체와 테이블 중간에서 매핑해주는 기술로 ORM은 개발자가 기존 패러다임 불일치로 발생한 반복적인 작업들을 대신해줌과 동시에 객체지향적인 설계를 하면 알아서 객체를 해석하여 테이블에 매핑시켜준다.
즉 객체는 객체대로 정교하게 설계가 가능하고 테이블은 테이블대로 분리하여 설계가 가능하기 때문에 기존의 패러다임 불일치 문제를 해결할 수 있게 되었다. 또한 알아서 SQL문을 실행시켜주기 때문에 개발자는 쿼리문을 작성할 필요가 없게 되었고 단지 객체를 컬렉션 프레임워크에 저장하듯이 자바 코드를 짜기만 하면 데이터베이스에 저장할 수 있게 되었다.
JPA로 인하여 개선된 문제로 인하여 개발자는 객체지향적으로 개발을 할 수 있게 되었다. 특히 JPA를 사용하면서 유지보수적인 부분에서 월등히 좋아지게 되었다. 개발자는 SQL문을 신경쓸 필요 없이 객체에 필드 하나만 추가하면 JPA에서는 이 객체인 엔티티의 추가된 부분을 해석하여 알아서 쿼리문을 날려주기 때문에 이런 유지보수 시간을 엄청 단축시킬 수 있게 되었다.
또한 JPA를 사용하면 기존 데이터베이스에 종속적인 문제도 해결할 수 있게 되었다. JPA는 여러가지 데이터베이스의 방언을 지원하기 때문에 데이터베이스를 바꾸게 되어도 바뀐 데이터베이스언어로 변경해줄 필요 없이 JPA가 알아서 해당 데이터베이스에 맞는 쿼리문으로 바꾸어 날려주게 된다.
이런 쿼리 종속문제를 JPA가 중간에 대신 해주기 때문에 생산성, 유지보수, 객체중심적인 개발, 패러다임 불일치, 데이터베이스 종속 문제 등과 같은 골치아픈 일을 해결해준다.