아티클은 "TypeScript를 활용한 서비스개발"을 읽었는데, ORM이 뭔가 찾아보다가 정리해봤다.

 

ORM이란

 

객체 관계 매핑(ORM, Object-relational mapping)

"

데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법

객체 지향 언어에서 사용할 수 있는 "가상" 객체 데이터베이스를 구축하는 방법이다. 

"

- 위키백과

 

ORM

객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말한다.

  • 객체지향프로그래밍은 클래스, 관계형데이터베이스(RDB, Relational Database)는 테이블을 사용
  • 객체모델과 관계형 모델간의 호환 불일치가 발생할 수 있다.
  • ORM을 통해 불일치를 해결한다.
    • 객체지향프로그래밍 시 데이터베이스와 호환가능성을 염두하고 개발하지 않는 이상 둘 사이에 호환 불일치가 발생하는 경우가 생긴다. 
    • 이를 ORM을 통해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다.
    • 따라서 ORM을 사용하면 따로 SQL문을 작성하지 않아도 객체를 통해 간접적으로 데이터베이스를 조작할 수 있다.

 

장점

  • 객체지향적인 코드
    • 클래스의 메서드를 통해 데이터베이스를 조작할 수 있기때문에 비즈니스로직에 집중할 시간을 확보할 수 있다.
    • SQL문과 관련된 부수적인 코드가 줄어들거나 필요하지 않아도되는 경우가 있다.
    • 객체에 대한 코드를 별도로 작성하기에 코드 가독성이 증가한다.
    • 객체지향접근, SQL의 절차/순차적 접근이 혼재되지 않아도되기에 객체지향적 접근만 고려, 생산성 증가한다.
  • 재사용, 유지보수, 리팩터링 용이성
    • ORM은 독립적으로 작성되어있고 해당 객체를 재활용할 수 있다.
    • 모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합치는 형태로 디자인 패턴을 견고하게 다지는데 유리하다.
    • 연결정보가 정확하여 ERD 의존도를 낮출 수 있다.

 

단점

  • 첫 설계를 잘못하면 망할 가능성이 크다.
  • 프로젝트 복잡성에 따라 난이도가 높아지고 잘못된설계는 속도 저하 및 일관성의 문제가 생길 수 있다.
  • 속도를 위해 별도의 튜닝이 필요한 경우 결국 SQL문을 사용해야하는 경우가 생길 수 있다.

 

객체-관계간의 불일치

  • 세분성
    • 데이터베이스 테이블 수보다 더 많은 클래스를 가진 모델이 생기는 경우
  • 상속성
    • RDBMS는 객체지향언어 특징인 상속 개념이 없다.
  • 일치 (이해가 잘안됨???)
  • 연관성
    • 객체지향언어는 객체의 참조를 사용해 연관성을 나타낸다. 하지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해 나타낸다.
  • 탐색
    • 자바와 RDBMS 객체 접근 방법이 다르다.
    • 자바는 그래프형태로 연결 연결하여 탐색한다.
    • RDBMS는 JOIN은 통해 여러 엔티티를 로드하고 원하는 엔티티를 선택하는 방식으로 탐색한다.

 

* 관계형 데이터베이스 (RDB, Relational Database)

더보기

관계형 데이터베이스는 키와 값들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스이다.

모든 데이터를 2차원 테이블 형태로 표현해준다.

데이타의 독립성이 높고, 고수준의 데이타 조작언어(DML-Data Manipulation Language)을 사용하여 결합, 제약, 투영 등의 관계 조작에 의해 비약적으로 표현능력을 높일 수 있다.

- 위키백과

 

 

* 관계형 데이터베이스 관리 시스템 (RDBMS, Relational Database Management System)

더보기

관계형 데이터베이스 관리 시스템은 IBM 산호세 연구소의 에드거 F. 커드가 도입한 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템이다.

즉 관계형 데이터베이스(RDB)를 생성, 수정 관리 할 수 있는 소프트웨어(Oracle, MySQL 등...)라고 정의할 수 있다.

- 위키백과

 

 


 

ORM이란?

https://geonlee.tistory.com/207

 

RDB, RDBMS란

https://jwprogramming.tistory.com/52

https://thefif19wlsvy.tistory.com/147

 

+ Recent posts