[Java] JDBC / JPA & Hibernate / Mybatis 차이

SQL Mapper 와 ORM의 개념 및 차이점 분석

Posted by owin2828 on 2020-01-06 17:13 · 3 mins read
  • 본 문서에서는 JDBC, JPA/Hybernate, Mybatis에 대하여 알아보도록 한다.
  • 출처: http://bitly.kr/C72t7zb

0. 영속성

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
  • Persistence Layer: 프로그램 아키텍쳐에서 데이터에 영속성을 부여해주는 계층
  • Persistence Framework: JDBC 프로그래밍의 복잡함 없이 간단히 DB와 연동되는 시스템을 빠르게 개발할 수 있으며,
    안정성을 보장해주는 프레임크. 그 종류는 다음과 같다.
    • SQL Mapper
    • ORM

0-1. SQL Mapper

  • SQL <- 매핑 -> Object 필드
  • SQL문으로 직접 DB의 데이터를 다룸
    • 종류: Mybatis, JdbcTemplates

0-2. ORM

  • DB 데이터 <- 매핑 -> Object 필드
  • 객체를 통해 간접적으로 DB의 데이터를 다룸
    • 직관적 코드(매서드)를 통해 조작 가능
    • 객체 간의 관계를 바탕으로 SQL을 자동 생성
    • 종류: JPA, Hibernate

0-3. ORM의 장,단점

장점

  • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와줌
  • 재사용유지보수의 편리성이 증가함
  • DBMS에 대한 종속성이 줄어듬

단점

  • 완벽한 ORM 으로만 서비스를 구현하기가 어려움
  • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점 발생
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어려움

1. JDBC(Java Database Connectivity)

jdbc

  • JDBC는 DB에 접근할 수 있도록 java에서 제공하는 API
  • 모든 Java의 Data Access 기술의 근간
  • 모든 Persistence Framework는 내부적으로 JDBC API를 사용

2. JPA(Java Persistence API)

JPA

  • Java ORM 기술에 대한 API 표준 명세로 Java에서 제공하는 API
  • JPA의 구성요소
    1. javax.persistence 패키지로 정의된 API
    2. JPQL(Java Persistence Query Language)
    3. 객체/관계 메타데이터
  • 사용자가 원하는 JPA 구현체를 선택해 사용 가능
    • Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentails 등

2-1. Hibernate

Hibernate

  • Hibernate는 JPA의 구현체 중 하나
  • 내부적으로 JDBC API를 사용해 SQL 구현
  • HQL(Hibernate Query Language)라 불리는 강력한 쿼리 언어 포함
  • 장점
    • 빠른 개발 가능
    • 쿼리보다는 객체에 집중 가능
    • 테이블 생성, 변경등 관리가 쉬움
  • 단점
    • 어려움(많은 것을 알아야 함)
    • 오사용시 데이터 손실성능 저하 유발

3. Mybatis

Mybatis

  • 개발자가 정의한 SQL을 지원하는 SQL Mapper
  • DB의 레코드에 매핑하기 위해 XMLAnnotaion 사용 가능
  • 장점
    • SQL에 대한 모든 컨트롤을 할 경우 적합
    • SQL 쿼리 최적화가 잘 되있을 경우 유용
  • 단점
    • 모든 관계에 대한 조작을 하고자 할 때는 적합하지 않음