SQL Mapper 와 ORM 기술의 차이

Persistence Framework란?

Layered Architecture
[그림 1] Layered Architecture ( 출처 참고1 )

SQL Mapper와 ORM 기술에 대해 알아보기 전에 Persistence Framework에 대해 알아보자.

 

영속성(Persistence)은 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 뜻한다.  [그림 1]에서 보이는 Persistence 계층이 Domain Model 계층에 영속성을 부여하는 역할을 한다. 자바에서는 JDBC를 통해 영속성을 부여할 수 있다.

하지만 JDBC는 중복된 코드를 반복적으로 사용하거나 Connection과 같은 공유 자원 관리가 까다로운 등 여러 가지 단점이 있다.

 

이러한 JDBC 프로그래밍의 복잡함이나 번거로운 작업 없이 간단한 작업만으로  Persistence 계층을 구현할 수 있는 Persistence Framework들이 존재한다. 대표적으로 SQL Mapper 나 ORM 기술이 바로 Persistence framework의 일종이다.

 

 

참고)

 

 

[Spring] JDBC(Java Database Connectivity)란? JDBC 드라이버란?

JDBC의 등장 배경 애플리케이션 서버에서 DB를 연결하기 위해선 어떤 동작이 필요할까? 1. 커넥션 연결 : 주로 TCP/IP를 사용해 애플리케이션 서버와 DB서버가 연결된다. 2. SQL 전달 : 애플리케이션 서

code-lab1.tistory.com

 

 

SQL Mapper란?

MyBatis
[그림 2] MyBatis ( 출처 : 참고2 )

 

SQL Mapper는 개발자가 직접 SQL문을 작성해 데이터베이스 데이터를 다루는 Persistence Framework이다. 객체와 테이블 간의 관계를 직접 매핑하는 것이 아닌, SQL문을 실행해 쿼리 수행 결과를 어떤 객체에 매핑할지 바인딩 하는 방법이다. 따라서 DBMS에 종속적인 방법이라고 할 수 있다. 대표적으로 MyBatis가 있다.

 

 

장점

  • JDBC를 사용할 때  발생하는 불편함을 줄일 수 있다.
  • SQL이 비즈니스 로직과 분리되어 유지보수가 용이하다.
  • 세부적인 SQL 변경시 편리하다
  • 기존에 SQL문법을 그대로 적용할 수 있어 새로운 기술을 학습하지 않아도 된다.

 

단점

  • DBMS 별로 SQL 문법이 다르다.
  • 개발자가 직접 SQL문을 작성해야 한다.
  • DBMS 변경시 SQL문을 재사용하기 어렵다.
  • 객체와 테이블간 패러다임 불일치가 발생한다.

 

 

 

ORM (Object Relation Mapping)

 

JPA
[그림 3] JPA

 

ORM 기술은 객체(Object)와 DB테이블을 매핑하여 데이터를 객체화하는 기술이다. ORM은 SQL문의 수행 결과를 매핑하는 것이 아닌 DB 테이블의 데이터 그 자체와 객체를 매핑한다. 또한 개발자가 직접 SQL을 작성하지 않아도 자동으로 SQL문을 만들어내기 때문에 DBMS에 종속적이지 않다. 대표적으로 JPA가 존재한다.

 

 

장점

  • 개발자가 SQL문을 직접 작성하지 않아도 된다.
  • SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있다.
  • DBMS에 종속적이지 않다.

 

 

단점

  • 직접 SQL을 작성하는 것보다 성능이 떨어질 수 있다.
  • 사용하기 위해서는 ORM 기술을 학습해야 하는 러닝커브가 존재한다.
  • 메서드 호출로 DB 데이터를 조작하기 때문에 세밀함이 떨어진다. (이를 위해 JPQL 등을 이용할 수 있다)
  • N+1 문제가 발생할 수 있다. (이에 대해서는 추후 자세히 기술해보겠다)

 

 


참고

 

1. https://herbertograca.com/2017/08/03/layered-architecture/

2. MyBatis 공식 홈페이지:  https://blog.mybatis.org/

3. https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4

 

 

반응형

댓글

Designed by JB FACTORY