You are a developer, not a coder.

JPA, Hibernate, Mybatis 요약, 정리 본문

FrameWorks/Spring (Boot포함)

JPA, Hibernate, Mybatis 요약, 정리

Mattmk 2020. 4. 21. 13:44
SMALL

1. JPA 란?

JPA를 이해하기에 앞서 ORM이 먼지에 대해서 먼저 정리해 보는게 좋을것 같다.

 

ORM (Object-relational mapping) 이란?
  • 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.
  • ORM 프레임워크가 중간에서 매핑해 주는 구조이다.
  • 대중적인 언어에는 대부분 ORM 기술이 존재한다.
  • ORM은 객체와 RDB 두 기둥 위에 있는 기술이다.
ORM의 장점
  • 특정 DBMS에 종속되지 않는다.
  • SQL문이 코드에 들어가지 않아 깔끔하고 간결한 코드를 유지할 수 있다.
  • ORM이 nesting 데이터를 바인딩해준다.
ORM의 단점
  • RAW query에 비해 performance가 느리다.
  • Query tuning이 힘들다.
  • 서비스가 복잡해 질수록 ORM으로 할 수 있는 작업의 범위에 한계가 있다.

1) Java ORM 기술에 대한 API 표준 명세로, Java에서 제공하는 API이다.

2) 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API 이다.

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

4) 사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다.

  - JPA의 대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다.

  - 위의 모든 구현체들을 통틀어 ORM Framework라고 부른다.

 

  • JPA 구성 요소는 다음과 같다.

   1) javax.persistance package로 정의된 API

   2) JPQL (Java Persistence Query Language)

   3) 객체/관계 메타 데이터

 

 

1-1. JPA workflow

JPA는 애플리케이션과 JDBC 사이에서 동작한다.

즉, 개발자가 JPA를 사용하면 JPA내부에서 JDBC API를 사용하여 SQL query을 호출하여 DB와 통신한다.

개발자가 직접 JDBC API를 쓰는 것이 아닌 JPA가 JDBC API를 사용하는 구조이다.

 

JPA workflow 구상도

 

2. Hibernate

  • Hibernate는 JPA의 구현체 중 하나이다.
  • Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는다는 것은 아니다.
  • Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 작성하지 않을 뿐이다.
  • HQL (Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함하고 있다.

    1) HQL은 SQL과 매우 비슷하며 추가적인 컨벤션을 정의할 수도 있다.

    2) HQL은 완전히 객체 지행적이며 이로써 상속, 다형성, 관계 등의 객체지향의 강점을 누릴 수 있다.

    3) HQL쿼리는 자바 클래스와 프로퍼티의 이름을 제외하고는 대소문자를 구분한다.

    4) HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.

    5) HQL은 SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공한다.

    6) HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.

 

  • 장점

    1) 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.

    2) 테이블 생성, 변경, 관리가 쉽다.

    3) 로직을 쿼리에 집중하기 보다는 객체자체에 집중 할 수 있다.

    4) 빠른 개발이 가능하다.

 

  • 단점

    1) 어렵다.

    2) 잘 이해하고 사용하지 않으면 데이터 손실이 발생한다.

    3) 성능상 문제가 있어, 과부하가 걸릴 수 있다.

 

3. Mybatis

  • 개발자가 지정한 SQL, 저장 프로시저, 몇 가지 고급 매핑을 지원하는 SQL Mapper 이다.
  • JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
  • 기존에 JDBC를 사용할 때는 DB와 관련된 여러 복잡한 설정들을 다루어야 했지만 SQL Mapper는 자바 객체를 실제 SQL문에 연결함으로써, 빠른 개발과 편리한 테스트환경을 제공한다.
  • 데이터베이스 record에 원시 타입과 Map 인터페이스 그리고 자바 POJO를 설정해서 매핑하기 위해 xml과 Annotation을 사용할 수 있다.
  • Mybatis는 원래 Apache Foundation의 iBatis였으나 생산성, 개발 프로세스, 커뮤니티 등의 이유로 Google Code로 이전되면서 이름이 바뀌었다.
  • 장점

    1) SQL에 대한 모든 컨트롤을 하고자 할 때 매우 적합하다.

    2) SQL쿼리들이 매우 잘 최적화 되어 있을때에 유용하다.

 

  • 단점

    1) 애플리케이션과 데이터베이스 간의 설계에 대한 모든 조작을 하고자 할 때는 적합하지 않다.

      - 애플리케이션과 데이터베이스 간에 서로 잘 구조화되도록 많은 설정이 바뀌어야 하기 때문이다.

 

iBatis -> Mybatis로 바뀌면서 차이점

1) JDK 1.5, Annotation

2) Dynatic SQL, XML Element

 

 

4. Reference

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

LIST

'FrameWorks > Spring (Boot포함)' 카테고리의 다른 글

@Controller, @RestController 차이점  (0) 2023.05.18
JPA N+1 해결방법?  (0) 2023.05.18
json serialize 에서 ignore 하고 싶다면?  (0) 2020.12.28
Oauth 2.0  (2) 2020.03.13
Comments