본문 바로가기
데이터베이스

mongoose 스키마와 모델

by 즐거운코딩 2023. 7. 18.
반응형

본격적으로 mongoose 데이터베이스를 사용하여 블로그 포스트 데이터를 관리하고자 합니다.

우선 기본적으로 mongoose에서의 스키마(schema)와 모델(model)에 대해 개념을 잡고 가겠습니다.

 

  • 스키마

컬렉션(Collection)에 들어가는 문서(Document) 내부의 각 필드의 형식을 정의

  • 모델

스키마를 사용하여 만드는 인스턴스로 데이터베이스에서 실제 작업을 처리할 수 있는 함수들을 지니고 있는 객체

 

1. 스키마 생성

 

블로그 포스트 생성을 가정하고 필요한 데이터 항목을 정합니다.

  • 제목
  • 내용
  • 태그
  • 작성일

포스트 하나에 위와 같이 4개의 정보가 필요합니다. 각 정보에 대한 필드이름과 데이터 타입을 결정하여 스키마를 만듭니다.

필드이름 데이터 타입 설명
title String 제목
body String 내용
tags String Array 태그 목록
publishedDate Date 작성 날짜

스키마와 모델에 관련된 코드는 src/models 디렉터리에 작성하겠습니다.

다음과 같이 post.js 파일을 만듭니다.

 

import mongoose from 'mongoose';

const { Schema } = mongoose;

const PostSchema = new Schema({
  title: String,
  body: String,
  tags: [Stirng], // 문자열로 이루어진 배열
  publishedDate: {
    type: Date,
    default: Date.now, // 현재 날짜를 기본값으로 지정
  },
});

스키마를 만들 때 mongoose 모듈의 Schema 를 사용하여 정의합니다. 그리고 각 필드 이름과 필드의 데이터 타입 정보가 들어 있는 객체를 만듭니다. 필드의 기본값은 default 로 설정합니다.

 

Schema에서 지원하는 타입은 다음과 같습니다.

타입 설명
String 문자열
Number 숫자
Date 날짜
Buffer 파일을 담을 수 있는 버퍼
Boolean true 또는 false 값
Mixed(Schema.Types.Mixed) 어떤 객체도 넣을 수 있는 형식
ObjectId(Schema.Types.ObjectId) 객체 아이디, 주로 다른 객체를 참조할 때 넣음
Array 배열 형태의 값으로  [ ]로 감싸서 사용

 

2. 모델 생성

모델을 만들 때는 mongoose.model 함수를 사용합니다. post.js 파일 맨 하단에 모델을 생서하는 코드를 입력합니다.

(...)
const PostSchema = new Schema({
  title: String,
  body: String,
  tags: [Stirng], // 문자열로 이루어진 배열
  publishedDate: {
    type: Date,
    default: Date.now, // 현재 날짜를 기본값으로 지정
  },
});

const Post = mongoose.model('Post', PostSchema);
export default Post;

모델 인스턴스를 만들고 export default를 통해 내보내 줍니다.

모델 함수의 경우 기본적으로 두 개의 파라미터가 필요합니다.  첫 번째는 스키마 이름, 두 번째는 스키마 객체 입니다.

 

데이터베이스는 스키마 이름을 정해 주면 그 이름의 복수 형태로 데이터베이스 컬렉션 이름이 만들어 집니다..

예를 들어 스키마 이름을 Post로 설정하면, 실제 데이터베이스에 만들어 진 컬렉션 이름은 posts 입니다.

BookInfo 로 입력하면 bookinfos를 만듭니다.

 

MongoDB에서 컬렉션 이름을 만들 때 권장되는 컨벤션(Convention)은 구분자를 사용하지 않고 복수 형태로 사용하는 것 입니다. 만약 이 컨벤션을 따르고 싶지 않다면 세 번째 파라미터에 원하는 이름을 입력하면 됩니다.

예) mongoose.model('Post', PostSchema, 'custom_book_collection');

 

이 경우 첫 번째 파라미터로 넣어준 Post 는 다른 스키마에서 현재 스키마를 참조해야 할 때 사용합니다.

반응형