[Spring] Mybatis vs JPA

Chanyoung Park·2024년 3월 29일

Spring

목록 보기
1/1

들어가며

  • Spring Boot는 자바 기반의 백엔드 프레임워크로, DB에 데이터를 저장하고 꺼내올 수 있는 기술에 대해 알아봅니다.
  • Spring은 Java언어로, DB는 SQL이라는 언어로 구분되어 있지만, 두 시스템간의 데이터 통신을 가능하게 하는 Mybatis기술과 JPA라는 기술을 알아봅니다.

MyBatis

  • MyBatis, Spring boot에서 DB와 통신하기 위해 Java로 구현된 메소드와 SQL문으로 작성되어 있는 SQL문을 mapping하는 기술입니다.
  • @Mapper어노테이션이 적용되어 있는 클래스 내의 메소드와 xml파일로 작성되어 있는 SQL문을 자동으로 매핑해줍니다.

JPA

  • Java Persistence Api, Java객체와 DB간의 매핑을 위한 기술로 ORM(Object Relational Model)이라고 불립니다.
  • Mybatis와는 다르게 SQL문을 직접 작성할 필요가 없는데, 이를 가능하게 하는 것이 hibernate라는 프레임워크입니다.
  • 개발자가 작성한 Student객체의 내용을 JPA가 자동으로 분석하여 DB Table Entity에 맞는 SQL문을 자동으로 생성해줍니다.

Mybatis vs JPA

Mybatis, SQL문의 작성이 가능한 것이 장점이자, 단점입니다.

  • Mybatis는 SQL문 작성을 통해 통계, 분석과 같이 테이블간의 조인이 많고 DB성능이 중요시 되는 경우에 이점이 있습니다.
  • 다만, CRUD와 같이 단순한 작업에도 모든 SQL문을 작성해주어야 하고, 개발의 변경사항에 SQL문도 수정해주어야 하는 번거로움이 존재합니다.

JPA, SQL문의 작성을 하지 않는 것이 장점이자, 단점입니다.

  • JPA는 SQL문을 작성하지 않아도 되어, CRUD와 같은 단순작업의 SQL작성을 SKIP하게 해주고, Java 객체만 신경써도 되는 이점이 있습니다.
  • 다만, 자동으로 SQL문을 작성해주기에 복잡한 테이블 연관관계에 DB성능저하의 단점이 있고, 대표적으로 N+1문제가 존재합니다.
  • 이러한 문제점의 발생원인과 요소를 파악할 수 있을 만큼 학습이 필요합니다.
    • 즉시로딩, 지연로딩, 영속성 전이 등

N+1?

  • N+1이란, A객체와 B객체가 연관(즉시로딩)되어 있을 때, A객체의 데이터만 조회했지만 A객체와 연관된 B객체의 데이터를 모두 찾는 문제입니다. (1:N 관계에서 발생)
  • 예시) A객체 10개 데이터, B객체 10개 데이터
    • A객체 1번 조회 (10개 데이터)
      • A 10개 데이터에 대해서 B객체 10번 조회 => A 1번 + B 10번 (1+N)
    • 해결방법은 @Entitygraph를 사용하면 된다는데, 자세한 내용은 이곳에서 확인.

결론

  • Mybatis 와 JPA의 장단점은 모두 SQL문입니다.
  • 개발 상황, 업무상황에 따라 적절히 하이브리드하게 사용하는 것이 적절하다고 생각합니다.
    • 단순 개발이 많고, 변경사항이 많다 -> JPA
    • 통계, 복잡한 테이블 관계, DB성능 중요 -> Mybatis

참고사이트

profile
더 나은 개발경험을 생각하는, 프론트엔드 개발자입니다.

0개의 댓글