ORM

코딩을 합시다·2023년 1월 8일
0

ORM이란?

Object Relational Mapping, 말 그대로 객체-관계 매핑이라는 것이다. 다만 RDB는 테이블로 이루어져 있고, OPP 객체지향 프로그래밍에서는 클래스를 사용하게 된다. 하지만 객체와 관계형 데이터베이스가 애초에 호환을 염두 하고 만들어 진 것이 아니다보니, 자연스럽게 불일치가 발생하게 된다. 이럴때 ORM을 사용하여 객체의 관계를 바탕으로 SQL문을 자동적으로 생성 불일치를 해결한다.

1. Granularity(세분성)

  • 경우에 따라 데이터베이스에 있는 해당 테이블 수보다 더 많은 클래스를 가진 객체 모델을 가질 수 있다.

2. Inheritance(상속)

  • RDBMS는 객체지향 프로그래밍 언어의 자연적 패러다임인 상속과 유사한 것을 정의하지 않는다.

3. Identity(일치)

  • RDBMS는 ‘sameness’라는 하나의 개념을 정확히 정의하는데, 바로 ‘기본키(primary key)’이다.

4. Associations(연관성)

  • 객체지향 언어는 객체 참조(reference)를 사용하는 연관성을 나타내는 반면, RDBMS는 연관성을 ‘외래키(foreign key)’로 나타낸다.

장점

  • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
  • 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.
  • 재사용 및 유지보수의 편리성이 증가한다.
  • ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있다.
  • 탐색(Navigation) 자바와 RDBMS에서 객체를 접근하는 방법이 다르다.
    • 자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다.
    • RDBMS에서는 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색.

단점

  • 사용하기는 편하지만 설계는 매우 신중하게 해야함.
  • 완벽한 ORM 으로만 서비스를 구현하기가 어려움.
  • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
  • 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있다.
  • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
  • DBMS의 고유 기능을 이용하기 어렵다.
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.

0개의 댓글