[Spring] MyBatis vs JPA

Yeara Choi·2025년 1월 17일

HGU-Web-Camp

목록 보기
3/4
post-thumbnail

웹 애플리케이션을 개발할 때 주로 사용되는 프레임워크는 Java 기반의 spring과 spring boot이다. 백엔드에서 데이터를 저장하고 조회할 때 데이터베이스를 활용하게 되는데, 데이터베이스를 사용하기 위해 대표적인 프레임워크인 MyBatisJPA 기술이 사용된다.

MyBatis와 JPA 모두 DB연동, 저장을 위한 기술이지만 서로 다른 접근법을 가진다. MyBatis는 SQL Mapper 기술을 제공하며, JPA는 ORM(Object Relational Mapping) 기술을 제공한다.

해당 포스트는 데이터베이스를 효율적으로 사용하기 위한 MyBatis와 JPA 기술을 각각 정리해보려고 한다.

MyBatis

MyBatis는 반복적인 JDBC 프로그래밍을 단순화하여 객체지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 쉽게 할 수 있게 도와주는 프레임워크이다.

  • 개발자가 작성한 SQL 문을 Java 객체로 자동으로 매핑 시킨다.
  • JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거한다.
  • 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있어 관리가 용이하다.
  • Java 소스코드에서 SQL 문을 분리하여 별도의 XML 파일로 저장하고, 이 둘을 자동으로 연결시켜주는 기능을 제공한다. (Java 메소드와 SQL 간의 매핑하고, 분리된 SQL문을 MyBatis가 찾아 실행)

MyBatis 특징

  • 개발자는 Java 메소드 선언과 SQL 문만 만들면 MyBatis가 자동으로 연결시켜 빠른 개발이 가능하며 생산성이 향상된다.
  • 복잡한 쿼리나 다이나믹한 쿼리에 강하다.
  • 기존 SQL 문장이 Java 코드 내에 함께 존재하던 방식과 달리, Java 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성이 향상된다.
  • resultType, resultClass등 Vo를 사용하지 않고 조회결과를 사용자 정의 DTO, MAP 등으로 맵핑하여 사용할 수 있다.

다음으로는 JPA(Java Persistence API)에 대해 알아보겠다.

JPA

JPA는 Java 객체와 관계형 데이터베이스 간의 매핑을 위한 프레임워크이다. JPA는 ORM(Object-Relational Mapping)을 구현하는 자바 표준 스펙으로, 개발자가 객체지향 프로그래밍 언어에서 사용하는 객체 모델과 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해 준다.

MyBatis와 같이 SQL 문과 Java 코드를 연계하는 방식이 아니라 Java 객체DB 엔티티(테이블) 자체를 그대로 매핑해서 처리할 수 있는 접근 방식이다.

데이터베이스는 데이터 중심의 구조를 가지고 있고, Java는 객체지향적인 구조로 관리되기 때문에 둘 사이에 데이터를 직접적으로 쉽게 가져오거나 저장하는 방법은 어려웠다. 이 문제를 해결하기 위해 JPA는 ORM 기술을 사용한다.

ORM(Object Relational Mapping)은 객체와 관계형 데이터베이스(테이블) 간의 데이터를 매핑하기 위한 기술이다. 객체 지향 프로그래밍에서 사용되는 객체와 관계형 데이터베이스에서 사용되는 테이블 간의 차이를 해결하기 위해, 객체와 데이터베이스 간의 매핑을 자동으로 수행한다.

Java 개발자가 좀 더 객체지향 관점에서 개발할 수 있게 하고, 개발을 용이하게 해주어서 DB와 Java 간의 불일치를 해소할 수 있다.

JPA 특징

  • MyBatis와 다르게 SQL 문의 작성이 불필요하며 ORM 내부적으로 java 메소드에 적합한 SQL 문이 자동으로 생성되어 실행된다.
  • 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다.
  • 객체와 관계형 데이터베이스 간의 매핑을 손쉽게 처리할 수 있으며 데이터베이스의 CRUD(Create, Read, Update, Delete) 작업을 간편하게 수행할 수 있다.
  • SQL아닌 객체 중심으로 개발할 수 있어, 생산성이 좋아지고 유지보수도 수월하다.

어떤 프레임워크를 사용해야 할까?

복잡한 쿼리와 SQL 제어가 필요한 경우는 MyBatis로 개발할 수 있다. 기존 SQL 경험이 풍부하거나, 특정 데이터베이스에 최적화된 SQL 작성이 필요한 경우는 MyBatis를 선택할 수 있다.

간단한 매핑 및 객체 지향적인 접근이 필요한 경우는 JPA가 SQL작성 등의 반복적인 부분을 해결해 준다. 표준화된 인터페이스와 자동 매핑이 중요하며, 다양한 데이터베이스에 대응해야 하는 경우는 JPA를 선택하면 DB가 변경되더라도 유동적인 이동이 가능하다는 장점이 있다.




참고 링크 🙇🏻‍♂️
https://dbjh.tistory.com/77
https://velog.io/@cyseok123/MyBatis
https://www.elancer.co.kr/blog/detail/231

0개의 댓글