본문 바로가기

JPA

[JPA] JPA와 ORM그리고 Hibernate의 개념

JPA와 ORM 그리고 Hibernate의 개념에 대해 알아보자.

 

1. JPA와 ORM

 

1-1. JPA(Java Persistent API)

 

 JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미한다. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 한다.

(Hibernate에 대한 개념은 아래 링크로)

 

1-2. ORM(Object Relational Mapping)

 

 ORM이란 객체와 DB의 테이블이 매핑을 이루는 것을 말한다. 더 쉽게 말하자면 객체가 테이블이 되도록 관계를 만들어준다는 뜻이다. ORM을 이용하면 SQL Query가 아닌 코드(메서드)를 통해 데이터를 조작할 수 있다.

 

 예를들어 member라는 테이블의 데이터를 출력하기 위해서 MySQL에서는 SELECT * FROM member라는 쿼리를 실행해야 하지만 ORM을 사용한다면 member 테이블과 매핑된 객체를 Member라고 할 때, MemberRepository(Member 객체에 대한 인터페이스)를 만들어 주고 그 인터페이스에 JpaRepository<Member, String>를 상속받게 한다. 테이블의 데이터를 모두 출력하고 싶은 것이기 때문에 memberRepository.findAll()이라는 메서드를 호출한다. 이를 통해 테이블의 데이터 출력이 가능하다.

 

Repository 생성
findAll() 메서드

(위와 관련된 내용들은 추후에 다루자)

(이런게 있다고 참고만 합시다)

 

query를 직접 작성하지 않고 메서드 호출만으로 query 역할을 대신하다 보니 ORM을 사용하면 생산성이 매우 높아진다.

하지만, query가 복잡해졌을 경우 ORM만으로는 표현의 한계가 존재하고 성능이 raw query에 비해 느리다.

때문에 JPQL, QueryDSL 등과 같은 방법이나 Mybatis와 JPA를 함께 활용하는 등의 방법을 사용한다.

 

2. Hibernate

 

 Hibernate란 JPA에 대한 실제 구현체인 implementation이다. JPA를 구현한 여러 프레임워크가 있지만 Hibernate가 가장 많이 활용되고 있다.

 

 Mybatis와 비교했을 때 동아시아를 제외하고 대부분 나라에서는 Hibernate를 압도적으로 많이 사용하고 있다. JDBC를 노출하지 않고 ORM 기술을 사용하는 JPA를 선호하는 것으로 보인다. 

 Hibernate의 장점으로는 

  • 생산성
  • 유지보수 용이
  • 특정 벤더에 종속적이지 않음

이 있고 단점으로는

  • 성능
  • 세밀함
  • 러닝커브

가 있다.

 참고로 Spring Data JPA라고 불리는 것이 있는데 스프링에서 Hibernate의 단점을 보완하여 Hibernate를 더 간편하게 사용하기 위해 자주 쓰이는 것들을 프레임워크로 다시 한번 묶음으로 제공하는 것이다.

 

3. JPA 탄생 배경

 

 JDBC를 사용했을 때 보이는 문제점이 있다.

  • 유사한 CRUD SQL 반복 작업
  • 객체를 단순 데이터 전달 목적으로만 사용 (객체 지향 x)

 위와 같은 이유로 객체와 테이블을 매칭시키는 ORM이 주목 받게되었고 자바 진영에서는 JPA를 표준 스펙으로 사용한다.

 

 

4. 정리

 4-1. ORM은 객체와 DB 테이블을 매핑시켜주는 것이다.

 

 4-2. 자바 진영에서는 ORM의 표준으로 JPA를 사용한다.

 

 4-3. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이다.

 

 4-4. JPA의 실제 구현 클래스들을 모아놓은 것이 Hibernate다.

 

 4-5. JPA는 복잡한 SQL을 수행하기는 어렵기 때문에 비즈니에서 따라 Mybatis를 사용할지 Hibernate를 사용할지 잘 선택해야 한다.