[JAVA] ORM, JPA, Hibernate, Mybatis, SQL Mapper 용어 정리 :: 매운코딩
728x90
300x250

DB를 다루기 위한 기술인 ORM, JPA, Hibernate, Mybatis등에 대하여 용어를 정리하겠다.

 

간단하게 얘기하자면

ORM은 객체를 매핑하는 역할이며 대표기술은 JPA가 있고,

Hibernate가 ORM 프레임워크 중 하나이다. 

SQL Mapper는 쿼리를 매핑하는 역할을 하며, Mybatis와 ibatis등의 기술이 있다.

Mybatis와 ibatis는 ORM이 아니다.

 

MyBatis는 Java 코드와 직접 작성한 SQL 코드를 Mapping 시켜주는 반면 Hibernate는 SQL을 직접 작성하지 않고 표준 인터페이스 기반으로 처리한다는 점

 

---------------------------------------------------------------------------------------------------

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에 종속적이다.

 

출처 - dreaming-soohyun.tistory.com/entry/JPA%EC%99%80-MyBatis%EC%9D%98-%EC%B0%A8%EC%9D%B4-ORM%EA%B3%BC-SQL-Mapper

 

---------------------------------------------------------------------------

 

* JPA의 장점

JPA를 사용하면 단순반복인 CRUD작업에 대하여 자동생성이 되기때문에 불필요한 작업을 제거시켜주어 편리하다.

또한, SQL Mapper를 사용하게되면 패러다임 불일치현상이 불가피하다. 

패러다임 불일치란 관계형 DB와 객체지향 프로그램이 서로 다르기에 App.이 DB 모델링 기반에 맞추어서 DB모델링 중심으로 되는 문제를 일컫는다. (db에서 user클래스에 속한 group클래스를 가져오기 위해서는 user.getGroup이 안되고, user 먼저 db에서 select하고 그 user를 통해 group을 또 따로 select해야 한다.)

 

* JPA의 구조

Spring에서는 Hibernate 구현체를 직접적으로 다루지 않고, Spring Data JPA라는 모듈을 이용하여 JPA기술을 이용한다.

이유는 Hibernate외에 다른 구현체로 쉽게 교체가 가능하고 (ex. Spring Data JPA -> Spring Data redis)

관계형 DB외의 다른 저장소로 쉽게 교체가 가능하기 때문이다. (ex. Spring Data JPA -> Mongo DB)

Spring Data 하위의 프로젝트들은 CRUD 인터페이스가 동일하기 때문에 변경할 것이 적어서 유지보수가 좋다.

 

 

 

* 예제

SQL Mapper와 Hibernate의 예시에 대하여 구분할 수 있게 아래의 블로그가 잘 정리를 해두었다.

mangkyu.tistory.com/20

 

[ORM] ORM(Object Relation Mapping)이란?

오늘은 개발을 편리하게 해주는 ORM에 대해 알아보도록 하겠습니다. 1. ORM(Object Relation Mapping)이란? [ ORM(Object Relation Mapping)이란? ] ORM이란 객체(Object)와 DB의 테이블을 Mapping 시켜 RDB 테이..

mangkyu.tistory.com

 

728x90

+ Recent posts