MongoDB

학습키워드

  • 초기 설정

  • 환경변수 설정

  • MongoDB + mongoose

⚙️ 초기 설정

Step1. Project 생성

Step2. cluster 생성

Step3. cluster 생성시 선택사항

Step4. Network Access 변경

  • 이미지의 표시된 버튼 클릭하면 팝업 노출 됨

Step5. Network Access 변경

  • 이미지의 표시된 버튼 클릭하면 변경 후 확인 버튼 클릭

Step6. Database Access 생성

Step7. Database Access 작성

  • 아이디

  • 비밀번호 작성(@ 기호는 사용하면 안됨)

  • Role SelectBox 선택

📄 환경변수

  • .env 파일에 작성할 환경변수 찾는 방법

  • connect 버튼 클릭

  • Drivers 영역 선택

  • 해당영역 코드 복사해서 환경변수에 지정

MONGODB_URL=복사한 코드

mongodb+srv://alnmi28:<비밀번호작성>@cluster0.205t0vj.mongodb.net/<DB명작성>?retryWrites=true&w=majority&appName=Cluster0

🍃 mongoose

mongoose 패키지 설치

npm i mongoose

DB 폴더 및 파일 생성

  • src/lib/db.ts 생성

import mongoose from 'mongoose';

const connectDB = async () => {
  try {
    if (mongoose.connection.readyState >= 1) {
      console.log('Already connected to MongoDB');
      return;
    }
    await mongoose.connect(process.env.MONGODB_URL as string);
    console.log(`MongoDB Connected`);
  } catch (error) {
    console.error(`Error: ${error}`);
    process.exit(1);
  }
};
export default connectDB;

schema 폴더 및 파일 생성

import mongoose from 'mongoose';
const userSchema = new mongoose.Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, select: false },
    role: {
      type: String,
      enum: ['user', 'admin'],
      default: 'user',
    },
    authProviderId: { type: String }, // 소셜 로그인 로그인
  },
  { timestamps: true }
);

export const User = mongoose.models?.User || mongoose.model('User', userSchema);
타입 지정 (Type)

String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array, Decimal128, Map, Schema.Types
예: { name: String }
필수 항목 (required)

필드가 필수인지 여부를 지정합니다.
예: { name: { type: String, required: true } }
기본값 (default)

필드의 기본값을 지정합니다.
예: { age: { type: Number, default: 0 } }
유일성 (unique)

필드 값이 유일해야 함을 지정합니다.
예: { email: { type: String, unique: true } }
인덱스 (index)

필드에 인덱스를 생성합니다.
예: { email: { type: String, index: true } }
유효성 검사 (validate)

필드 값에 대한 유효성 검사를 지정합니다.
예: { age: { type: Number, validate: value => value >= 0 } }
길이 제한 (maxlength, minlength)

문자열 필드의 최대/최소 길이를 지정합니다.
예: { name: { type: String, maxlength: 50 } }
열거형 (enum)

문자열 필드가 가질 수 있는 값들을 제한합니다.
예: { role: { type: String, enum: ['user', 'admin'] } }
일치 (match)

문자열 필드가 정규표현식에 맞아야 함을 지정합니다.
예: { email: { type: String, match: /.+\@.+\..+/ } }
맞춤 메시지 (custom error messages)

유효성 검사 실패 시 사용자 정의 오류 메시지를 설정합니다.
예: { age: { type: Number, min: [18, 'Too young'] } }

📌 참고 예제

const mongoose = require('mongoose');
const { Schema } = mongoose;

// 사용자 스키마 정의
const userSchema = new Schema({
  // 문자열 타입 필드, 필수 입력, 최대 길이 100자
  name: {
    type: String,
    required: true,
    maxlength: 100,
  },
  // 이메일 필드, 필수 입력, 유일해야 하며 정규 표현식을 통해 이메일 형식 검사
  email: {
    type: String,
    required: true,
    unique: true,
    match: /.+\@.+\..+/,
  },
  // 나이 필드, 최소 18세, 최대 65세, 유효성 검사 실패 시 맞춤 오류 메시지
  age: {
    type: Number,
    min: [18, 'Must be at least 18'],
    max: [65, 'Must be at most 65'],
  },
  // 역할 필드, 'user' 또는 'admin'만 허용, 기본값은 'user'
  role: {
    type: String,
    enum: ['user', 'admin'],
    default: 'user',
  },
  // 생성 날짜 필드, 기본값은 현재 시간
  createdAt: {
    type: Date,
    default: Date.now,
  },
  // 수정 날짜 필드, 기본값은 현재 시간
  updatedAt: {
    type: Date,
    default: Date.now,
  },
});

// 모델 생성
const User = mongoose.model('User', userSchema);

module.exports = User;

모델을 사용하기 위한 메서드

Last updated