Mongoose? - Schema 정의

손대중·2022년 3월 21일
0

Mongoose 란?

위키 정의는 아래와 같이 되어 있다.

Mongoose는 MongoDB와 Express 웹 애플리케이션 프레임 워크 간의 연결을 생성하는 JavaScript 객체 지향 프로그래밍 라이브러리입니다.

다른 글에서는 아래와 같은 내용도 덧붙이고 있다.

Mongoose -> Node.js와 MongoDB를 연결해주는 ODM
ODM(Object Document Mapping) -> 객체와 문서를 1대1로 매칭하는 역할

MongoDB 를 사용하기 위한 javascript 라이브러리라고 이해하면 될듯.

MongoDB 와 Mongoose 의 설치는 이전 글에서 확인 요망.

Mogoose 간략 개념 정리

4개의 키워드를 어느정도 이해하면 코딩을 시작하는데 무리가 없을 듯하다.

물론 "잘" 만드려면 MongoDB 에 대한 이해도가 높아야 하고 Schema 설계에 대한 깊은 고민이 필요할 것 같지만,
뭐 난 일단 블로그 돌리는게 목적이기 때문에 대충이라도 사용할 수 있는 최소한의 수준만 맞추는게 목적임.

Document

SQL 의 레코드 (하나의 행) 과 동일한 개념으로 보면 될 듯하다.

Collection

SQL 의 테이블과 비슷한 개념이라고 보면 될 듯하다.

여러개의 Document 를 담고 있는 컨테이너 같은 느낌?

Schema

Document 에 대한 타입 정의라고 이해하면 될 듯하다.

Model

미리 정의된 Schema 를 사용하여 실제로 Document 를 생성하고, Collection 에 접근하여 save, delete, update, find 등을 수행할 수 있는 친구다.

Schema 정의

이전 글에서 적었듯이, 블로그에 필요한 데이터는 Menu, Article 이고 이에 대한 Schema 정의가 필요하다.

소스는 models/... 에 넣고 Schema 하나당 js 파일 하나 생성해서 정의하자.

일단 Menu 부터...

일단 이전글에서 정의한 Menu Data 는 아래와 같다.

  • Menu Data
    • key
      • Menu private key
    • name
      • Menu 명
    • parent
      • 부모 Menu key
    • children
      • 자식 Menu key 리스트
    • articles
      • 내가 가지고 있는 Article key 리스트

이 중에 key 는 삭제해도 될듯 하다.

MongoDB 는 Collection 에 Document 를 추가할때마다 Document 에 _id 란 이름으로 ObjectId 라는 private 한 데이터를 자동으로 추가하기 때문이다. (https://koonsland.tistory.com/89)

_id 를 사용하면 될 듯... (Menu key 도 마찬가지)

다시 정의하면 아래와 같다.

  • Menu Data
    • name
      • Menu 명
    • parent
      • 부모 Menu _id
    • children
      • 자식 Menu _id 리스트
    • articles
      • 내가 가지고 있는 Article _id 리스트

_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 Schema

Article Data 는 아래와 같이 정의한다.

  • Article Data
    • title
      • Article 제목
    • contents
      • Article 본문
    • created
      • Article 생성 날짜
    • menu
      • 내가 속한 Menu _id

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 과 연동을 해보자.

0개의 댓글

관련 채용 정보