JPA?
JPA는 Java Persistence API의 약자로, 애플리케이션과 JDBC사이에서 동작하는 자바진영의 ORM 표준 인터페이스다.
이름에서도 알 수 있듯 Java에서 제공하는 API다. (스프링에서만 사용할 수 있는 것이 아님)
JPA는 툴이나 프레임워크가 아닌 인터페이스로, 이를 구현하는 구현체는 여러가지가 있는데(Hibernate, EclipseLink 등) 대표적으로 Hibernate
를 많이 사용된다.
ORM은 Object Relational Mapping. 즉 객체(Object)와 데이터베이스를 매핑하는 것을 말함.
객체(자바 클래스)와 데이터베이스 테이블이 매핑되는 것이지 SQL과 매핑되는 것이 아님.
JPA를 사용해야 하는 이유
생산성
- 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 됨
- CREATE TABLE과 같은 DDL 문을 자동으로 생성해주는 기능도 있음
- 데이터베이스 설계 중심의 패러다임에서 객체 중심으로 역전
유지보수
- 개발자가 작성해야 했던 SQL와 JDBC API 코드를 JPA가 대신 처리해주므로 유지보수해야 하는 코드 수가 줄어듦
패러다임의 불일치 해결
- 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해줌
성능
- 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공함
데이터 접근 추상화와 벤더 독립성
- 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 함
표준
- 자바 진영의 ORM 기술 표준임
패러다임의 불일치
- 객체지향 프로그래밍과 관계형 데이터베이스의 목적이 다름
- 객체지향형 프로그래밍은 객체를 다루기 위해 캡슐화, 추상화, 다형성 등의 여러 장치를 제공함
- 관계형 데이터베이스는 데이터 중심으로 구조화되어 있으며 집합적인 사고를 요함
- 관계형 데이터베이스에는 추상화, 상속, 다형성 같은 개념이 없음
객체와 관계형 데이터베이스는 지향하는 목적이 다르므로 둘의 기능과 표현 방법도 다르다. 이것을 객체와 관계형 데이터베이스의 패러다임 불일치 문제라 한다. (출처: 김영한 저 ⌜자바 ORM 표준 JPA 프로그래밍⌟)
객체를 관계형 데이터베이스에 저장하기 위해서는 패러다임 불일치 문제가 많이 발생하고, 이것을 개발자가 중간에서 해결해주어야 한다.
MyBatis VS JPA
MyBatis
는 SQL Mapper
로, 직접 SQL을 작성하고 일일이 객체와 테이블을 매핑해줬어야 했다.
각각의 테이블마다 CRUD SQL을 반복적으로 작성해주어야 했고, 객체가 변경되면 다시 일일이 매핑해줘야 하는 번거로움이 있다.
반면에 JPA
는 ORM
인터페이스이므로 객체와 테이블이 자동으로 매핑된다. (객체를 변경해도 알아서 테이블과 매핑된다!!)JPA
를 사용함으로써 SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임의 변화를 맛볼 수 있다.
이미 우리나라와 중국을 제외하면 MyBatis보다 JPA를 훨씬 더 많이 사용하는 추세이다.
JPA를 사용한다고 해서 SQL을 사용하지 않는 것은 아니다. Hibernate의 메서드를 호출하면 Hibernate는 그에 맞는 쿼리를 수행한다.
Spring Data JPA?
스프링 데이터 JPA를 사용하면 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다.
스프링 데이터 JPA는 JPA를 더 쉽게 도와준다!
+) 참고
'STUDY > TIL' 카테고리의 다른 글
Spring WebFlux (0) | 2021.04.29 |
---|---|
URI와 URL (0) | 2021.04.28 |
Lombok (0) | 2021.03.29 |
Svelte | Svelte 프로젝트 github pages로 배포하기 (0) | 2021.02.03 |
Svelte | 스벨트(Svelte)로 TODO LIST 만들기 (2) (0) | 2021.02.03 |