[JPA] JPA/Hibernate 와 Mybatis 차이

Gajun Choi·2022년 9월 16일
0

JPA

목록 보기
2/4
post-thumbnail

요약

  1. Persistence(영속성) 개념
  2. SQL Mapper 와 ORM 차이
  3. JDBC(Data Transfer Object)란
  4. JPA/Hibernate란
  5. Mybatis란

1. Persistence(영속성)

1.1 개념

  • 프로그램이 종료되어도 사라지지않는 데이터의 특성

  • 메모리에서만 존재하는 데이터는 프로그램이 종료되면 내용을 잃어버리기 때문에
    파일, RDB, 객체 DB 등을 활용하여 데이터에 영속성을 부여해줌

1.2 Persistence Layer

a. 프로그램 아키텍처에서, 데이터에 영속성을 부여해주는 계층

- 계층 종류 -
프레젠테이션 계층 (Presentation layer) - UI 계층 (UI layer) 
애플리케이션 계층 (Application layer) - 서비스 계층 (Service layer) 
비즈니스 논리 계층 (Business logic layer) - 도메인 계층 (Domain layer) 
데이터 접근 계층 (Data access layer) - 영속 계층 (Persistence layer) 

1.3 Persistence Framwork (JPA, Hibernate, Mybatis)

  • JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장

  • SQL Mapper / ORM 으로 나뉨

2. SQL Mapper 와 ORM

  • ORM은 데이터베이스 객체를 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성해주지만 SQL Mapper는 SQL을 명시해줘야함

  • ORM은 RDB의 관계를 Object에 반영하는 것이 목적이라면, SQL Mapper는 단순히 필드를 매핑시키는 것이 목적이라는 점에서 지향점의 차이가 있다.

2.1 SQL Mapper

  • SQL <--- Mapping ---> Object 필드
  • SQL Mapper는 SQL 문장으로 직접 DB 데이터를 다룬다.
    ex) Mybatis, JdbcTempletes

2.2 ORM(Object-Relational Mapping)

  • 데이터베이스 데이터 <--- 매핑 ---> Object 필드
    -> 객체를 통해 간접적으로 DB를 다룬다
    -> ORM을 이용하여 직관적인 메서드로 데이터 조작이 가능
    -> 객체간의 관계를 바탕으로 SQL을 자동 생성

  • Persistant API라고도 한다. (JPA, Hibernate)

3. JDBC(Java Database Connectivity)

-------------------------------------------------------------------->

ApplicationJDBC(Interface)JDBC(Impementations)Persistence Layer
DAOSpring JDBCJDBC(Driver)Database
  • JDBC는 모든 DB에 접근할 수 있도록 하는 Java에서 제공하는 API
  • JDBC는 DB에서 자료를 쿼리하거나 업데이트하는 방법 제공

4. JPA(Java Persistent API)

4.1. JPA 개념

  • Java ORM 기술에 대한 API 표준 명세로 이 또한 Java에서 제공하는 API
    = JPA는 ORM을 사용하기 위한 표준 Interface를 모아둔 것

  • JPA 구성 요소
    1) javax.persistance 패키지로 정의된 API 그 자체
    2) JPQL(Java Persistence Query Language)
    3) 객체/관계 메타데이터

  • 사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다.
    JPA의 대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials 등이 있다.
    이 구현체들을 ORM Framework라고 부른다

4.2. Hibernate ???

  • JPA의 구현체 중 하나로 JDBC를 거쳐 HQL(Hibernate Query Language)를 사용한다.

  • HQL(Hibernate Query Language)
    1) HQL은 SQL과 매우 비슷하며 추가적인 컨벤션을 정의할 수도 있다.
    2) HQL은 완전히 객체 지향적이며 이로써 상속, 다형성, 관계등의 객체지향의 강점을 누릴 수 있다.
    3) HQL쿼리는 자바 클래스와 프로퍼티의 이름을 제외하고는 대소문자를 구분한다.
    4) HQL은 쿼리 결과로 객체를 반환하며 프로그래머에 의해 생성되고 직접적으로 접근할 수 있다.
    5) HQL은 SQL에서는 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공한다.
    6) HQL은 여러 테이블을 작업할 때 명시적인 join을 요구하지 않는다.

  • 장점

    • 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있다.
    • 테이블 생성, 변경, 관리가 쉽다
  • 단점

    • 배울게 많다...

5. Mybatis

  • SQL Mapper의 한 종류로 프로시저 / 고급 매핑을 지원
  • JDBC로 처리하는 상당 부분의 코드(SQL)와 파라미터 설정 및 결과 매핑을 함
  • DB Record에 원시타입과 Map Interface, 그리고 자바 POJO를 위해 xml과 Annotation 사용 가능
  • 장점
    • SQL쿼리들이 최적화가 잘 되어있으면 유용함
    • SQL을 실질적으로 사용하기 때문에 디테일한 부분을 컨트롤 할 수 있음
  • 단점
    • 애플리케이션과 DB간에 서로 잘 구조화 되도록 많은 설정을 하지 않고는 설계에 대한 모든 조작을 하고자 할 때는 부적합
profile
개발하는헬창

0개의 댓글