
정의
Java 진영의 ORM 기술 표준 명세
ORM을 개발 패러다임으로 하는, Java에서 제공하는 API
Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음
실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크
목적 및 특징
목적
- Java 진영에서 ORM에 대한 표준을 제공
- SQL 코드의 반복, 객체지향과 관계지향 데이터베이스의 패러다임 불일치 해소
특징
- ORM
- OOP과 RDB 사이 패러다임의 불일치 해결
- SQL 중심적인 개발에서 객체 중심으로 개발 가능
- 생산성 향상
- 데이터 접근 추상화와 벤더 독립성
- 성능 최적화 가능
- Java 진영 ORM 표준
장점
- 생산성
- JPA를 자바 컬렉션에 객체를 저장하듯 JPA에 저장할 객체를 전달
- INSERT SQL을 작성하고 JDBC API 사용하는 반복적인 일을 JPA가 대신 처리
- 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 이동
- OOP와 RDB의 패러다임 불일치 문제를 해결
- 상속, 연관관계, 객체 그래프 탐색, 동일성 동등성 비교 등
- 컴파일 타임에 오류를 확인할 수 있다.
- 성능
- 다양한 성능 최적화 기회 제공
- 어플리케이션과 데이터베이스 사이에 존재함으로 여러 최적화 시도 가능
- 1차 캐시
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 지연 로딩
- 유지 보수
- 데이터 접근 추상화와 벤더 독립성
- 특정 데이터베이스 기술에 종속되지 않음
- 변화에 유연하게 대응 가능
- 엔티티로 관리되므로 스키마 변경시 엔티티만 수정하게 되면 엔티티를 사용하는 관련 쿼리는 자동으로 변경된 내역이 반영된다.
- 객체지향적으로 데이터를 관리할 수 있다.
단점
- 러닝 커브 존재
- 통계 처리와 같은 복잡한 쿼리 처리 어려움
- Native Query, JPQL, queryDsl 등을 사용하여 해결
- 성능
- 객체 간의 올바른 매핑 설계가 이뤄지지 않으면 성능 저하 발생 가능
- 자동으로 생성되는 쿼리가 많기 때문에, 개발자가 의도하지 않은 쿼리로 성능이 저하 발생 가능
예시
Hibernate
성능 최적화
- 1차 캐시와 동일성(Identity) 보장
- 약간의 조회 성능 향상
- 트랜잭션을 지원하는 쓰기 지연(Transactional Write-Behind)
- 트랜잭션을 커밋할 때까지 INSERT 쿼리 모아둠
- JDBC Batch SQL 기능을 사용해서 한번에 SQL 전송