카테고리 없음

[MongoDB] 스키마 정의하고 모듈화 하기

장일규 2022. 5. 11. 21:29

이번에는 Node.js + MongoDB 환경에서
mongoose를 사용하여 사용자 정보를 다루는 User 모델을 정의하고,
이를 모듈화하여 외부에서 사용할 수 있도록 구성하는 방법을 다룬다.

핵심은 
"어떻게 하면 DB에 들어갈 유저 정보를 정의하고, 그걸 코드로 관리할 수 있느냐"
이걸 mongoose로 푼다는 거다.

mongoose 설치

먼저 스키마(Schema)를 정의하기 위해서는 mongoose를 프로젝트에 설치한다.

$ npm install mongoose --save

Importing

const mongoose = require('mongoose');

models 폴더 만들기

폴더를 만든 후 회원(User)를 정의하기 위한, User.js파일을 만들어 줍니다.

회원(User)에 필드를 정의

  • 회원 필드에 요구사항
    • email(이메일)필수적으로 필요하고 고유하다.
    • password(비밀번호)필수적으로 필요하다.
    • name(이름)필수적으로 필요하다.
    • gender(성별)필수적으로 필요하다.
    • introduction(소개)선택사항이다.
  • 회원에 대한 메타 데이터
    • 회원은 계정 상태를 가지고 있다.
      • active, inactive, deleted, banned
    • 회원이 가질 수 있는 권한
    • user, admin
    • 기본 권한은 user이다.

Users.js

const UserSchema = new mongoose.Schema({
    // 메타데이터
    accountStatus: {
        type: String,
        enum: {
            values: ["active", "inactive", "deleted", "banned"],
            message: "{VALUE} is not supported",
        },
        default: "active",
    },

    role: {
        type: String,
        enum: {
            values: ["user", "admin"],
            message: "{VALUE} is not supported",
        },
        default: "user",
    },

    // ==== 회원 필드 ====

    // 이메일
    email: {
        type: String,
        required: [true, "email is missing"],
        unique: [true, "email already exists"],
    },

    // 비밀번호
    password: {
        type: String,
        required: [true, "password is missing"],
    },

    // 이름
    name: {
        type: String,
        required: [true, "name is missing"],
        enum: {
            values: ["male", "female"],
            message: "{VALUE} is not supported",
        },
    },

    // 소개
    introduction: {
        type: String,
        default: null,
    },
  }, 
      {timestamps: true}
);

모델로 감싸기

module.exports = mongoose.model("User", UserSchema);