본문 바로가기
JAVA/JPA

JPA와 MyBatis의 차이 (ORM과 SQL Mapper)

by 소라둥이 2020. 3. 2.

JPA (Java Persistence API)

- 자바 ORM의 기술 표준, 대표적인 오픈 소스가 Hibernate이다.

 

ORM(Object-relational mapping)

- 객체 관계 매핑, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할

즉, ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.

해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어준다.

이로인해 어떤 RDB를 사용하던 상관 없다.

SQL문이 아닌 ORM에서 제공하는 메서드, 코드 등을 이용하기에 직관적이다.

 

 

 

 

MyBatis (Java Persistence Framework)

- 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다. ( MyBatis 공식 홈페이지 소개 )

 

MyBatis는 자바에서 SQL Mapper를 지원해주는 Framework이다.

즉, SQL 작성을 직접 하여 객체와 매핑시켜준다.

 

추가: 프로시저(PL/SQL 같은 친구들), POJO(순수 자바코드, 즉 직접 만든 엔티티(class)), 원시타입(기본형)

 

SQL Mapper

- SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다.

개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다.

즉, RDB에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다.

 


사용하면서 느꼈던 장단점

 

JPA(ORM)

- 장점

1) RDB에 종류와 관계없이 사용 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다.

2) 기본적인 CRUD 제공과 페이징 처리 등 상당 부분 구현되어 있어 비지니스 로직에 집중할 수 있다.

3) 테이블 생성, 변경 등 엔티티 관리가 간편하다.

4) 쿼리에 집중할 필요 없어 빠른 개발이 가능하다. 
  - SQL을 몰라도 된다는 뜻은 아니다. JPA는 SQL을 잘할수록 훨씬 더 잘 사용할 수 있다.
    위 말의 뜻은 select * from user 같은 쿼리를 직접 작성할 필요 없이 Java 코드로 간편하게 사용할수 있다는 뜻

 

- 단점

1) 어렵다.

: 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, 연관관계 이해 없이 잘못 코딩 했을 시 성능상의 문제와 동작이 원하는대로 되지 않는 일이 발생한다.

ex) Board 엔티티에 List의 형태로 Reply 엔티티가 있을 시, 단방향 연관관계인 경우 하나의 reply가 변경되어도 모두 삭제되고 다시 전부 insert되는 경우

하나의 Board 조회 시 reply를 Join이 아닌 여러개의 select문으로 하나하나 읽어오는 문제

 

MyBatis(SQL Mapper)

- 장점

1) JPA에 비해 쉽다.

 : SQL 쿼리를 그대로 사용하기에 복잡한 Join, 튜닝 등을 좀더 수월하게 작성 가능하다.

2) SQL의 세부적인 내용 변경 시 좀 더 간편하다.

3) 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다.

 

- 단점

1) 데이터 베이스 설정 변경 시 수정할 부분이 너무 많다. (Oracle의 페이징 쿼리를 MySQL에서 사용 불가능!)

2) Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.

3) 특정 DB에 종속적이다.