JPA
JPA란 무엇인가?
- JPA(Java Persistence API)
- 자바 ORM 기술 표준으로 사용되는 인터페이스의 모음
- 영구적으로 데이터를 저장하기 위해 필요한 인터페이스를 제공해준다.
- 인터페이스이므로 JPA를 구현한 ORM 프레임워크인 Hibernate, EclipseLink, DataNucleus를 사용한다.
- 자바를 해석하고 매핑한 데이터 베이스에 맞게 SQL쿼리를 보내주는 역할을 한다.
- 애플리케이션과 JDBC 사이에서 동작한다.
- 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL 쿼리를 DB로 보낸다.
ORM이란?
- ORM(Object Relational Mapping) : 객체와 관계형 데이터베이스를 매핑한다.
- 객체 코드를 이용해서 DB 데이터 테이블을 생성할 수 있게 해준다.
- 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한 후, ORM 프레임워크가 중간에서 매핑한다.
JPA 사용 이유
- 생산성
- 자바 컬렉션에 객체를 저장하듯이 JPA에게 저장할 객체를 전달하면, 알아서 쿼리를 자동으로 만들어준다.
- CRUD가 간단하다.
- 유지보수
- SQL 의존성이 줄어든다. → JPA가 알아서 SQL을 생성해 DB에 전달하고, 객체를 자동으로 매핑해준다.
- 필드를 추가하거나 삭제해도 쿼리 수정이나 매핑 작업 등을 JPA가 알아서 해주기 때문에 유지보수해야 하는 코드 수가 줄어든다.
- 패러다임 불일치 해결
- 기존 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다.
- 성능
- 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다.
- 1차 캐시와 동일성(identity) 보장 - 캐싱 기능
- 같은 트랜잭션 안에서는 같은 엔티티를 반환 → SQL 쿼리 횟수 줄일 수 있다.
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) - 버퍼링 기능
- 커밋하는 순간, 쌓아놓은 SQL을 모아서 데이터베이스에 보낸다.
- 지연 로딩(Lazy Loading)
- 데이터 접근 추상화와 벤더 독립성
- 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공한다. → 특정 데이터베이스 기술에 종속되지 않는다.
- H2, mySql, oracle 등 관계형 DB이자 표준을 준수한 SQL을 지원한다면, 어떤 데이터베이스든 사용 가능하다.
[참고]
<자바 ORM 표준 JPA 프로그래밍>
[JPA] JPA란 - Heee's Development Blog