본문 바로가기

ORM

[ORM] ORM(Object Relational Mapping)이란?

728x90
반응형
SMALL

ORM이란?

  • Object Relational Mapping 의 줄임말, 객체와 관계형 데이터베이스 매핑의 줄임말
  • 쉽게 말해서 클래스로 만들어진 인스턴스(객체)와 RDB(Relational DataBase)의 테이블과의 연결을 의미

출처: https://medium.com/@emccul13/object-relational-mapping-9d84807f5536

  • 위 그림처럼 객체를 통해 간접적으로 데이터베이스의 데이터를 다룰 수 있다.
  • ORM을 통해서 객체간의 관계를 바탕으로 SQL문이 자동으로 생성되기 때문에 객체모델(클래스)과 관계형모델(테이블)의 불일치성을 해결해준다

Why ORM? 장단점

장점

  • 객체지향적인 코드
    • 더 직관적이고, 비지니스 로직에 더 집중 할 수 있다.
    • 앞서 이야기 했듯이 SQL문을 자동으로 생성해주기 생산성이 증가
    • 코드의 가독성을 올려줌
  • 재사용성 및 유지보수의 편리성 증가
    • 선언된 클래스를 통해서 ORM클래스로 지정 할 수 있고 그 클래스는 데이터베이스와 상호작용 할 수 있다.
    • 만약, 테이블 스키마를 변경하고 싶다면, ORM클래스를 변경하면 된다
      • 유지보수의 편리성
    • ORM 클래스를 재 사용해서 객체를 생성할 수 있다.
      • 재사용성
  • 데이터베이스 독립성
    • 데이터베이스에 대한 종속성을 줄여준다.
      • ORM을 사용하면 DB를 변경하더라도 소스코드의 변경이 필요하지 않기 때문에 객체지향적 설계가 편리해진다.
      •  

단점

  • 성능
    • ORM은 복잡한 쿼리를 생성하고 실행할 때 성능 문제가 발생 할 수 있다.
    • 속도 저하 문제를 직면했을 경우 성능을 최적화 하기위해서는 직접적인 SQL문을 써주어야 한다.
  • 제한적
    • 모든 데이터베이스가 ORM을 지원하는 것은 아니기 때문에 프로젝트에서 사용 할 수 있는 데이터베이스에 제약이 될 수 있음
  • 객체-관계 간의 불일치
    • 클래스와 테이블은 기존부터 호환 가능성을 두고 만들어 진것이 아니기때문에 불일치가 발생한다.
불일치 되는 것들
세분성
(Granularity)
세분성이란 정보나 개념이 세분화(쪼개질?) 될수록 세분성이 높다 라는 이야기를 함 (본인은 정보의 상세한 수준이라고 이해)

경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.

EX) 객체를 통해 주문(Order)와 주문 라인(Order Line) 두개의 별도의 클래스를 만들어 주문 클래스가 주문 라인 클래스를 포함하는 형태가 될 수 있지, DB의 경우 2개의 테이블을 만들어서 외래키로 연결해주어야 한다.
상속성
(Inheritance)
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속의 개념이 없다. 따라서, 유사한 기능을 구현하는 것으로 만족해야함

EX) 동물 클래스를 상속 받아 고양이, 강아지 클래스를 만들 수 있지만, DB의 경우, 동물, 고양이 강아지 에 대한 데이터 처리를 어떻게 해야할 지, 객체의 접근 방식이 아닌 다른 방식을 결정해야한다.
일치
(Identity)
RDBMS는 기본키(PK)를 이용해서 같은 데이터구나를 정의 한다.

객체 (Java)는 객체 식별 (a == b)와 동일성 (a.equals(b))을 모두 정의한다.
연관성
(Associations)
객체지향 언어에서 연관성은 객체의 참조(Reference) 혹은 다형성을 통해 표현 가능하다.

RDBMS에서의 방향성은 외래키를 이용해서 나타낸다.
 
탐색
(Navigation)
프로그래밍 언어(자바)와 RDBMS에서 객체에 접근하는 방법이 다르다.

자바의 경우 객체간의 관계를 직접적으로 참조하거나 연결하여 탐색할 수 있음.
RDBMS 의 경우 외래 키와 Join을 사용하여 관계를 탐색하게 됨.

 

 


대표적인 ORM 프레임워크들

  • JPA/Hibernate
    • JPA (Java Persistence API)는 자바의 ORM 기술 표준 인터페이스의 모음이며 이러한 명세를 구현한 구현체가 Hibernate 이다.
  • Sequeliz
    • Promise 기반의 비동기로 동작하는 Node.js ORM
  • Django ORM
    • python 기반의 프레임워크인 Django에서 자체적으로 지원하는 ORM

 

728x90
반응형
LIST