-
10장 mongoose (몽구스) 를 이용한 MongoDB 스키마 생성, CRUD 작업 (1)MeanStack (deprecated) 2016. 6. 16. 00:40
이번엔 mongoose 를 이용해서 MongoDB 스키마를 만들어보겠다.
MongoDB는 collection 을 사용해 데이터를 저장하기 때문에 궂이 스키마를 정의해 document 의 구조가 동일하게
만들 필요는 없지만, 살아가다 보면 종종(?) document 가 유사 할 필요가 있다.
mongoose 는 Schema 객체를 사용해 MongoDB의 Model 을 정의한다.
그럼 바로 Schema를 정의해보자.
새로운 Model 을 정의하기 위해 app/models 폴더로 가서 user.server.model.js 파일을 생성하고 , 코드를 작성하자.
var mongoose = require('mongoose'), Schema = mongoose.Schema; var UserSchema = new Schema({ username : String , userid : String , password : String , email : String }); mongoose.model('User', UserSchema);
먼저 mongoose 의 Schema 생성자를 통해서 UserSchema 객체를 정의하고 User 모델을 정의하기 위해
UserSchema 를 이용하였다. 이제 이 모델을 사용하기 위해 mongoose 환경 구성파일에 User 모델을 등록해보자.
config 폴더로가서 mongoose.js 파일을 수정하자.
var config = require('./config'), mongoose = require('mongoose'); module.exports = function() { var db = mongoose.connect(config.db); require('../app/models/user.server.model.js'); return db; }
중간에 require('../app/models/user.server.model.js') 를 넣어서 mongoose 로 정의한 모델을 적용시켰다.
이제 이 모델을 이용하여 CRUD 작업을 해보자.
사용자에 관련된 CRUD 작업을 정리하기 위해 Users 컨트롤러를 만드는 것 이 바람직하다.
app/controllers 폴더에 users.server.controller.js 파일을 만들고 여기에 코드를 넣자.
var User = require('mongoose').model('User'); exports.create = function(req,res,next) { var user = new User(req.body); user.save(function(err){ if(err) { return next(err); } else { res.json(user); } }); };
먼저 mongoose 모듈을 사용해서 정의해 두었던 User 모델을 불러온다. 그리고 create 라는 컨트롤러 메소드를
만들어서 새로운 User 인스턴스 ,즉 User 에 정의된 스키마에 맞춘 새로운 document 형식을 만들고 거기에는
request.body 데이터를 넣을 것 이다.
그리고 mongoDB 의 세이브 명령어를 사용해 mongoDB에 저장할 것 이고 에러가 난다면 next(err) 오류를
다음 미들웨어로 넘기고, 에러가 없다면 저장된 데이터를 json 방식으로 응답할 것 이다.
이제 컨트롤러를 만들었으니 사용자가 사용할 때 해당 컨트롤러로 길을 인도할 라우팅 집합을 만들어보자.
app/routes 폴더로 가서 users.server.routes.js 파일을 만들고 코드를 작성하자.
var users = require('../../app/controllers/users.server.controller'); module.exports = function(app) { app.route('/users').post(users.create); };
먼저 위에 정의했던 컨트롤러를 불러오고 express 의 라우팅 기능으로 post 형식으로 /users 로 들어오면
컨트롤러의 create 메소드를 실행하도록 되어있다.
나중에 angular.js 를 위해서 주로 RESTful API 형태로 서비스 하기 때문에, REST 원칙에 맞춰 라우팅 구성을
맞춰야 한다.
config 폴더로 가서 express_config.js 를 수정하여 보자.
var express = require('express'), morgan = require('morgan'), compress = require('compression'), bodyParser = require('body-parser'), methodOverride = require('method-override'), config = require('./config'), session = require('express-session') ; module.exports = function() { var app = express(); if(process.env.NODE_ENV === 'development') { app.use(morgan('dev')); } else if (process.env.NODE_ENV === 'production') { app.use(compress()); } app.use(bodyParser.urlencoded({ extended : true })); app.use(bodyParser.json()); app.use(methodOverride()); app.use(session({ saveUninitialized : true, resave : true, secret : config.sessionSecret })); app.set('views','./app/views'); app.set('view engine', 'ejs'); require('../app/routes/index.server.routes.js')(app); require('../app/routes/users.server.routes.js')(app); // 라우팅 추가 app.use(express.static('./static')); return app; }
추가 한 것은 위에서 만든 라우팅 파일을 추가 하였다.
자 이젠 테스트를 해보자.
먼저 cmd 에서 mongod 를 명령어로 실행해서 몽고디비를 켜고 StartApp.js 를 실행하자.
테스트를 위해서는 아까 mongoose 로 정의해 두었던 속성에 맞게 POST 형식으로 Json 을 보내야 되는데
이걸 일일이 주소창에 치고 있을려니 짜증이 날 것이다.
그래서 이번기회에 아주 유용한 Application 을 소개하겠다. 구글 크롬 WebStore 에 있는 Postman 이라는
application 인데 , web application 을 테스트하기에 아주 좋은 프로그램이다.
구글에서 postman 이라고 검색하면 해당 프로그램이 나오므로 바로 받아서 설치를 하자.
postman 을 설치하고 실행하면 아래와 같은 화면이 나온다. (sign in 을 하라는 문구는 skip 을 하자.)
보기만 해도 사용법을 알 것 이다.
먼저 GET 부분을 POST로 바꾸고 주소창에 라우팅파일에 정의했던 http://localhost:3000/users 로 적은 뒤
body 탭으로 가서 raw 로 바꾼 뒤 json으로 설정을 하고 본문을 적자.
{
"username" : "firstUser"
, "userid" : "firstid"
, "password" : "password1"
, "email" : "email@email.com"
}
최종적으로 아래 그림과 같이 되어야 한다.
자 이젠 Send 를 실행하자.
제대로 전송이 되고 저장이 되었다면 아래 그림과 같이 응답이 와야 한다.
이제 mongoDB 로 가서 제대로 저장이 되었는지 확인해보자.
새로운 cmd 창을 열고 mongo database 를 실행하여 database db 로 접속을 한다.
이제 show collections 를 실행해보면 users 라는 collection 이 생긴 것이 보일 것이다.
db.users.find() 로 users 에 있는 데이터를 보자 . 위에서 입력했던 데이터가 들어있는 것 을 볼 수 있을 것이다.
유저를 생성하는 것을 만들었으니 이번에 find() 메소드를 구현해보자.
app/controllers/ 폴더의 users.server.controller.js 파일로 가서 위에 만들었던 create 메소드 밑에
list 메소드를 추가하자.
exports.list = function(req,res,next) { User.find(function(err,users) { if(err) { return next(err); }else{ res.json(users) } }) }
find 명령어를 사용하고 콜백함수에 인자로 users 라는 collection 이름을 넣어서 에러가 없을 경우 users 컬렉션의
find 명령어에 대한 데이터를 응답할 것 이다.
이제 라우팅을 추가 해야 하니 app/routes 폴더로 가서 users.server.controller.js 파일을 수정하자.
var users = require('../../app/controllers/users.server.controller'); module.exports = function(app) { app.route('/users') .post(users.create) .get(users.list); };
기존 post create 밑에 get(users.list) 를 추가 하였다.
이제 서버를 재시작하고 postman으로 가서 get 방식으로 http://localhost:3000/users 로 send 해보자.
위 그림과 같이 현재 users 에 있는 데이터들이 응답할 것 이다.
이제 어느정도 mongodb를 활용하기 시작했다. 다음 장에는 단일 사용자를 찾는 findOne() 메소드와
유저의 정보를 갱신하는 update , 그리고 delete 작업을 추가하고 mongoose 스키마에 옵션을 주는
방법을 알아 볼 것이다.
HTTP Verbs
GET - get a resource
POST - create a resource
PATCH - update a resource
PUT - replace a resource
DELETE - Delete a resource
(끝)
( 현재 까지 폴더 구조)
'MeanStack (deprecated)' 카테고리의 다른 글
12장 mongoose(몽구스) 를 이용한 스키마 확장 (1) 2016.06.19 11장 mongoose (몽구스) 를 이용한 MongoDB 스키마 생성, CRUD 작업 (2) (1) 2016.06.16 9장 mongoose (몽구스) 를 이용한 Mongodb 연결 (4) 2016.06.14 8장 MeanStack 의 또 다른 조각 MongoDB 를 알아보자 (0) 2016.06.13 7장 express 를 활용한 session 처리 (2) 2016.06.12