코드 스터디

[Express+node.js] MongoDB 스키마 적용하기

Recstasy 2021. 10. 1. 07:25

centOS에서 ctrl + C키를 입력하면, 아래와 같이 'bye'알림과 함께 mongoDB가 종료된다.

 

 

그리고 서버를 재부팅한 뒤에 다시 몽고DB를 실행했을 때 아래와 같은 'status =14'경고가 나올 수 있다. 

위의 경고는 몽고DB 서버를 켜지 않고 mongod를 실행했기 때문에 나타나는 오류인데, 몽고DB를 처음 접하다보면 누구나 '14번 오류'를 겪을 수 있다. 몽고DB 서버는 관리자 권한을 얻어야만 실행을 할 수 있고, 서버를 시작하기 위해서는 반드시 sudo를 입력해줘야 한다. 이를 깜빡하다보면, 몽고DB가 켜진 줄 착각한 상태에서 db명령어를 입력하는 실수를 저지를 수 있으니 주의하자.

 

 

 


1 몽고DB 기본 명령어

몽고DB 실행과 관련된 기본적인 명령어는 크게 다음과 같이 정리할 수 있다.

 

기능 실행
시작 sudo systemctl start mongod
종료 sudo systemctl stop mongod
상태 조회 sudo systemctl status mongod
로그(기록) 조회 sudo tail mongod.log
재실행 sudo systemctl restart mongod
자동 재시작 설정
(서버 부팅시)
sudo systemctl enable mongodb
자동 재시작 중지
(서버 부팅시)
sudo systemctl disable mongodb
장치 오류
(.conf파일 수정시)
sudo systemctl daemon-reload
방화벽 해제 sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
특정폴더
DB관리자 권한지정
sudo chown -R mongod:mongod <폴더경로>
설치                                     1] sudo nano /etc/yum.repos.d/mongodb-org.repo

                                2] nano or vim 에디터에서 입력 & 저장(Ctrl + o) & exit(Ctrl + x)
     [mongodb-org-5.0]
     name=MongoDB Repository
     baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
     gpgcheck=1
     enabled=1
     gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

                                            3] sudo yum install -y mongodb-org
삭제 sudo service mongod stop

sudo yum erase $(rpm -qa | grep mongod-org)

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo

 

위의 명령어를 참고하여 몽고DB를 설치한다.

 

 

 

 

 

 

 


2 Mongoose 설치

몽고DB 스키마를 이용할 수 있는 mongoose를 설치한다.(npm install --save mongoose)

현재 테스트 파일 & 폴더구조는 아래와 같은 상태이며, database.js를 추가적으로 생성한다.

 

 

 

 


3 서버 실행

  3-1 index.js

const express = require('express');
const app = express();

//템플릿 설정
app.set('view engine', 'pug');
app.set('views', 'views');


//라우팅
const loginRoute = require('./routes/loginRoute');
app.use('/login', loginRoute);


//메인 페이지 
app.get('/', (req,res)=>{
	res.send('hello world');
})

//https 서버연결
app.listen(3005);

 

 

 3-2 database.js

const mongoose = require('mongoose');

class Database{

    constructor(){
        this.connect();
    }

    connect(){
        mongoose.connect("mongodb://localhost:27017/test_db")
        .then(()=>{
            console.log('Database connection successful!');
        })
        .catch((err)=>{
            console.log('Database connection error : '+ err);
        })
    }
}

module.exports = new Database();

 

 

3-3 실행

 

 

node index.js 명령어로 서버를 실행해보자. database.js의 조건문(연결성공)의 콘솔이 나타난다. [정상 실행] 

 

 

 

 


4 스키마 생성

DB 스키마 파일을 따로 관리할 수 있는 폴더를 생성한다.

간략하게 유저와 관련된 스키마를 생성한다면 아래와 같다.

 

//UserSChema.js

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

const UserSchema = new Schema({
    username : { type: String, required : true, trim : true, unique :true },
    email : { type: String, required : true, trim : true, unique : true},
    password : { type:String, required:true },
    profilePic : { type:String, default:"/images/profilePic.png"},

},{ timestamps:true });

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

 

 

위에서 생성한 스키마는 라우트에서 아래와 같이 모듈로 사용할 수 있다.

 

//...중략
const User = require('../schemas/UserSchema');

router.post('/', async(req, res, next)=>{

	//생략...
    
    let user = await User.findOne({
    	$or:[
        	{ username : username },
            { email : email }
        ]
    }) //user End
    
    
    //DB User 스키마 생성
    User.create(data)
    	.then((user)=>{
        	req.session.user = user;
            return res.redirect('/');
        })

	//생략...

})

 

 

DB 쿼리에 관한 내용은 mongoose 사이트에서 확인할 수 있다.

 

https://mongoosejs.com/docs/queries.html 

 

Mongoose v6.0.8: Queries

Queries Mongoose models provide several static helper functions for CRUD operations. Each of these functions returns a mongoose Query object. A mongoose query can be executed in one of two ways. First, if you pass in a callback function, Mongoose will exec

mongoosejs.com