ORM(Object Relational Mapping)

shinhyocheol·2021년 6월 29일
0

최근 JPA에 대해 공부하고 있다.😫

JPA란 Java Persistence API의 약자로 현재 자바 진영의 ORM 기술 표준이라고 한다.

JPA는 자바어플리케이션에서 RDB(관계형 데이터베이스)를 사용하는 방식을 정의한 인터페이스이다.

따라서 무언가 특정기능을 하는 기술은 아니라는 것이다.

스프링의 PSA에 의해 표준 인터페이스를 정하는데 그 중 ORM을 사용하기 위해 만들어진 인터페이스가

바로 JPA라고 한다.

그렇다면 ORM이란 무엇인가??😕

보통 자바에서 DB를 사용할 때에는 SQL Mapper를 이용한다. 그렇다면 ORM과 Mapper는

어떤 차이가 있을까? Mapper는 SQL(쿼리)를 직접 명시해주어야 한다. 하지만 ORM은 DB테이블을

자바 객체로 매핑함으로써 그 관계를 바탕으로 SQL을 자동으로 생성한다.

자 그렇다면 자바진영의 ORM 표준기술인 JPA와 이미 대중적으로 많이 사용되는 SQL Mapper의 대표격인 Mybatis를 간단하게 비교해보자.

아래 그래프만 봤을때는 세계적으로는 이미 JPA가 압도적으로 더 많은 관심을 받고 있으며, 대한민국도 점점

JPA가 Mybatis와의 격차를 벌리지 않을가 생각된다.

SQL Mapper

  • SQL <-- mapping --> Object
  • SQL문을 통해 DB를 조작
  • 자바에서는 대표적으로 Mybatis가 있다.

ORM(Object-Relation Mapping/객체-관계 매핑)

  • DB <-- mpping --> Object
  • 객체와 DB를 자동으로 매핑해준다.
  • SQL 쿼리가 아닌 메서드로 DB를 조작할 수 있다.
  • 객체간의 매핑 관계를 바탕으로 SQL을 자동으로 생성한다.
  • 자바에서는 대표적으로 JPA가 있다.

이런 차이가 있다고 한다.

장점

  • 완벽한 객체지향적인 코드

위에도 설명이 있다시피 ORM은 SQL이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있다.

그러므로 객체만을 이용해 프로그래밍을 하는데에 집중할 수 있다. SQL 문을 사용하면 같이 필요한 몇몇

부수적인작업(선언, 종료, 할당) 코드를 생략하거나 줄일 수 있으며, 각종 객체에 대한 코드를 별도로 작성하여

코드에 대한 가독성을 높일 수 있음. 객체지향적 접근과 SQL의 절차적/순처적 접근이 혼재되어있던

기존 방식과 달리 오로지 객체지향적 접근만 고려하기에 생산성을 높일 수 있다.

  • 재사용, 유지보수, 리팩토링등등 작업에 용이함

ORM은 기존 객체와 독립적으로 작성되어있고, 객채로 작성되었기 때문에 재활용할 수 있다.

또한 매핑하는 정보가 명확하기에 ERD의 의존도를 낮출 수 있다.

  • DBMS 종속성 하락

객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에

RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다. 객체에만 집중할 수 있기에 DBMS를

교체하는 큰 작업도 비교적 리스크가 적게 들고 시간을 줄일  수 있다.

단점

  • 러닝커브가 높은 수준(학습 시간이 필요)
  • 기본적인 규칙이 존재함에 따라 설계방식에 따라 속도이슈 발생 가능성이 높음
  • 이미 설계된 DB를 사용하는 경우 연관관계 설정에 따라 서버 구동 시점부터 오류 발생(DB 추가 보수 필요)
  • 복잡한 쿼리를 표현하는데에 한계가 있음 (specification, querydsl, native query등으로 보완 가능)
profile
놀고싶다

0개의 댓글