ORM(Object Relational Mapping)이란
본문 바로가기
CS/Database

ORM(Object Relational Mapping)이란

by IYK2h 2021. 8. 13.
728x90

ORM이란

  • 객체가 테이블이 되도록 매핑 시켜주는 프레임워크
  • 객체를 통해 간접적으로 데이터베이스를 조작

Object Relational Mapping의 약자로 관계형 데이터베이스 관리 시스템(RDBMS(Relational Database Management System))와 객체 지향 프로그래밍 언어(OOP(Object Oriented Programming))간 불일치가 존재(클래스→테이블)한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결하며 자동으로 연결(Mapping)해준다.

즉,

  • SQL문을 짤 필요없이 객체(Class)를 통해 간접적으로 데이터베이스를 조작할 수 있다.
  • 객체가 테이블이 되도록 매핑 시켜주는 프레임워크
  • ex) 클래스로 스키마를 매핑하고 메소드로 쿼리를 작성하면, 객체로 이뤄진 테이블을 가져온다.

장단점

  • 장점
    • 별도의 SQL을 사용하지 않고 OPP 언어 그대로 사용 가능
    • 객체 지향적으로 인해 직관적이다.
    • 재사용 및 유지보수의 편리성이 증가
    • DBMS에 대한 종속성을 줄인다.
  • 단점
    • ORM만으로는 구현하기 어렵다.
      • 사용하기 편하나 설계에 신중해야 한다.
        • 잘못 구현된 경우 속도 저하 및 일관성이 무너지는 문제점 발생
        • 직접 SQL을 사용하는 것보다 복잡해질수도 있다.
    • 프로시저가 많은 시스템에서는 객체 지향적인 장점을 활용하기 어렵다.(당연한 소리..)
    • 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 사용할 수도 있다.

어떤 불일치가 생기는가

  • Granularity 세분성
    • 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.
  • Inheritance 상속성
    • RDBMS는 객체지향 프로그래밍 언어의 자연적 패러다임인 상속과 유사한 것을 정의하지 않는다. 상속의 개념이 없다.
  • Identity 일치
    • RDBMS는 기본키(primary key)를 이용하여 동일성을 정의
  • Associations 연관성
    • 객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해서 나타낸다.
  • Navigation 탐색/순회
    • 자바와 RDBMS에서 객체 접근 방법이 근본적으로 다름
      • Java는 그래프 형태로 하나의 연결에서 다른 연결로 이동하면서 탐색/순회
      • RDBMS에서는 일반적으로 SQL 쿼리 수를 최소화하고 JOIN을 통해 여러 엔터티를 로드하고 원하는 대상 엔티티를을 선택하는 방식으로 탐색/순회

언어별 프레임워크 종류

  • Java - Hybernate, JPA
  • Node.js - Sequalize
  • Django - 내장 ORM
  • Flask - SQLAlchemy

Reference

https://javabydeveloper.com/orm-object-relational-mapping/

https://gmlwjd9405.github.io/2019/02/01/orm.html

728x90

댓글