ORM, SQL Mapper 차이

Minsu Kang·2021년 1월 11일
3

데이터베이스

목록 보기
3/4
post-custom-banner

ORM(JPA)

ORM이란?

ORM은 데이터베이스를 객체로 매핑함으로써 객체 간의 관계를 바탕으로 테이블을 만들고 관리하는 것을 말한다.

ORM의 장점

  • ORM을 사용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어서 개발자가 객체 모델만 사용해서 프로그래밍을 하는 데 집중할 수 있게 한다.

  • JPA의 경우 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않다. 즉 설정파일에서 어떤 DB를 사용하고 있는지 알려주기만 하면 얼마든지 DB를 변경할 수 있다.

  • 스키마가 변경되었을 경우 Mybatis에서는 관련 DAO의 파라미터, 결과, SQL 등을 모두 확인하여 수정해야 하지만 JPA를 사용하면 이런 일들을 대신해준다.

단점

  • 직접 SQL을 작정하는 것보다 성능이 떨어진다. (물론 해결법 또한 존재한다.)

  • 메서드 호출로 DB데이터를 조작하기 때문에 세밀함이 떨어진다. 복잡한 통계 분석 쿼리를 메서드만으로 해결하는 것을 힘든 일이다.

  • 러닝커브가 있다.

N+1 Problem

ORM 에서 성능 이슈가 발생하면 가장 흔한 원인으로 N+1 Problem이 언급된다.

N+1 Problem은 쿼리 1번으로 N건의 데이터를 가져왓는데 원하는 데이터를 얻기 위해 이 N 건의 데이터를 데이터 수 만큼 반복해서 2차적으로 쿼리를 수행하는 문제이다.

예를들어 2개의 팀이있고 2명의 멤버가 각각 다른팀에 들어가 있다고 생각해보자.

이때 모든 멤버를 조회하게 된다면,

모든 멤버 조회 -> 멤버들의 팀이 비어있으니까 채워서 반환시키기 위해 팀을 각각 쿼리를 날려서 가져옴

위와 같은 순서로 쿼리가 날아간다. 멤버가 수천, 수만명이라고 생각하면 굉장히 비효율 적이다.

N+1의 의미는 쿼리를 1개 날렸는데 그것 때문에 추가쿼리가 N개 나간다는 의미이다.

SQL Mapper (Mybatis)

SQL Mapper란?

RDBMS를 객체 지향 모델로 매핑하게 도와주는 인터페이스(?) 이다.
객체를 SQL statement에 매핑 시킬 수 있도록 도와준다.
또한 개발자가 작성한 SQL문으로 해당되는 Row를 읽어온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다.

장점

  • JDBC를 사용했을때 발생하는 불필요한 코드들을 줄일 수 있다.

  • SQL이 코드와 분리되어 있기 때문에 유지보수가 편한다.

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

  • 동적 쿼리 생성에 유용하다.

단점

  • 데이터베이스 설정 변경 시 수정할 부분이 너무 많다.

  • 특정 DB에 종속적이다.


레퍼런스

https://ict-nroo.tistory.com/132
https://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

profile
백엔드 개발자
post-custom-banner

0개의 댓글