데이터베이스
- 관계형 데이터베이스는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술
객체지향 프로그래밍 언어
- 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술
패러다임 불일치 문제 발생
- 관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임이 서로다른데 객체를 데이터베이스에 저장하려고 하니 문제 발생
- JPA는 서로 지향하는 바가 다른 2개 영역을 중간에서 패러다임 일치를 시켜주기 위해 등장
- 즉, 개발자는 객체지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행함
JPA(Java Persistence API)
- JAVA에서 ORM(Object-Relational Mapping)기술 표준으로 사용되는 인터페이스의 모음
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- ex) Hibernate, EclipseLink
- JPA는 애플리케이션과 JDBC 사이에서 동작함
- 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신함
ORM(Object Relational Mapping)
객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계
객체와 테이블을 매핑해서 패러다임의 불일치를 개발자 대신 해결해줌
왜 JPA?
데이터베이스를 쓰지 않는 웹 애플리케이션은 거의 없음.
그러다 보니 객체를 관계형 데이터베이스에서 관리하는 것이 중요함
-> 관계형 데이터베이스가 계속해서 웹 서비스의 중심이 되면서 모든 코드가 SQL 중심적인 개발로 되어버리는 문제 발생
이를 해결하기 위해 JPA를 사용
1. 생산성
- JPA를 자바 컬렉션에 객체를 저장하듯 JPA에게 저장할 객체를 전달
- INSERT SQL을 작성하고 JDBC API 사용하는 지루하고 반복적인 일을 JPA가 대신 처리해줌
- CRUD쿼리 자동 생성
- 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역선
2. 유지보수
- 엔티티에 필드 추가시 등록, 수정, 조회 관련 코드 모두 변경
- JPA를 사용하면 이런 과정을 JPA가 대신 처리
- 즉, 개발자가 작성해야 할 SQL과 JDBC API 코드를 JPA가 대신 처리해줌으로 유지보수해야 하는 코드 수가 줄어듦
3. 패러다임의 불일치 해결
- 상속, 연관관계, 객체 그래프 탐색, 비교하기 같은 패러다임 불일치 해결
4. 성능
- 다양한 최적화 기회 제공
- 어플리케이션과 데이터베이스 사이에 존재함으로 여러 최적화 시도 가능
5. 데이터 접근 추상화와 벤더 독립성
참고
https://dbjh.tistory.com/77
https://ultrakain.gitbooks.io/jpa/content/chapter1/chapter1.3.html
https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html