문종현 2022. 10. 6. 09:34

Mongoose는 ODM Object Document Mapping 이다.

ORM Object Relational Mapping 과 대별된다.

객체와 모델의 관계가 아니라, 도큐먼트를 사용하기 때문이다.

 

ODM으로서 몽구스는 몽고디비에 데이터를 넣기 전 서버단에서 데이터를 스키마에 따라 정렬한다.

그리고 스키마를 통해 데이터의 모델이 익스포트 된다.

 

populate 메소드의 경우, RDMBS의 join 과 유사하게 데이터 컬렉션간 관계를 설정할 수 있다.

이는 몽구스 만의 유별난 강점으로 보인다.

(아직 populate에 대한 공부가 되어 있지 않아 아쉽다.)


몇번째 정리인지 모르지만 또 정리

1.RDBNS Relational Database Management System

-테이블 간 관계를 사용하는 데이터베이스, SQL 쿼리문 사용.

-테이블간 join이 장점이나, 또 그 join이 복잡하지는 것이 단점.

-scale-up 을 해야 성능이 향상되는데, 비용문제가 있음.

 

2.NoSQL

-몽고DB. 

-데이터를 테이블이 아니라 도큐먼트안 JSON 오브젝트로 다룬다. 수평적인 데이터 구조.

-관계형 데이터베이스와 달리 scale-out, 수평적 확장이 가능하다. 그러므로 '더 유연한' 구조라고 표현하곤 한다.

-장점1 : 유연성flexibility & 확장성scalability(당장 나부터가 클러스터 혹은 컬렉션을 수평적으로 확장하며 편리하게 쓰고 있다.)

-장점2 : 키-밸류나 그래프 형식을 갖춘 데이터 모델에 대한 최적화가 좋다.(고 하더라.)

-장점3 : 데이터 모델에 맞춘 api 제공.

 

 


3.ORM Object Relational Mapping

객체와 RDBMS 관계형 데이터베이스를 자동으로 매핑해주는 도우미.

Node.js ORM은 PostgreSQL, MySQL, MariaDB, SQLite 등.

 

장점 : 객체지향, 객체 재활용 측면에서 유지보수 편의

단점 : 복잡한 쿼리문 때문에 오히려 SQL 쿼리문이 나을 수 있음.


4.ODM Object Document Mapping

객체 관계를 정의한 내용을 NoSQL 형태로 매핑해주는 도우미.

 

Mongoose는 MongoDB기반 ODM 으로, Node.JS 라이브러리이다.

Document 기반이지만 RDBMS에서 사용하는 스키마가 부활했다.

popuate, 프로미스, 편리한 쿼리 등의 장점이 있는 ODM이다.