JPA
ORM
- 용어 : Object-Relation Mapping
- 개념 : 객체(클래스)와 관계(관계형 데이터 베이스)와의 매핑을 의미 합니다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용하는데, 두 모델간의 불일치를 해소하기 위해 객체간의 관계를 바탕으로 SQL을 자동생성하여 불일치를 해소
- 종류: Hibernate, EclipseLink, DataNucleus 가 있고, 이중 Hibernate가 가장 성숙한 프레임워크로 많이 사용됨.
JPA
- 용어 : Java Persistance API
- 개념 : Hibernate를 기반으로 만든 신표준 ORM 기술로, 자바 ORM 기술에 대한 API 표준 명세/인터페이스이다.
- 특징
- CRUD 쿼리를 작성할 필요가 없다. 객체에 저장하듯이 저장하면 JPA가 알아서 해주기 때문에 객체중심 설계가 가능하다.
- 실시간 처리용 쿼리에 최적화 되어 있어, 복잡한 통계쿼리는 JPA에서 제공하는 네이티브 sql 기능을 사용할 수 있다. 쿼리 힌트도 사용 가능하다.
- 객체 중심으로 개발하여, 생산성/유지보수가 좋으며 테스트 코드 작성도 편리하다.
- 데이터베이스에 종속되지 않는다. (Dialect 사용)
ORM과 사용하였을때와, SQL Mapper의 차이점 ?
- 매핑 관계
- SQL Mapper는 객체와 sql의 매핑이다. sql 을 직접 작성해야함
- ORM은 객체와 테이블의 매핑으로 JPA가 sql을 생성해 주어 sql 의존 적인 개발을 피할 수 있다.
- 생산성/유지보수
- 객체의 특정 필드가 추가 되었다고 가정하면, SQL Mapper의 경우 객체에 필드를 추가하고, 해당 객체에 대한 쿼리를 모두 수정을 해주어야 해서 범위가 넒은 경우 생산성 저하와 유지보수가 어려울 수 있다.
- ORM의 경우 해당 객체에 추가를 해주면 JPA가 알아서 sql을 생성해 주기 때문에 객체중심으로 개발을 유연하게 할 수 있고, 유지보수가 편해진다.
JPA 자료 참고는 김영한 저의 자바 ORM 표준 JPA프로그래밍을 사용함. https://book.naver.com/bookdb/book_detail.nhn?bid=9252528