본문 바로가기
Language/Java

[Java] MyBatis 와 JPA 의 차이

by jaee_ 2022. 2. 14.

 

Persistence Framework

  • JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장합니다. 
  • Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있습니다.
    • JPA, Hibernate, Mybatis 등

 

SQL Mapper 와 ORM

Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다고 하였습니다. 대표적인 예로 SQL Mapper 는 Mybatis, ORM 은 JPA 가 있습니다. 

  • ORM은 Object-relational mapping(객체 관계 매핑) 의 약자로 객체는 객체대로, RDB는 RDB대로 설계하여 데이터베이스 객체를 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성해줍니다. 
  • SQL Mapper는 ORM과 달리 SQL을 직접 작성하여 명시해주어야 합니다. 

MyBatis 란 ?

MyBatis란 SQL Mapper를 사용하는 Persistence Framework 입니다. 개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하고, 기존에 사용하던 SQL 명령어를 재사용하여 코드의 중복과 무의미한 코드 작성을 생략할 수 있게합니다. 또한, SQL 문을 xml 파일에 작성하여 관리하기 쉽고, 변환이 자유롭고 가독성이 좋습니다. 

 

MyBatis의 장점

  • 간단하고 편리한 Persistence Framework으로 배우기가 쉽다. 
  • SQL 쿼리를 직접 작성하므로 최적화된 쿼리를 구현할 수 있습니다. 
  • 엔티티에 종속받지 않고 다양한 테이블을 조합할 수 있습니다. 
  • 복잡한 쿼리도 SQL 쿼리만 작성할 수 있다면 쉽게 해결 가능합니다. 

MyBatis의 단점

  • 스키마 변경시 SQL 쿼리를 직접 수정해주어야 합니다. 
  • 반복된 쿼리를 작성한다면 반복작업 발생합니다. 
  • 런타임시 오류를 확인할 수 있습니다. 
  • 쿼리를 직접 작성하기에 데이터베이스에 종속된 쿼리문이 발생할 수 있습니다. 
  • 데이터베이스 변경시 로직도 함께 수정되어야 합니다. 
  • 특정 DB에 종속적입니다.

JPA (Java Persistence API) 란 ?

JPA란 Java Persistence API의 약자로 Java ORM 기술에 대한 API 표준 명세입니다. JPA 는 명세이기 때문에 JPA 만으로는 어떤 구현 기술을 사용할 순 없습니다. Spring Data JPA는 JPA를 간편하게 사용하도록 만들어놓은 오픈 소스이고, 이를 구현한 구현체가 존재하는데 이 중 하나가 Hibernate 입니다. 

🔍 ORM 이란
O
bject-relational mapping(객체 관계 매핑) 의 약자로 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑해주는 역할을 하여 SQL을 직접 작성할 필요가 없습니다. 대중적인 언어에는 대부분 ORM 기술이 존재한다고 합니다.

JPA 동작 방식
JPA 저장 동작 방식

JPA 의 장점

  • SQL 중심적인 개발에서 객체 중심으로 개발할 수 있습니다.
  • 1차캐시, 쓰기지연, 변경감지, 지연로딩을 제공하여 성능상 이점을 얻을 수 있습니다.
  • 코드 레벨로 관리 되므로 사용하기 용이하고 생산성이 높습니다.
  • 컴파일 타임에 오류를 확인할 수 있습니다.
  • 데이터베이스에 종속적이지 않으므로 특정 쿼리를 사용하지 않아 추상적으로 기술 구현이 가능합니다.
  • 엔티티로 관리되므로 스키마 변경시 엔티티만 수정하게 되면 엔티티를 사용하는 관련 쿼리는 자동으로 변경된 내역이 반영됩니다. - 유지보수에 용이
  • 개발 초기에는 쿼리에 대한 이해가 부족해도 코드 레벨로 어느 정도 커버가 가능합니다.
  • 객체지향적으로 데이터를 관리할 수 있습니다.
  • 부족한 부분은 다양한 쿼리 빌더와 호환하여 보안할 수 있습니다.

JPA 의 단점

  • JPA 만 사용하여 복잡한 연산을 수행하기엔 어렵습니다. 
  • 단방향, 양방향, 연관관계 이해가 없다면 JPA를 적용시키기 어렵습니다. 
  • 초기에는 생산성이 높을 수 있으나 점차 사용하다 보면 성능상 이슈가 발생할 수 있습니.(N+1, FetchType, Proxy, 연관관계)
  • 고도화 될수록 학습 곡선이 높아집니다. 

참고

- https://incheol-jung.gitbook.io/docs/q-and-a/spring/jpa-vs-mybatis

- https://dreaming-soohyun.tistory.com/entry/JPA%EC%99%80-MyBatis%EC%9D%98-%EC%B0%A8%EC%9D%B4-ORM%EA%B3%BC-SQL-Mapper

- 인프런 <자바 ORM 표준 JPA 프로그래밍 - 기본편>

댓글