[JPA vs MyBatis] 특징 및 장단점 정리(+사용후기)

김민주·2023년 5월 31일
2

SSAFYcial

목록 보기
8/8
post-thumbnail

안녕하세요🖐️ 쭈피셜입니다🌿

오늘은 JPA와 MyBatis의 차이점에 대해 소개하려고 합니다.

1학기 파이널 프로젝트를 진행하면서 JPA와 MyBatis 두가지를 혼용한 팀은 저희 반에서는 저희 팀밖에 없었는데요!

JPA와 MyBatis의 각각의 특징, 장단점에 대해 알아보고 프로젝트 사용 시 느꼈던 후기까지 기록해보고자 합니다!


먼저 JPA와 MyBatis를 알아보기 전에,
DB에 상호작용 하는 방식 ORMSQL Mapper에 대해 알아보겠습니다.


SQL Mapper

개발자가 직접 SQL 쿼리를 작성하고 매핑하는 방식

개발자는 쿼리와 데이터베이스 간의 매핑을 명시하며, 직접 상호작용하기 때문에 섬세한 제어가 가능합니다.
원하는대로 최적화가 가능하고, 복잡한 쿼리나 성능 튜닝이 필요한 경우 유용합니다.

대표적인 SQL Mapper 프레임워크로 MyBatis가 있습니다.

ORM (Object-Relational Mapping)

객체와 데이터베이스간의 매핑을 자동화하는 방식

개발자는 객체를 사용하여 데이터베이스 작업을 수행하고, ORM이 객체와 테이블간의 매핑을 처리합니다.
개발자가 SQL를 직접 작성하지 않고도 객체를 사용하여 CRUD작업을 수행할 수 있습니다.
객체지향적인 개발방식을 지원하며, 지연로딩, 트랙잭션관리 등의 기능을 제공합니다.

대표적인 ORM 프레임워크로는 Spring Data JPA가 있습니다.



MyBatis

XML이나 Annotation을 통하여 SQL문을 작성하고 객체들을 연결시키는 프레임워크

xml방식은 SQl매퍼를 XML파일에 작성하며 <select>... <resultMap> 등의 요소로 작성합니다.
어노테이션 방식은 @Select처럼 자바 어노테이션을 활용하여 SQL 매퍼를 작성합니다.


장점 👍

직관적인 매핑

  • 상대적으로 매핑대상이 직관적이고 명확합니다.

세밀한 제어

  • 직접적인 SQL제어로 복잡한 쿼리나 성능 튜닝에 유용합니다.

유연한 SQL 작성

  • 동적 쿼리처럼 복잡한 쿼리 처리가 가능합니다.

단점 👎

복잡한 매핑

  • 개발자가 직접 객체와 관계 매핑을 처리해야 합니다.

반복적인 코드

  • CURD 작업을 자주 수행 시 비슷하거나 같은 코드를 반복적으로 작성 시 번거롭고, 양이 많아집니다.


JPA (Java Persistence API)

JPA 어노테이션을 사용하여 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의

1차캐시, 2차캐시, 지연로딩등을 통해 데이터베이스 액세스 성능에 대한 기능을 제공합니다.
지연로딩을 통해 연관된 엔티티를 필요로 할 때까지 데이터베이스 접근을 지연시킵니다. 불필요한 데이터베이스 액세스를 피하고 성능을 향상시킬 수 있습니다. 보통 지연로딩을 기본으로 설정하게 되고 이는 어노테이션을 통해 관리합니다.
또한, JPA는 컴파일타임에 스키마와의 일치성과 구문 오류를 확인할 수 있습니다.


장점 👍

객체 지향적

  • 객체를 사용하여 데이터베이스에 접근하고, 상속 관계, 다형성 등 객체지향 개념을 활용할 수 있음

자동 매핑

  • 개발자가 직접 SQL쿼리문 작성할 필요가 없음. JPA 어노테이션을 사용하여 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의함

Easy CRUD

  • CRUD(Create, Read, Update, Delete) 작업을 간편하게 처리할 수 있는 기본 API를 제공함.

생산성 향상

  • 매핑작업이 자동화되고 수정이 간단하기 때문에 개발자의 생산성을 향상시킬 수 있습니다.

유지보수 용이

  • 객체와 데이터베이스 간의 매핑을 자동으로 처리하기 때문에 데이터베이스 스키마 변경에 대한 유연성이 뛰어나 객체 모델만 수정하면 됩니다.

단점 👎

성능 이슈

  • 복잡한 쿼리나 대량의 데이터를 처리하는 등 성능이 중요한 상황에서는 직접 SQL을 작성하는 것이 더 효율적일 수 있습니다.

제한된 데이터베이스 지원

  • 대부분의 데이터베이스를 지원하지만 MyBatis에 비하면 지원되지 않는 데이터베이스들이 있습니다.

러닝 커브가 있는 편

  • JPA를 제대로 사용하기 위해 올바른 매핑 어노테이션과 설정을 익히는데에 시간이 걸릴 수 있습니다. 또한, 양방향과 연관관계 이해에 대한 학습을 해야합니다.



프로젝트 회고

1학기 파이널 프로젝트 사용 툴 - Spring JPA MyBatis MySQL Vue

이번 프로젝트를 하면서 느꼈던 MyBatis의 장점은 일단 직관적으로 원하는 값을 얻기 쉽다는 것이었습니다. 하지만 비슷한 코드나 간단한 CRUD작업을 JPA는 자동적으로 제공해주는 반면, 간단한 기능도 코드를 길게 계속 추가를 해야하는 것이 번거로웠습니다.

진행하면서 초기 데이터베이스 설계에서 추가되거나 변경사항이 많았었는데 테이블이나 스키마의 변경이 JPA는 자동적으로 적용되니까 그 부분에서 정말 편리하였습니다. create나 update도 따로 지정할 수 있어서 필요할 때마다 바꾸어서 덕분에 시간적으로 많이 절약했다고 생각합니다. 또한, 알아서 매핑해주기 때문에 잘만 사용하면 오류를 현저히 적게 발생시킬 수 있다고 생각하였습니다.

다만 프로젝트의 짧은 준비기간으로, JPA에 대한 깊은 공부를 하지 않고 사용하였어서 어노테이션 및 흐름에 있어서 이해를 하는데에 어려움이 크긴 했습니다. 1:N 관계에서 순환참조나 참조무결성같은 오류를 발견하였고 해결하기 위해 시간을 더 내어 공부를 해보았습니다.




이상으로 MyBatis와 JPA의 차이점에 대해서 알아보았습니다!

세밀한 제어가 필요하거나 SQL 중심적인 개발 방식을 선호한다면 마이바티스를,
ORM의 장점을 느끼고 매핑작업을 간편하게 처리하여 개발 시간을 단축하고 싶다면 JPA를 사용해보세요😊

profile
𝐃𝐨𝐧'𝐭 𝐛𝐞 𝐚 𝐩𝐫𝐨𝐜𝐫𝐚𝐬𝐭𝐢𝐧𝐚𝐭𝐨𝐫💫

4개의 댓글

comment-user-thumbnail
2023년 7월 4일

그립습니다 쭈피셜

1개의 답글
comment-user-thumbnail
2023년 7월 18일

쭈피셜 돌아와..아니 돌아오지마..아니 돌아와..😭

1개의 답글