안녕하세요! 오늘은 Mybatis와 JPA의 개념 및 차이점에 대해 알아보도록 하겠다.
1. 공통점
JPA와 Mybatis는 둘 다 애플리케이션과 DB간의 상호작용을 관리하는 '프레임워크' 이다. 두 프레임워크는 각각 다른 접근 방식을 가지고 있다.
2. 개념
1) JPA
먼저 JPA (Java Persistence API)는 객체-관계형 매핑 프레임워크이다. 흔히 ORM이라고 불린다. JPA는 데이터베이스의 테이블과 자바 객체 간 매핑을 자동으로 처리해준다.
대신 JPA는 자바 애플리케이션에서 관계형 DB를 사용하게 해주는 '명세'이므로, 개발자가 직접 구현체를 정의 해주어야한다. 대표적인 JPA 구현체는 Hibernate라는 ORM 프레임워크가 있다.
JPA의 큰 특징이라 함은 SQL을 직접 작성하지 않고, 간단한 CRUD는 인터페이스 구현체를 바로 호출하여 사용할 수 있다.(persist, remove, find 등) 물론, EntityManager의 createQuery 메소드로 직접 JPQL을 작성할 수도 있다.
2) Mybatis
Mybatis는 SQL 쿼리와 자바 객체를 매핑하는 프레임워크이다. Mybatis는 JDBC 코드를 추상화하여 개발자가 데이터베이스 커넥션에 대해 신경쓰지 않고 SQL 쿼리 작성에 더욱 집중할 수 있도록 도와준다.
Mybatis는 XML 파일이나 어노테이션을 사용하여 SQL 쿼리와 자바 객체의 매핑 관계를 정의한다.
3. 장 · 단점
1) JPA
장점)
1. 객체-관계형 매핑이 자동으로 처리됨
2. 추상화된 CRUD 메서드를 사용하여 데이터베이스 작업 용이
3. 유지보수 용이
4. 생산성 향상
단점)
1. 복잡한 SQL 쿼리 작성이 어려움 (불가능하지 않음 queryDSL이나 JPA+Mybatis 혼용으로도 사용가능)
2. 사전지식이 필요함.
-> 데이터베이스 및 SQL에 대한 기본지식 & 객체지향 프로그래밍 등 선수지식이 필요할 수 있음.
4. 결론 및 개인 의견
JPA가 더 좋네~, Mybatis가 더 좋네~ 이런 개념은 확실히 아닌 것 같다. JPA는 객체-관계 매핑을 자동으로 처리하고 싶을때 사용하고, Mybatis는 SQL에 대해 직접 관리하고, 더욱 복잡한 쿼리를 다룰 때 사용하면 좋다. (다시 말하지만, JPA도 복잡한 쿼리 다룰 수 있음.)
필자는 전 직장 프로젝트에서 많은 데이터와 데이터 가공을 진행하였고, 자연스럽게 복잡한 쿼리를 많이 접했다. 이러한 프로젝트 특성상 Mybatis를 사용했다.
개인적으로 Mybatis를 선행해서 그런지 프로젝트 수행 시, 복잡한 쿼리를 직접 짰었고, 이로 인해 JOIN 및 좋은 성능의 쿼리를 많이 접하고 배웠다. 그 후 JPA를 배우고 프로젝트를 진행하면서 JPA에 적응하기에 훨씬 수월하다는 느낌을 받았다.
※ 위의 정보 중 잘못된 정보가 있거나 추가적으로 의견주실 내용이 있다면 언제든지 환영입니다! 긴 글 읽어주셔서 감사합니다! (꾸벅)
'웹 개발 공부 : Back-end > JPA' 카테고리의 다른 글
[JPA 프로젝트 회고 - 5] JPA에서 DTO를 사용하는 이유 (feat. 코드 보안을 위해 수정) (0) | 2024.08.19 |
---|---|
[JPA 프로젝트 회고 - 4] java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ~ 에러 (0) | 2024.08.10 |
[JPA 프로젝트 회고 - 3] 영속성 컨텍스트 (Persistence Context) (0) | 2024.08.09 |
[JPA 프로젝트 회고 - 2] 레포지토리 (Repository) (0) | 2024.07.27 |
[JPA 프로젝트 회고 - 1] 엔티티 (Entity) (0) | 2024.07.24 |