[Express+node.js] MongoDB 스키마 적용하기
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