[JPA] JPA와 Hibernate에 대해서 알아보자!

박정현·2023년 9월 27일
1
post-thumbnail

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
  • 데이터를 생성한 프로그램이 실행이 종료되더라고 사라지지 않는 데이터의 특성

하나의 레파지토리에 하나의 엔티티필요

profile
개발을 개발괴발하지 않기 위한 노력

0개의 댓글