JPA (Java Persistence API)
ORM 기술 표준으로 사용되는 인터페이스 모음이다.
실제 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용하는 프레임워크이다. ex) Hibernate, EclipseLink, DataNucleus
애플리케이션과 JDBC 사이에서 동작한다.
ORM (Object-Relational Mapping)
객체로 연결해 준다는 의미
애플리케이션과 DB 연결 시 SQL 언어가 아닌 애플리케이션 개발 언어로 DB 접근할 수 있게 만드는 툴
-> SQL문이 아니라 Method를 통해 DB 조작 가능
-> Query와 같이 필요한 선언문, 할당 등의 코드가 줄고 애플리케이션 개발 언어를 그대로 사용하므로 코드의 가독성 높임
-> 객체지향적인 코드 작성
<- 프로젝트의 규모가 크고 복잡할 때 설계가 잘못된 경우 일관성이 무너짐
<- 복잡한 query는 속도를 위해 별도의 변경이 필요하므로 결국 sql문을 사용할 수도 있음
JPA 사용 이유
반복적인 CRUD SQL문을 처리해준다. 이에 SQL이 아닌 객체 중심으로 개발을 진행할 수 있어 생산성과 유지보수가 좋아진다.
findby(필드명), deleteby(필드명)과 같이 메소드 명칭만 적어주면 SQL문을 작성하지 않아도 자동으로 쿼리문을 실행해준다.
//select * from member_table where member_email=?
Optional<MemberEntity> findByMemberEmail(String memberEmail);
SQL문을 직접 쓸 때의 문제점
Hibernate
JPA 인터페이스를 직접 구현한 라이브러리
JPA의 모든 기능을 지원하며 객체와 RDB 간의 매핑을 자동 처리
JPA vs Spring data JPA
spring data JPA는 JPA 기반 애플리케이션을 보다 간편하게 만드는 라이브러리/프레임워크 ex) Repository
Repository라는 인터페이스를 제공함으로써 JPA를 보다 간편하게 만들어준다. repository 인터페이스의 규칙대로 메서드를 입력하면 spring이 알아서 해당 메서드 이름에 적합한 쿼리를 날리는 구현체를만들어 bean으로 등록한다. ex).findAll(), .findById(id), .save(memberDTO) 등
JPA만을 사용하면 EntityManager를 이용해 DB 기능을 사용해야 한다.