03 | MongoDB Model & Schema + git

Saemsol Yoo·2021년 2월 12일
0

Node JS & React JS

목록 보기
3/6
post-thumbnail

overview

유저모델 생성
웹 사이트에서 회원가입을 한다면 이 과정에서 유저는 username 이나 주소, 나이 등을 입력하게 된다. 이 입력된 정보들은 유저의 데이터베이스 로 들어가게 되며, 이렇게 유저와 관련된 데이터들을 보관하기 위해user model , user Schema 를 만드는데 이번 포스팅에서는 이것에 대해 알아보려고 한다!

  • Model 이 무엇?
  • Schema 가 무엇?


    A Mongoose model is a wrapper on the Mongoose schema. A Mongoose schema defines the structure of the document, default values, validators, etc., whereas a Mongoose model provides an interface to the database for creating, querying, updating, deleting records, etc.

1. Model

Model 이란 Schema 를 감싸주는 역할을 하는 것이다.

🤔 그럼 Schema는 뭘까?

2. Schema

만약에 어떤 상품에 관련된 글을 작성한다고 가정한다면

  • 그 글을 작성한 사람이 누구인지
  • 글을 작성할 때 그 포스트의 이름인 무엇인지 ex) 이 상품이 너무 마음에 들어요 🙂

등등 이렇게 하나하나 지정을 해 줄 수 있는게 Schema를 통해 할 수 있는 일이다. ✨

👏🏻 한마디로 스키마는 하나하나의 정보들을 지정해줄 수 있는것을 말한다.

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const productSchema = mongoose.Schema({   //여기부분을 schema(스키마)라고 한다.
    writer: {  				  //글을 작성한 사람이 누구인지
        type: Schema.Types.ObjectId,
        ref: 'User'
    },
    title: { 				  //글을 작성할 때 그 포스트의 이름인 무엇인지
        type: String,	   	          //이 포스트 이름의 타입은 무엇인지  ... 문자열
        maxlength: 50                     //그 글의 길이는 몇까지 될 수 있을지 지정
    },
    description: {  //
        type: String
    }
}, { timestamps: true })


const Product = mongoose.model('Product', productSchema)

module.exports = { Product }

3. User Model 만들기

① 작업폴더 / 파일 만들기

이전에 작업했던것에 이어서 새로운 폴더를 생성하고 그 안에 파일도 하나 만들어보자!

models 폴더 / User.js 파일

② User.js 파일에 코드 작성

  1. mongoose 모듈 가져오기
  2. 가져온 mongoose 모듈을 이용해서 Schema를 생성하기
  3. 생성한 Schema 안에서 하나하나 필드들을 작성
  4. 생성한 Schema를 모델로 감싸주기
  5. 만든 모델을 다른 파일에서도 쓸 수 있도록 export 해주기
const mongoose = require('mongoose');   //1. mongoose 모듈 가져오기
//const Schema = mongoose.Schema;

const userSchema = mongoose.Schema({  //2. 가져온 mongoose 모듈을 이용해서 Schema를 생성한다. 
  				      //3. 그리고 이 안에서 필드들을 작성한다.
    name: {
        type : String,
        maxlength: 50
    },
    email: {
        type: String,
        trim: true, //입력한 글에서 스페이스를 없애주는 역할
        unique: 1 //이메일은 유니크 햇으면 좋겠으니까 똑같은 이메일을 쓰지 못하도록 한다.
    },
    password: {
        type: String,
        minlength: 5
    },
    lastname: {
        type: String,
        maxlength: 50
    },
    role : { 
        type: Number, //ex) number가 1이면 관리자, 0이면 일반유저
        default: 0//만약 임의로 role을 지정하지 않는다면, default로 0을 주겠다.
    },
    image: String, //✨ object를 사용하지 않고, 그냥 이렇게도 작성해줄 수도 있다.
    token: {  //토큰을 이용해서 유효성 관리
        type: String
    },
    tokenExp: {  //토큰이 사용될 수 있는 기간
        type: Number
    }
})


//4. 생성한 Schema를 모델로 감싸주기
const User = mongoose.model('User', userSchema)   //Schema를 모델로 감싸준다고 했었는데 그게 이거다!
//✨ 모델의 이름이 User이고, mongoose.model(이 모델의 이름을 적어주고(='User'), 스키마를 여기에 넣어준다(='userSchema'))


//5. 만든 모델을 다른 파일에서도 쓸 수 있도록 export 해주기
module.exports = { User }  //마지막으로 할 일은! 이 User를(= 이 모델을) 다른 파일에서도 쓸 수 있도록 export 해주는거다🙂

trim 이란?
예를들어 email이 lucy cho@gmail.com ← 이렇게 lucy 와 cho 사이에 스페이스가 있는데 이 스페이스를 없애줘서 lucycho@gmail.com 를 만들어주는게 trim: true 의 역할이다.

role을 주는 이유?
어떤 유저는 관리자, 어떤 유저는 그냥 일반 유저가 될 수 있기 때문이다.



+ git

git 저장소 만들기

유저모델까지 만들었는데, 여기부터 이제 git 추적을 시작해보자! ✅
🤔 왜? → 만들고 있는 이 코드를 버전관리해야하기 때문이다 :)

  1. root directory에서 터미널 열기!
  2. git 저장소를 만들기 위해 git init 입력하기
  3. git의 상태를 보기위해 git status 를 입력해보기
  4. .gitignore 파일 만들어주기 (node_modules는 git 저장소에 올리지 않아도 되니까)

    → 이제 .gitignore 파일에 node_modules 를 써줬으니까, git 저장소에 저장하는 것에서 node_modules 폴더는 빠지게 된다
profile
Becoming a front-end developer 🌱

1개의 댓글

comment-user-thumbnail
2021년 6월 17일

몽구스 자료 찾아보다 샘솔님 게시물을 만났네용!❤️ 잘 읽고 갑니다~

답글 달기