본문 바로가기
백엔드/Spring

JPA와 Mybatis 비교 (ORM, SQL Mapper)

by 작은소행성 2022. 3. 27.

 

ORM(Object-Relational Mapping)

객체 관계 매핑

데이터베이스의 데이터를 자동으로 매핑해주는 것

RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요 없음

DB에 대한 종속성이 줄어듬

객체지향적 접근으로 생산성 증가

메소드 호출만으로 CRUD를 구현가능

 

 

 

JPA(Java Persistence API)

- 자바 ORM기술에 대한 API 표준 명세로 Java에서 제공하는 API

- 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술

 

장점

  • RDB 종류 관계없이 사용가능
  • DB 변경이나 코드 재활용에 용이
  • 기본적인 CRUD 제공이나 페이징 처리 등 구현되어 있어서 비즈니스 로직에 집중가능
  • 테이블 생성, 변경 등 엔티티 관리 편함
  • 쿼리에 집중할 필요 없이 빠른 개발 가능

 

단점

  • 기술적 난이도가 높음 (단방향, 양방향, 임베디드 관계 등 이해할 내용이 많으며, 연관관계 이해없이 코딩하면 성능상 문제와 동작이 원하는대로 되지 않음)

 

 

 

 

SQL Mapper

SQL 문장으로 직접 데이터베이스 데이터를 다룸

SQL문을 이용하여 RDB에 접근

RDB마다 SQL문법이 달라 특정 RDB에 종속적

 

 

Mybatis(Java Persistence Framework)

- 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 SQL Mapper

- SQL에 대한 모든 컨트롤을 하고자 할 때 매우 적합

- SQL 쿼리들이 최적화 되어 있을 때 유용

- 테이블을 조인하여 데이터를 추출하는데 좋음

 

장점

  • jpa 에 비해 쉬움
  • sql의 세부적인 내용 변경 시 좀 더 간편함
  • 동적 쿼리 사용 시 jpa보다 간편하게 구현 가능
    • 동적쿼리는 where 절에 들어가는 조건절을 제어하기 위해 특정 조건들이나 상황에 따라 변경됨 (동적쿼리 장점은 속도)

 

단점

  • 데이터 베이스 설정 변경 시 수정부분이 많음
  • mapper 작성부터 인터페이스 설계까지 jpa보다 많은 설계와 파일, 로직 필요
  • DB 에 종속적

 

 

 

결론

mybatis 를 사용하면 개발하는 시간보다 sql을 다루는 시간이 더 많이 소요된다. 

JPA를 사용하면 sql 에 종속적인 개발을 하지 않아도 되지만 기술적 난이도가 높은편이다. 

JPA의 장점이 많아 보이지만 어플리케이션이 고도화 된다면 오히려 손이 많이가기도 한다. 

각각의 장단점이 있어서 프로젝트 상황에 맞는 것을 사용하면 되지만 둘이 적절히 같이 사용하면 보다 안정적인 서비스를 제공할 수 있다.

 

 

반응형