위키 정의는 아래와 같이 되어 있다.
Mongoose는 MongoDB와 Express 웹 애플리케이션 프레임 워크 간의 연결을 생성하는 JavaScript 객체 지향 프로그래밍 라이브러리입니다.
다른 글에서는 아래와 같은 내용도 덧붙이고 있다.
Mongoose -> Node.js와 MongoDB를 연결해주는 ODM
ODM(Object Document Mapping) -> 객체와 문서를 1대1로 매칭하는 역할
MongoDB 를 사용하기 위한 javascript 라이브러리라고 이해하면 될듯.
MongoDB 와 Mongoose 의 설치는 이전 글에서 확인 요망.
4개의 키워드를 어느정도 이해하면 코딩을 시작하는데 무리가 없을 듯하다.
물론 "잘" 만드려면 MongoDB 에 대한 이해도가 높아야 하고 Schema 설계에 대한 깊은 고민이 필요할 것 같지만,
뭐 난 일단 블로그 돌리는게 목적이기 때문에 대충이라도 사용할 수 있는 최소한의 수준만 맞추는게 목적임.
SQL 의 레코드 (하나의 행) 과 동일한 개념으로 보면 될 듯하다.
SQL 의 테이블과 비슷한 개념이라고 보면 될 듯하다.
여러개의 Document 를 담고 있는 컨테이너 같은 느낌?
Document 에 대한 타입 정의라고 이해하면 될 듯하다.
미리 정의된 Schema 를 사용하여 실제로 Document 를 생성하고, Collection 에 접근하여 save, delete, update, find 등을 수행할 수 있는 친구다.
이전 글에서 적었듯이, 블로그에 필요한 데이터는 Menu, Article 이고 이에 대한 Schema 정의가 필요하다.
소스는 models/...
에 넣고 Schema 하나당 js 파일 하나 생성해서 정의하자.
일단 Menu 부터...
일단 이전글에서 정의한 Menu Data 는 아래와 같다.
이 중에 key 는 삭제해도 될듯 하다.
MongoDB 는 Collection 에 Document 를 추가할때마다 Document 에 _id
란 이름으로 ObjectId
라는 private 한 데이터를 자동으로 추가하기 때문이다. (https://koonsland.tistory.com/89)
걍 _id
를 사용하면 될 듯... (Menu key 도 마찬가지)
다시 정의하면 아래와 같다.
_id 를 참조하는 필드 - parent 같은 - 에 실제 데이터의 참조값을 넣을 수도 있다고 한다.
그럼 _id 를 가지고 find 하는 과정이 생략되기에 데이터가 많고 데이터 참조 & 컨버팅이 많은 경우에는 성능 향상에 도움이 될 것 같다.
다만 나의 경우에는 단순한 구조이기 때문에 걍 패스...
models/Menu.js
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
// Menu Schema
const menuSchema = new Schema({
name: { type: String, required: true },
parent: { type: Schema.Types.ObjectId },
children: { type: [Schema.Types.ObjectId] },
articles: { type: [Schema.Types.ObjectId] }
});
// Menu Model
// - 'menu' -> collection 명
export default mongoose.model('menu', menuSchema);
Article Data 는 아래와 같이 정의한다.
models/Article.js
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
// Article Schema
const articleSchema = new Schema({
title: { type: String, required: true },
contents: { type: Schema.Types.ObjectId },
created: { type: Date, required: true },
menu: { type: Schema.Types.ObjectId, required: true }
});
// Article Model
// - 'marticleenu' -> collection 명
export default mongoose.model('article', articleSchema);
다음 글에서는 express 에서 실제 mongoose 를 구동하고, 방금 정의한 Menu, Article Model 과 연동을 해보자.