[JPA] JPA와 Hibernate에 대해서 알아보자!
1. JPA란?
- 자바 ORM(Object Relation Mapping)기술에 대한 API 표준 명세를 의미
- 특정 기능을 하는 라이브러리가 아니고, **ORM을 사용하기 위한 인터페이스를 모아둔 것 (이전 포스팅을 참조)
- 즉, JPA는 자바 어플리케이션에서 관계형데이터베이스를 어떻게 사용해야 하는지를 정의하는 방법 중 하나
2. JPA사용방법
- JPA는 단순히 명세이기 때문에 구현이 없음
- JPA를 정의한 javax.persistence 패키지의 대부분은 interface, enumm Exception, Annotation으로 되어 있음
- JPA의 핵심이 되는 EntityManager는 javax.persistence 패키지 안에 interface로 정의되어 있음
- 따라서 JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해 함
- 그 중 Hibernate를 많이 사용하는 이유는 가장 범용적으로 다양한 기능을 제공하기 때문
3. Hibernate
(1) Hibernate란?
- JPA의 구현체 중 하나
- JPA는 ORM을 명세하는 것이고 실제 구현하는 것은 Hibernate임
- JPA와 Hibernate는 자바의 interface와 해당 interface를 구현한 class와 같은 관계임
- SQL을 사용하지 않고 직관적인 코드 (메소드)를 사용하여 데이터를 조작할 수 있음
- 그러나, 직접 사용하지 않는다고 JDBC API를 사용하지 않는 것은 아님
- Hibernate가 지원하는 메소드 내부에는 JDBC API가 동작하고 있으며 단지 개발자가 직접 SQL을 작성하지 않을 뿐임
(2) Hibernate의 장단점
① 장점
- 생산성
- Hibenate는 SQL을 직접 사용하지 않고 메소들 호출만으로 query가 수행됨
- 즉, 반복적인 SQL 작섭과 CRUD 작업을 직접하지 않으므로 생산성이 높아짐
- 유지보스
- 테이블 칼럼이 변경되었을 경우 JPA에서 대신해주기 때문에 유지보수 측면에서 좋음
- 객체지향적 개발
- 객체지향적으로 데이터를 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할수 있음
② 단점
- 어려움
- 성능
- 메소드 호출로 쿼리를 실행하는 것은 내부적으로 동작이 많은 것을 의미항므로 직접 SQL을 호출하는 것보다 성능이 떨어짐
- 세밀함이 떨어짐
- 복잡한 통계 분석 쿼리를 메소드 호출로 처리하는 것은 힘들다.
- 이것을 보완하기 위해 JPA에서는 SQL과 유사한 기술인 을 지원한다. JPQL
- SQL 자체 쿼리를 작성할 수 있도록 지원도 하고 있다.
영속성
- persistence
- 데이터를 생성한 프로그램이 실행이 종료되더라고 사라지지 않는 데이터의 특성
하나의 레파지토리에 하나의 엔티티필요