개발/Java

[Java] JPA와 MyBatis의 차이(ORM과 SQL Mapper)

Jindory 2022. 4. 13. 00:14
반응형

안녕하세요. 개발자 Jindory입니다.

오늘은 JPA와 Mybatis의 차이에 대해서 알아보는 글을 작성해보고자 합니다.


JPA(Java Persistence API)란?

  • Java ORM의 기술 표준, 대표적인 오픈 소스 Hibernate이다.

ORM(Object-Relational Mapping)

  • 객체 관계 매핑, 객체와 RDB를 별개로 셜계하고 ORM이 중간에서 매핑해주는 역할
  • 즉 ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.
  • 해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어준다.
  • 어떤 RDBM를 사용하는지에 귀속되지 않는다.
  • SQL문이 아닌 ORM에서 제공하는 메서드, 코드 등을 이용하기에 직관적이다.

MyBatis(Java Persistence Framework)

  • MyBatis는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
  • MyBatis는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
  • MyBatis는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 Java POJO를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있다.
  • MyBatis는 자바에서 SQL Mapper를 지원해주는 Framework이다.

SQL Mapper

  • SQL문을 이용하여 RDM에 접근, 데이터를 오브젝트(객체)화 시켜준다.
  • 개발자가 작성한 SQL문으로 해당되는 Row를 읽어 온 후 결과 값을 오프젝트화 시켜 사용가능하게 만들어준다.
  • RDB에 따라 SQL문법이 다르기 때문에 특정 RDB에 종속적이다.

JPA와 MyBatis의 장단점

JPA(ORM)

  • 장점
    1. RDB에 종류와 관계없이 Dialect 설정만으로 사용이 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다.
    2. 기본적인 CRUD 제공과 페이징 처리 등 상당 부분 구현되어 있어 비즈니스 로직에 집중할 수 있다.
    3. 테이블 생성, 변경 등 엔티티 관리가 간편하다.
    4. 쿼리에 집중할 필요가 없어 빠른 개발이 가능하다.
  • 단점
    1. 내용을 이해하기 어렵다.
      • 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, 연관관계 이해 없이 잘못 코딩 했을 시 성능상의 문제와 동작이 원하는대로 되지 않는 일이 발생한다.
        ※ N+1 문제, 연관관계 매핑이 되지 않는 문제....

MyBatis(SQL Mapper)

  • 장점
    1. JPA에 비해 쉽다. SQL 쿼리 그대로 사용하기 때문에 복잡한 Join, 튜닝 등을 좀 더 수월하게 작성 가능하다.
    2. SQL 세부적인 내용 변경시 좀 더 간편하다.
    3. 동적 쿼리 사용시 JPA 보다 간편하게 구현 가능하다.
  • 단점
    1. 데이터베이스 설정 변경 시 수정할 부분이 너무 많다.(Oracle 페이징 쿼리를 MySQL에서 사용 불가능)
    2. Mapper 작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.
    3. 특정 RDB에 종속적이다.

이렇게 JPA와 MyBatis의 차이에 대해서 알아봤습니다.

 

혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.

오늘도 Jindory 블로그에 방문해주셔서 감사합니다.

 

[참조]

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

반응형