게시글

5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭
강좌12 - MongoDB - 7년 전 등록

Mongoose(몽구스) 시작하기

안녕하세요. 이번 시간부터는 MongoDB ODM 중 가장 유명한 Mongoose에 대해 알아보겠습니다. 저도 Mongoose가 너무 편리해 생 MongoDB 대신 Mongoose를 사용하고 있습니다.

일단 ODM이 뭔지부터 알아봅시다. ODM은 Object Document Mapping의 두문자어입니다. 풀이해보면 객체와 문서를 1대1 매칭한다는 뜻인데요. Object는 자바스크립트의 객체이고, Document는 몽고DB의 문서입니다. 즉, 문서를 DB에서 조회할 때 자바스크립트 객체로 바꿔주는 역할이라고 생각하시면 됩니다.

몽고DB의 ODM으로는 Mongoose, Mongo.js 등등 많지만 Mongoose가 압도적으로 많이 사용됩니다. 저도 몽구스에 중독되어버렸을 정도로 애용합니다.

undefined

사실 기본 몽고DB 드라이버(mongodb 패키지)도 다큐먼트(원래부터 자바스크립트지만...)를 자바스크립트 객체로 매핑하기 때문에 ODM을 쓰는 이유가 궁금하실 수도 있습니다. 어차피 자바스크립트인 것을 또 자바스크립트 객체로 매핑하는 셈이니까요. 하지만 몽구스를 써본 사람들은 압니다. 왜 쓰는지를요.

npm i -S mongoose

몽구스는 npm으로 설치합니다. 몽구스와 연결하는 강좌 는 노드 쪽에 있습니다. 당연하지만 몽고디비와 노드는 설치되어 있어야 합니다.(몽고디비를 꼭 노드와 써야하는 것은 아닙니다. 하지만 저는 노드로 서버를 만들기 때문에 강좌도 노드 기준으로 진행합니다)

몽구스의 장점을 꼽자면 강제 스키마(schema)의 부활, populate, 프로미스와 콜백 사용 가능, 편리한 쿼리 빌더 등을 꼽을 수 있습니다.

schemapopulate는 조금 재밌습니다. 사실 nosql 자체가 테이블과 join이 없는 것을 활용하는 DB입니다. 그런데 몽구스는 오히려 그 기능을 부활시켰습니다. DB에 다큐먼트를 넣을 때 값과 타입 그리고 필드를 검사합니다. populate는 SQL의 join과 비슷한 기능을 흉내내줍니다. 이럴거면 nosql을 왜 쓰냐고 하시겠지만, 실제로 몽고DB를 사용하다보면 황당하게도 schema와 join이 필요한 경우가 생깁니다. 그 때 이 기능이 필요합니다.

프로미스와 콜백을 자유자재로 전환할 수 있다는 것은 정말 편리합니다. 노드는 지금 프로미스가 거의 공식 비동기 API처럼 되어있습니다. 기본 몽고DB가 콜백 기반이기 때문에 프로미스를 사용할 수 있게 해주는 몽구스가 참 고맙습니다.

몽고DB에서 쿼리를 작성할 때 JSON 형식으로 작성하기 때문에 뭔가 장황한 느낌을 줍니다. 몽구스의 쿼리는 간결한 느낌입니다. 제공하는 쿼리 빌더로 손쉽게 쿼리를 만들어줍니다. 마치 자바스크립트의 API를 제이쿼리가 편리하게 압축시킨 것 처럼요. 이것도 한 번 중독되면 벗어나기 어렵습니다.

다음 시간부터 몽구스 스키마로 시작해서 핵심 기능들에 대해 하나씩 알아봅시다!

조회수:
0
목록
투표로 게시글에 관해 피드백을 해주시면 게시글 수정 시 반영됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright 2016- . 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.
5만명이 선택한 평균 별점 4.9의 제로초 프로그래밍 강좌! 로드맵만 따라오면 됩니다! 클릭

댓글

1개의 댓글이 있습니다.
4년 전
사실 기본 몽고DB 드라이버(mongodb 패키지)도 다큐먼트(원래부터 자바스크립트지만...)를 자바스크립트 객체로 매핑하기 때문에 ODM을 쓰는 이유가 궁금하실 수도 있습니다 \u003c- 이부분에서 다큐먼트의 형태는 json형태라서 자바스크립트 객체랑은 다르지 않나요 ? 궁금합니다..
4년 전
json이 자바스크립트 객체의 제한된 형태입니다. 그리고 정확히는 몽고디비는 bson을 씁니다.