JPA(Java Persistance API)
- 자바 진영의 ORM기술 표준을 의미한다.
- 인터페이스의 모음이다. 즉, 실제로 동작하는 것이 아니다.
- JAVA에서 제공하는 API를 뜻한다. [ Spring에서 제공하는것이 아니다 ]
- API는 Application Programming Interface로 쉽게 말하면 서버와 데이터베이스에 대한 출입구 역할을 하고
- 프로그램과 프로그램 사이에서 원활한 통신을 할 수 있도록 한다.
- API는 모든 접속을 표준화하여 누구나 동일하게 접근(Access)할 수 있다.
- ORM은 기본적으로 SQL을 맵핑하는 것이 아닌 JAVA 클래스와 DB테이블을 맵핑한다.
그럼 ORM은 무엇일까?
- ORM은 Object-relational mapping(객체 관계 맵핑)
- 객체는 객체대로 설계하고
- 관계형 데이터베이스는 관계형 데이터 베이스대로 설계하는 것이다.
- 그래서 ORM은 JAVA의 객체와 DB중간에서 맵핑의 역할을 한다.
- SQL쿼리를 날려서 사용하는 것이 아니라 메서드로 데이터를 입력하여
- 자동적으로 SQL을 생성하여 쿼리를 날려준다.
JPA는 애플리케이션과 JDBC 사이에서 동작한다.

JAVA어플리케이션에서 JPA를 통해 컴파일을 하게되면 JPA 내부에서 JDBC API가 자동적으로 SQL를 만들어서 DB로 날려주게 된다.
- JDBC는 DB에 접근할 수 있도록 자바에서 제공하는 API이다.
JPA동작 - Insert(저장)

- DAO에서 어떠한 객체를 저장할때 Persist해서 JPA로 넘겨준다. 그러면 JPA에서 객체를 확인하고 조건에 맞으면 Insert SQL을 생성하여 JDBC API를 통해 DB로 날려준다.
JPA동작 - Find(조회)

- 조회를 할때는 Member의 PK값을 id로 하여 JPA로 넘겨준다. Insert와 마찬가지로 JDBC API를 통해 select SQL을 DB로 날려주고 DB에서 결과를 반환하여 Entity객체로 넘겨주게된다.
JPA 특징
- 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 객체지향 개발이 가능하다.
- 자바 객체와 DB 테이블 사이의 매핑 설정을 통해 SQL을 생성한다.
- 객체를 통해 쿼리를 작성할 수 있는 JPQL(Java Persistence Query Language)를 지원
- JPA는 성능 향상을 위해 지연 로딩이나 즉시 로딩과 같은 몇가지 기법을 제공하는데 이것을 잘 활용하면 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.
JPA를 왜 사용해야 하는가?
- 기존의 SQL 중심적인 개발에서 객체 중심으로의 개발이 가능해진다
- 간단한 메소드로 CRUD가 가능하여 생산성이 증가한다.
- 유지보수가 쉬워진다.
- 기존에는 필드를 변경하게 되면 모든 SQL을 수정해야만 한다.
- 하지만 JPA로 필드만 추가하게되면 JPA가 SQL을 건드릴 필요가 없어진다.
- Object와 RDB(관계형 데이터베이스) 간의 패러다임 불일치를 해결해준다.
💡후기
이제부터 JPA스터디 시작...
🔎참고
[Inflearn]김영한 - 자바 ORM표준 JPA 기본편