MyBatis vs JPA

Bong2·2022년 4월 20일

Spring

목록 보기
4/9

MyBatis

  • SQL Mapper을 사용하는 영속성 프레임워크이다.
  • Native SQL 코드를 작성하고 결과를 객체와 매핑하는 것까지 직접 처리해야한다.
  • record에 원시 타입과 Map 인터페이스, 그리고 자바 POJO를 설정해서 매핑하기 위해 xml과 Annotation을 사용할 수 있다.

✔️ Mapper 이용 과정
Controller → Service → Mapper(인터페이스) → xml(SQL MapXML)

장점

  • SQL 쿼리를 직접 작성하므로 최적화된 쿼리를 구현할 수 있다.
  • 엔티티에 종속받지 않고 다양한 테이블을 조합할 수 있다.
  • 복잡한 쿼리도 SQL 쿼리만 작성할 수 있다면 손쉽게 작성할 수 있다.

단점

  • 스키마 변경시 SQL 쿼리를 직접 수정
  • 반복된 쿼리가 발생하여 반복 작업
  • 런타임시에 오류를 확인가능
  • 쿼리를 직접 작성하기 때문에 데이터베이스에 종속된 쿼리문이 발생할 수 있다.

JPA

  • Java Persistence API의 약자로 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
  • JAVA ORM 기술에 대한 API 표준 명세로 JPA만 가지고는 해당 기술을 적용할 수 없으며 Hibernate(JPA의 구현체), Spring Data Jpa(JPA를 쓰기 편하게 만들어놓은 모듈) 등 대표적인 오픈 소스를 사용해야 합니다.

✔️ 기존 JPA 과정
Controller → Service → Repository(JpaRepository 상속 인터페이스)

ORM

객체 - 관계 매핑

데이터베이스 데이터 <-- 매핑 --> Object필드

  • 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것
  • 메서드로 데이터를 조작할 수 있다.

JPA, Hibernate, SpringData JPA

장점

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

단점

  • JPA만 사용하여 복잡한 연산을 수행하기 다소 무리가 있다.
  • 초기에는 생산성이 높을 수 있으나 점차 사용하다 보면 성능상 이슈가 발생할 수 있다.(N+1, FetchType, Proxy, 연관관계)
  • 고도화 될수록 학습 곡선이 높아질 수 있다.(해결방안에 따라 복잡한 내부 로직을 이해해할 수도 있다.)
profile
자바 백엔드 개발자로 성장하자

0개의 댓글