Java 언어에서의 Object-Relational Mapping (ORM) 기술 표준으로 사용되는 인터페이스의 모음으로 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크
ORM
Application class와 관계형 데이터베이스 (Relational Database)의 테이블을 매핑한다는 뜻으로, 기술적으로는 application의 객체를 RDB 테이블에 자동으로 영속화해주는 것
현재의 개발 언어 트렌드 : Java, Scala, Kotlin과 같은 객체 지향 언어
현재의 데이터베이스 세계 : Oracle, MySQL, PostgreSQL과 같은 RDB
> 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 객체지향개발에 비해,
관계형 데이터베이스의 경우 데이터를 잘 정규화해서 저장하는 것이 목표
객체를 RDB에 관리해야 하기 때문에 개발자 입장에서는 SQL 중심적인 개발 (개발자가 객체를 SQL로 변환해서 RDB에 저장하는 변환 과정을 직접 해야 함)이 된다는 문제가 있다.
JPA는 반복적인 CRUD SQL을 처리해준다.
따라서 어떤 SQL이 실행될지만 생각하면 된다.
CRUD = CREATE + READ + UPDATE + DELETE
대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능
이를 통해 궁극적으로는 SQL이 아닌 객체 중심의 개발이 가능해진다는 점으로 생산성이 나아지고 유지보수도 수월해진다.
JPA를 사용함으로써 지루하고 반복적인 코드를 개발자가 직접 작성하지 않아도 되고, DDL문도 자동 생성해주기 때문에 DB 설계 중심을 객체 설계 중심으로 변경할 수 있다.
필드를 하나만 추가해도 관련 SQL문과 JDBC 코드를 전부 수정해야 하는 번거로움이 있었는데 JPA가 이를 대신 처리해준다.
DB가 변경되더라도 JPA에게 알려주면 비교적 간단하게 수정이 가능하다.
- Application과 DB 사이의 성능 최적화 기회를 제공한다.
- 같은 transaction 안에서는 같은 entity를 반환하기 때문에 DB와의 통신 횟수를 줄일 수 있다.
- transaction을 commit하기 전가지 메모리에 쌓고 한번에 SQL을 전송한다.
RDB는 같은 기능이라도 벤더마다 사용법이 다르기 때문에 처음 선택한 DB에 종속되고 변경이 어려운데, JPA는 application과 DB 사이에서 추상화된 데이터 접근을 제공하기 때문에 종속이 되지 않도록 한다.
JPA에서 제공되는 SQL을 추상화한 형태의 객체 지향 쿼리 언어로
식별자를 통한 단순 조회가 아닌 추가 조건들(query)을 통해 조회를 하고자 할 때 사용
JPA, Hibernate, Spring Data JPA 차이
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
JDBC와 Hikari Connection Pool (cp)
https://velog.io/@miot2j/Spring-DB%EC%BB%A4%EB%84%A5%EC%85%98%ED%92%80%EA%B3%BC-Hikari-CP-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0