JPA (Java Persistence API)
언젠간 JPA 개념 정리를 꼭 하려고 했는데 이제야 정리를 하게 됐다.
아직 공부해야 할 게 많지만 일단은 개념과 장단점 위주로 정리를 했다.
1. JPA의 개념
- Java persistence API는 자바의 ORM 기술의 표준
- JPA는 java ORM에 대한 API 표준 명세이며 인터페이스의 모음
- 구현체가 따로 없으며 ORM 프레임워크를 선택하여 사용
- ORM 프레임워크 종류
- Hibernate, EclipseLink, DataNucleus 등
ORM
- Object-Relational Mapping
- 객체와 관계형 데이터베이스를 Mapping 한다는 의미
- 객체와 테이블을 매핑해 패러다임의 불일치를 개발자 대신 해결
- 객체는 객체대로 생성하고 데이터베이스는 데이터베이스에 맞도록 설계가 가능하게 함
- 개발자는 Mapping 하는 방법만 전달
2. JPA의 탄생 배경
- 반복적인 SQL 사용
- ex) 테이블이 100개 존재한다면 100개의 CRUD를 작성
- SQL 의존적 개발
- ex) 테이블에 하나의 Column 추가 시 모든 SQL 변경 필요
- DAO와 테이블의 강한 의존성
- 객체지향의 장점을 사용하지 않고 객체를 단순히 데이터 전달 목적(VO, DTO)에만 사용
3. JPA의 장점
- 생산성
- Hibernate는 SQL을 직접 사용하지 않음
- 메서드 호출만으로 쿼리를 수행
➡️ SQL 반복 작업을 하지 않으므로 생산성 향상
- 유지보수
- 테이블 칼럼 변경 시 이전에는 SQL을 모두 확인 후 수정 필요
- JPA는 JPA가 대신 작업을 수행하므로 유지보수 측면에서 장점이 있음
- 특정 벤더에 종속적이지 않음
- 여러 DB 벤더 (MySQL, Oracle 등) 마다 다른 SQL을 사용하기 때문에 DB 변경이 어려움
- JPA는 추상화된 데이터 접근 계층을 제공하여 특정 벤더에 종속적이지 않음
- 어떤 DB를 사용하고 있는지만 설정하면 얼마든지 DB 변경이 가능
4. JPA의 단점
- 성능
- 메서드 호출로 쿼리를 실행하는 건 내부적인 동작이 많다는 의미
- 직접 SQL을 호출하는 것보다 성능이 낮을 수 있음
- 러닝커브
- JPA를 사용하기 위해서는 학습해야 할 것들이 많음
- JPA를 사용해도 SQL을 알아야 Hibernate가 수행한 쿼리 확인 및 성능 모니터링이 가능함
참고