JPA란 무엇인가?
JPA는 자바 진영의 ORM(Object-RelationalMapping)기술 표준으로 사용되는 인터페이스의 모음
(JPA는 애플리케이션과 JDBC 사이에서 동작)

- 자바 ORM 기술에 대한 표준 명세로, JAVA 에서 제공하는 API이다.
- ORM으로 자바 클래스와 DB테이블을 매핑한다.
ORM이란?
- ORM은 객체와 관계형 데이터베이스를 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결
⇒ 즉, ORM 프레임워크는 개발자 대신 SQL을 생성해주고 패러다임 불일치 문제들을 해결해줌으로써 객체 측면에서의 정교한 객체지향 모델링을 가능하게 해준다.
- 패러다임 불일치 문제란?
객체 지향 언어와 관계형 데이터베이스 간의 구조적, 개념적 차이로 인해 발생하는 문제
EX) 상속, 연관 관계, OOP 등
jpa.persist(member) ⇒ JPA 저장

jpa.find(id) ⇒ JPA 조회

JPA 소개
- 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어졌는데 이것이 바로 JPA

JPA를 사용해야 하는 이유
1. 생산성
- 자바 컬렉션에 객체를 저장하듯이 JPA에 저장
- 지루하고 반복적인 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다.
- DDL문 자동 생성 기능
2. 유지보수
- SQL에 의존적인 개발은 엔티티에 필드 하나만 추가해도 JDBC API코드를 모두 변경해야하는 번거로움이 있었다. 반면, 이런 과정을 JPA가 대신 처리해주므로 유지보수해야 하는 코드수가 줄어든다.
- JPA가 패러다임의 불일치 문제를 해결해주므로 객체지향 언어가 가진 장점들을 활용해서 유연하고 유지보수하기 좋은 도메인 모델을 편리하게 설계가 가능하다.
3. 패러다임 불일치 해결
- 상속, 연관관계, 객체, 그래프 탐색, 비교 문제의 패러다임 불일치 문제 해결
4. 성능
String memberId = "helloId";
Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);
- 위 처럼 같은 회원을 두 번 조회하는 코드가 있을 때, JDBC API는 조회할 때마다 데이터베이스와 통신했을 것이다. 하지만 JPA는 한 번만 데이터 베이스에 전달하고 그 다음은 재사용하여 최적화한다.
5. 데이터 접근 추상화와 벤더 독립성

- JPA는 그림과 같이 특정 데이터베이스에 종속되지 않도록 한다.
- 만약 데이터베이스를 변경하면 JPA에게 변경 여부만 알려주기만 하면 된다.
6. 표준
- JPA는 자바 진영의 ORM 표준이기 때문에 다른 구현 기술로 손쉽게 변경 가능하다.