티스토리 뷰

JPA

JPA vs Mybatis 차이

절취선 2022. 3. 10. 17:50
반응형

ORM (Object - Relational - Mapping)

객체와 DB를 매핑하는 기술로 객체와 테이블을 자동으로 매핑해서 패러다임의 불일치 문제를 자동으로 해결해준다.
SQL 중심의 매핑이 아닌 자바 클래스 위주의 매핑이다.

####모든 자동 매핑이 ORM은 아니다!
객체와 DB를 자동으로 매핑해준다는 점에서 결국 Mybatis 또한 ORM에 속할지도 모르지만 직접 쿼리를 작성한다는 점에서
SQL 중심의 개발 방식에 가깝기 때문에 ORM 진영에는 반대에 있다고 할 수 있다.

🚀 Hibernate

Hibernate는 JPA의 인터페이스를 구현한 구현체이다.

JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.

🚀 JPA(Java Persistent API)

JPA는 자바 진영의 ORM 기술 표준이며 관계형 데이터베이스자바 객체를 매핑하기 위한 EntityManager 인터페이스를 제공한다.

장점

  • CRUD 쿼리를 자동으로 생성해준다.
  • DB 종류에 상관없이 사용 가능하다.
  • Entity에 속성만 추가해준다면 쿼리를 건들 필요가 없다.

단점

  • 상대적으로 학습이 어렵다.
  • 복잡한 쿼리 작성이 어렵다.
  • 동적 쿼리 같은 복잡한 쿼리를 처리하는 것이 어려우므로 QueryDSL을 함께 이용한다.

🚀 Spring Data JPA

JPA는 인터페이스 다시말해 명세서이며 RDB 환경에서 DB를 어떻게 처리를 해야하는지에 대한 하나의 방법론이다.

이 인터페이스를 유저가 쉽게 다룰 수 있도록 만들어 놓은 모듈Spring Data JPA가 되는 것이다.
기존 EntityManager에서 벗어나 Repository 인터페이스를 사용하여 Spring Framework의 규칙대로 메소드를 입력하여 사용하며
입력된 메소드는 SQL문법에 맞추어 구현체로 만들어 Bean으로 만들어 컨테이너에 저장되게 된다.

🚀 Mybatis

기존의 JDBC에서 볼 수 있는 반복적인 코드 그리고 직접적인 DB관리를 개선하기위해 등장한 프레임워크이다.

Mybatis는 기존 JDBC의 문제점을 개선한 객체지향 언어인 자바의 관계형 데이터베이스 프로그래밍을
좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크이며
Mybatis는 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과를 자동 매핑을 해준다.

장점

  • 학습이 쉽다.
  • 소스코드와 SQL을 분리할 수 있다.

단점

  • 반복적인 작업이 반복된다.
  • DB 변경시 혹은 스키마 변경시 로직도 같이 변경해 주어야한다.

JPA vs Mybatis

  1. 쿼리지향 vs 객체지향

JDBC의 문제점을 보완한 Mybatis는 반복적인 쿼리 작성, 수동적인 테이블 객체 관리의 어려움을 개선해 주었지만
xml파일을 통해 쿼리를 직접 작성해 주어야하는 관점에서 SQL에 직접 쿼리를 보내는 쿼리지향이기 때문에 사용하기가 쉽다.

  1. ORM 사용의 차이

Mybatis가 DB과 연결되기 위해서는 XML 파일을 사용하여 연동해야하며 해당 파일에는 로직에 필요한 SQL쿼리가 작성되어진다.
때문에 ORM보다는 SQL_Mapper에 가까문 명세서로 볼 수 있다.

그러나 JPA의 경우 파일이 아닌 .Class를 작성하여 테이블 객체와 연결하기 때문에 스키마 / DB 프로그램이 바뀌어도 직접 변경 할 필요가 없다.
이는 JPA 인터페이스를 기반으로 모든 작업을 자동으로 처리해주는 이점이 있기 때문이다.
이러한 결과로 JPAMybatis 보다는 비즈니스 로직에 집중해서 개발 할 수 있다.

🧾Reference

MyBatis와 JPA의 차이, MyBatis보다 JPA를 사용해야 하는 이유
ORM이란

반응형

'JPA' 카테고리의 다른 글

SQL Mapper vs ORM  (0) 2022.05.10
JPQL(Java Persistence Query Language)  (0) 2022.05.09
Hibernate  (0) 2022.05.08
영속성 컨텍스트  (0) 2022.05.07
객체지향 쿼리 JPQL  (0) 2022.02.26
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함