[JPA] ORM과 SQL Mapper의 차이

Welcome to Seoyun Dev Log·2023년 5월 8일
0

JPA

목록 보기
12/15

Persistence Framework

JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장한다
모든 Persistence Framework는 내부적으로 JDBC API를 이용한다.
JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

persistence Framework는 아래와 같이 나눌 수 있다

  • SQL Mapper
  • ORM (Object Relational Mapping)

이 persistence Framework를 사용하는 경우
기존의 JDBC만의 사용으로 쿼리문을 만들어 요청할 때 쿼리문이 조금만 길어져도 관리가 힘들거나 번거로운 부분을 개발자가 직접 JDBC Programming을 하지 않도록 기능을 제공해준다


SQL Mapper

객체(Obejct)와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술

  • 객체와 테이블 간의 관계를 매핑하는 것이 아니다
  • SQL문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할지 바딩인하는 방법
  • RDB에 따라 SQL 문법이 다르기 때문에 DBMS에 종속적인 문제 (EX) JdbcTemplate, MyBatis)

MyBatis

  • 자바에서 SQL Mapper를 지원해주는 프레임워크
  • SQL문을 이용해서 RDB에 접근, 데이터를 객체화 시켜줌
  • SQL을 직접 작성하여 쿼리 수행 결과를 객체와 매핑
  • 쿼리문을 XML로 분리가능
  • 복잡한 쿼리문 작성 가능
  • 데이터 캐싱 기능으로 성능 향상
  • 객체와 쿼리문을 모두 관리해야하며 CRUD 메소드를 직접 다 구현해야한다
  • Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다.

ORM(Object-relational mapping)

객체(Object)와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체지향적으로 사용하게 해주는 기술

RDB 테이블은 객체지향적 특성(상속, 다형성, 레퍼런스) 등이 없어서 Java와 같은 객체 지향적 언어로의 접근이 쉽지 않다.
이럴때 ORM을 사용하면 보다 객체지향적으로 RDB를 사용할 수 있다

  • ORM은 SQL문이 아닌 RDB에 데이터 그자체와 매핑하기 때문에 개발자가 반복적인 SQL을 직접 작성하지 않는다
  • DBMS에 종속적이지 않다
  • 복잡한 쿼리의 경우 JPQL을 사용하거나 SQL Mapper을 혼용하여 사용 가능하다
  • 객체 관계 매핑(객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할)

JPA(Java Persistence API)

JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미한다.
JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM 프레임워크를 사용해야 한다.

자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다
라이브러리가 아닌 인터페이스이므로 특정 기능을 하진 않는다

  • 객체 중심으로 개발 가능
  • Mybatis는 쿼리가 수정되어 데이터 정보가 변경되면 연관된 코드도 함께 수정해주어야 하는 반면 JPA는 객체만 변경하면 된다
  • 자바 ORM의 기술 표준
  • 대표적인 오픈 소스가 Hibernate
    • Hibernate는 JPA의 구현체 중 하나이다
  • 기본적인 CRUD 제공과 페이징 처리 등 상당 부분 구현되어 있어 비지니스 로직에 집중할 수 있다
  • 쿼리를 만들지 않아도 된다
  • 1차캐시, 쓰기지연, 변경감지, 지연로딩을 제공하여 성능상 이점을 얻을 수 있다
  • 복잡한 쿼리는 해결이 어려움
  • Spring Data JPA는 JPA를 간편하게 사용하도록 만들어놓은 오픈 소스

Hibernate

JPA의 구현체 중 하나이며, Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작하고 있다.


참고

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글