본문 바로가기
Back-end

MyBatis Vs. JPA

by sgyeong 2024. 4. 5.

Java 기반의 Spring 또는 Springboot에서 데이터베이스를 사용하려면 MyBatis 또는 JPA를 사용해야 한다.

 

두 가지 방식의 차이점에 대해 알아보았다.

 

  • MyBatis

    MyBatis는 데이터베이스와 연동 하기 위해 SQL Mapper기술을 제공한다.
    SQL Mapper는 개발자가 작성한 SQL 실행 결과를 객체에 매핑시켜주는 프레임워크이다.
    MyBatis 프레임워크는 Java 소스코드에서 SQL문을 분리하여 별도의 XML파일로 저장하고, 이 둘을 연결시켜주는 기능을 제공한다. Java코드와 SQL간에 매핑을 시켜서 MyBatis가 자동으로 그 둘을 연결시켜 준다.
    SQL문을 별도로 Java코드에서 분리해서 관리가 편하게 하였으며, 분리된 SQL문을 MyBatis가 찾아서 실행해주는 기능을 한다.
    MyBatis 내에 if, choose, when, otherwise, foreach 등의 문법을 지원해서 동적인 SQL문 생성이 가능하다.

    MyBatis의 장점

    1) SQL을 직접 제어할 수 있다.
    개발자가 SQL을 직접 작성하고 최적화할 수 있으며, 복잡한 쿼리 또는 특정 데이터베이스에 최적화된 쿼리 작성이 필요한 경우에 적합하다. 

    2) 학습이 용이하다.
    SQL을 잘 아는 경우에 JPA에 비해 학습이 용이하고 쉽게 사용이 가능하다. 


    MyBatis의 단점

    1) CRUD와 같은 단순 작업에 반복적인 수작업이 필요하다.
    SQL을 직접 만들어야 하므로 CRUD같은 기본적인 코드에 대해 단순 반복적인 코드를 계속 만들어야 하는 단점이 있다. 단순한 코드를 반복해서 만들면 개발 생산성이 떨어지고, 코드에 대한 유지보수가 힘들다.

    2) 데이터베이스에 종속적이다.
    특정 DB를 기준으로 SQL문이 작성되어 있어서, DB를 변경하려면 SQL문을 전체 다 확인한 후 수정해야 한다.

 

 

  • JPA (Java Persistence Api)

    JPA는 데이터를 데이터베이스에 저장하기 위해 ORM기술을 제공한다. 
    ORM 기술은 객체와 DB의 데이터를 자동으로 매핑시켜준다.
    JPA는 SQL문을 자동으로 생성해주고, DB데이터와 Java객체를 매핑시켜준다. 개발자는 SQL문을 작성할 필요가 없어지고, DB가 바뀌어도 DB에 따라 새로운 SQL을 작성할 필요가 없이 Hibernate에서 DB에 맞는 적합한 SQL문을 생성해준다.


    JPA의 장점

    1) Java에서의 ORM을 위한 표준화된 인터페이스를 제공한다.
    개발자 간에 협업이 용이하고, 일관된 방식의 개발을 할 수 있다.

    2) 자동 매핑으로 개발 및 유지보수성이 좋다.

    3) 객체지향적인 개발에 중점을 두기 때문에 테이블 간의 연관 관계와 객체 간의 연관 관계를 쉽게 다룰 수 있다.

    4) DBMS에 독립적이다.
    사용하는 DB 종류에 관계없이 JPA에서 자동으로 적합한 SQL을 만들어주기 때문에, DB가 변경되어도 SQL문을 다시 작성할 필요가 없다.


       JPA의 단점

       1) MyBatis에 비해 학습하기 어렵다.

        2) 복잡한 SQL을 생성하는데 용이하지 않다.
        복잡한 쿼리를 만드는데 여러 테이블을 Join해서 데이터 결과를 가져와야 하는 경우에 어렵다.

         3) 성능에 대한 고려가 필요하다.
         자동화된 SQL문으로 인해서 데이터 조회 성능이 떨어질 가능성이 있다. 데이터가 많아지고, 테이블간 Join이 많아지는 경우, SQL문을 어떻게 튜닝하는가로 인한 성능이 차이날 수 있으므로 그러한 부분을 고려해야 한다.

 

 

 

 

참고 :  https://www.elancer.co.kr/blog/view?seq=231

 

JPA vs Mybatis, 현직 개발자는 이럴 때 사용합니다. I 이랜서 블로그

서버에서 데이터 베이스를 효율적으로 사용하기 위해 사용하는 JPA와 Mybatis를 실무에서는 언제 어떻게 사용할까요? 이랜서에서 알려드립니다. I 소트프웨어, 소프트웨어 개발자, 네이버 소프트

www.elancer.co.kr