본문 바로가기
JAVA

[JAVA] - JPA란 / Hibernate란

by nam_ji 2023. 11. 10.

Spring JPA와 Hibernate 알아보기

JPA란

  • JPA는 자바 ORM (Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻합니다.
    • ORM 기술이란
      ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술입니다.
      객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑해 줍니다.
      • 장점
        1. SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있습니다.
        2. Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높입니다.
        3. 객체지향적인 코드 작성이 가능합니다. 오직 객체지향적 접근만 고려하면 되기 때문에 생산성이 증가합니다.
        4. 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리합니다.
        5. 예를 들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환한다고 가정했을 때, 새로 쿼리르 짜야하는 경우가 생깁니다. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없습니다.
      • 단점
        1. 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있습니다.
        2. 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야 할 수도 있스비다.
        3. 학습비용이 고가입니다.
  • JPA는 라이브러리가 아닌 ORM을 사용하기 위한 인터페이스의 모음입니다.
    이러한 JPA는 인터페이스의 모음, 단순한 명세이기 때문에 구현이 없습니다. 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용할지 정의하는 하나의 방법일 뿐입니다.
  • JPA를 사용하는 이유는
    JPA는 반복적인 CRUD SQL을 처리해 줍니다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만 하면 되고, 예측도 쉽게 할 수 있습니다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공해 주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있습니다.
    JPA를 사용하여 얻을 수 있는 가장 큰 것은 SQL 아닌 객체 중심으로 개발할 수 있다는 것입니다. 이에 따라 당연히 생산성이 좋아지고 유지보수도 수월합니다. 또한 JPA는 패러다임의 불일치도 해결하였습니다. 예를 들면 JAVA에서는 부모클래스와 자식클래스의 관계 즉, 상속관계가 존재하는데 데이터베이스에서도 이러한 객체의 상속관계를 지원하지 않습니다.
    (상속 기능을 지원하는 DB도 있지만 객체 상속과는 다릅니다.) 이런 상속관계를 JPA는 아래와 같은 방식으로 해결하였습니다.

Hibernate란

  • Hibernate는 JPA를 구현한 구현체입니다.
    개발된지 10년이 넘었으며 대중적으로 많이 이용되는 JPA 구현체 중 하나입니다.
    JPA의 핵심들인 EntityManagerFactory, EntityManager, EntityTransaction 등을 상속받아 구현합니다.
    JPA를 구현하는 다른 구현체들로는 EclipseLink나 DataNucleus 등이 있습니다.
    만약 JPA를 구현하는 구현체들이 마음에 들지 않는다면 개발자가 직접 JPA 구현체를 만들어 사용할 수도 있습니다.
    Hibernate는 내부적으로 JDBC를 이용해 관계형 데이터베이스와 커넥션을 맺고 상호작용합니다.

Spring Data JPA란

  • Spring Data JPA는 JPA를 한단계 더 추상화시킨 Repository 인터페이스를 제공합니다.
    이러한 Spring Data JPA는 Hibernate와 같은 JPA 구현체를 사용해서 JPA를 사용하게 됩니다.
    Spring Data JPA를 사용하면 사용자는 더욱 간단하게 데이터 접근이 그낭해집니다.


정리

  1. JPA는 자바 진영의 ORM 기술에 대한 API 표준 명세입니다.
  2. Hibernate는 JPA의 구현체이고, 내부적으로 JDBC를 이용합니다.
  3. Spring Data JPA는 JPA를 사용하기 쉽게 스프링에서 제공하는 모듈로 내부적으로 JPA 구현체를 이용합니다.

'JAVA' 카테고리의 다른 글

[JAVA] - JSP란  (0) 2023.11.15
[JAVA] - contains, indexOf, matches()  (0) 2023.11.13
[JAVA] - 문자열을 정수로 변환 (String to Int)  (0) 2023.10.18
[JAVA] - 람다식  (1) 2023.10.17
[JAVA] - Comparable과 Comparator의 차이  (0) 2023.10.16