반응형
안녕하세요. 개발자 Jindory입니다.
오늘은 JPA와 Mybatis의 차이에 대해서 알아보는 글을 작성해보고자 합니다.
JPA(Java Persistence API)란?
- Java ORM의 기술 표준, 대표적인 오픈 소스 Hibernate이다.
ORM(Object-Relational Mapping)
- 객체 관계 매핑, 객체와 RDB를 별개로 셜계하고 ORM이 중간에서 매핑해주는 역할
- 즉 ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.
- 해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어준다.
- 어떤 RDBM를 사용하는지에 귀속되지 않는다.
- SQL문이 아닌 ORM에서 제공하는 메서드, 코드 등을 이용하기에 직관적이다.
MyBatis(Java Persistence Framework)
- MyBatis는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.
- MyBatis는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정 및 결과 매핑을 대신해준다.
- MyBatis는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 Java POJO를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있다.
- MyBatis는 자바에서 SQL Mapper를 지원해주는 Framework이다.
SQL Mapper
- SQL문을 이용하여 RDM에 접근, 데이터를 오브젝트(객체)화 시켜준다.
- 개발자가 작성한 SQL문으로 해당되는 Row를 읽어 온 후 결과 값을 오프젝트화 시켜 사용가능하게 만들어준다.
- RDB에 따라 SQL문법이 다르기 때문에 특정 RDB에 종속적이다.
JPA와 MyBatis의 장단점
JPA(ORM)
- 장점
- RDB에 종류와 관계없이 Dialect 설정만으로 사용이 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다.
- 기본적인 CRUD 제공과 페이징 처리 등 상당 부분 구현되어 있어 비즈니스 로직에 집중할 수 있다.
- 테이블 생성, 변경 등 엔티티 관리가 간편하다.
- 쿼리에 집중할 필요가 없어 빠른 개발이 가능하다.
- 단점
- 내용을 이해하기 어렵다.
- 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, 연관관계 이해 없이 잘못 코딩 했을 시 성능상의 문제와 동작이 원하는대로 되지 않는 일이 발생한다.
※ N+1 문제, 연관관계 매핑이 되지 않는 문제....
- 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, 연관관계 이해 없이 잘못 코딩 했을 시 성능상의 문제와 동작이 원하는대로 되지 않는 일이 발생한다.
- 내용을 이해하기 어렵다.
MyBatis(SQL Mapper)
- 장점
- JPA에 비해 쉽다. SQL 쿼리 그대로 사용하기 때문에 복잡한 Join, 튜닝 등을 좀 더 수월하게 작성 가능하다.
- SQL 세부적인 내용 변경시 좀 더 간편하다.
- 동적 쿼리 사용시 JPA 보다 간편하게 구현 가능하다.
- 단점
- 데이터베이스 설정 변경 시 수정할 부분이 너무 많다.(Oracle 페이징 쿼리를 MySQL에서 사용 불가능)
- Mapper 작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.
- 특정 RDB에 종속적이다.
이렇게 JPA와 MyBatis의 차이에 대해서 알아봤습니다.
혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.
오늘도 Jindory 블로그에 방문해주셔서 감사합니다.
[참조]
반응형
'개발 > Java' 카테고리의 다른 글
[Java] Collection Framework(List,Set,Map) (0) | 2022.04.17 |
---|---|
[Java] Java 접근제한자/public,protected,default,private (0) | 2022.04.15 |
[Java] Java8의 변경사항 (0) | 2022.04.12 |
[Java] 함수형 인터페이스(Functional Interface)란? (0) | 2022.04.09 |
[Java] POI로 데이터 엑셀 다운받기 (0) | 2022.03.22 |