JPA vs MyBatis 장단점? 차이?
JPA와 MyBatis의 장단점으로 차이를 알아보고자 한다.
JPA
JPA는 JAVA ORM(Object Relational Mapping) 기술에 대한 API 표준 명세이며 Spring Data JPA를 통해 사용한다.
DB 데이터와 Object와 매핑시킨다.
- 장점
1. MySQL, MS-SQL, Oracle등 RDB에 종속적이지 않다.
→ 각 DB별 특정 쿼리를 작성할 필요없다.
2. 쿼리를 직접 작성할 필요없고, 기본적인 CRUD을 제공하기 때문에 빠른 개발이 가능하다.
(SQL문) Select * From User where Email= "~" → (Repository) findByEmail("~");
3. 테이블이 변경되면 엔티티만 변경하면 되기 때문에 간편하게 수정을 할 수 있다.
- 단점
1. 이해해야할 기술 내용들이 많아 학습하는데 오래 걸린다.
2. 복잡한 쿼리문을 사용할 때 어려움이 있다.
→ JPQL, QueryDSL를 사용하면 직접 SQL문을 쓸 수 있다.
MyBatis
MyBatis는 SQL Mapper이고 SQL과 Object와 매핑을 시킨다.
- 장점
1. JPA와 다르게 쉽고 SQL문을 직접 쓰기 때문에 복잡한 쿼리문에 능하다.
- 단점
1. DB나 테이블이 변경되면 수정해야 하는 부분이 많다.
→ DB 변경 시 해당 DB에 맞는 로직으로 전체적인 수정이 필요하다.
2. JPA와 다르게 상당히 많은 파일들과 설계하는데 복잡하다.
3. 특정 데이터베이스에 종속되어 있다.
Mybatis과 JPA를 같은 로직으로 만들었을 때
기본 세팅으론 JPA가 엄청 간단했었고 Mybatis는 파일도 워낙 많고.. 그냥 모든게 복잡했다.
세팅 이후 JPA가 사용하기 편하고 프로젝트에서 작성 시간 효율이 뛰어났지만 어느부분에서 막히면 해결하는데 어려움이 있다. 특히 막히는 부분은 심화응용할 때 또 찾아보고 이해하고....!! 숙련하는데 오래걸린다. 이 부분에서는 확실히 Mybatis이 편했다.
하지만 JPA에서도 JPQL, QueryDSL로도 복잡한 쿼리를 지원하고 모든면이 우수하기 때문에 JPA를 우선으로 학습하는게 좋다고 본다!