본문 바로가기
Web - 백엔드/Node.js

[ Node.js ] mLab을 이용한 MongoDB 연결 - CRUD 구현 (1)

by 미래문 2019. 1. 28.
반응형

 


 

 

이전 포스트 보러가기

 

[Node.js] mLab을 이용한 MongoDB 연결 1

mLab 바로 가기 MongoDB Atlas Database | Multi-Cloud Database Service The multi-cloud database service at the heart of our developer data platform that accelerates and simplifies how you build with..

futuregate.tistory.com

 

이전 포스트 내용을 모르시는 분들은 위의 링크로 가셔서 보고 오시길 바랍니다.

이어서 작성하겠습니다. ㅎㅎ

다음으로, 데이터베이스에서 사용할 '모델'이 필요합니다. MySQL에서는 '테이블' 개념과 비슷하다고 볼 수 있습니다. 여기서는 학생에 대한 모델을 만들고 CRUD 를 구현해보도록 하겠습니다.

여기서 CRUD란 CREATE(생성), READ(읽기), UPDATE(수정), DELETE(삭제)의 약자입니다.

최상위 폴더에서 models 폴더를 만들고 Student.js 파일을 생성합니다.

 

그리고 Student.js 파일을 다음과 같이 작성합니다.

const mongoose = require('mongoose');
const Schema = mongoose.Schema; // create schema 

const StudentSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    score: {
        type: String,
        required: true
    }
});

module.exports = Student = mongoose.model('student', StudentSchema);

mongoose모듈 안에 있는 Schema 오브젝트를 통해서 새로운 스키마를 만들어 볼 수 있습니다.

저는 간단히 이름과 점수정도만 넣어 주었는데요, {} 부분에 json형태로 다른 항목을 추가하거나 수정하셔도 무방합니다.

마지막으로 module.exports를 통해서 외부에서 Student라는 이름으로 사용할 수 있도록 하고,

mongoose에서 student 스키마를 추가 시킵니다. 이때 주의하셔야 할것은 몽고 db에서 스키마 이름은 소문자로 구성되어야 한다는 것입니다.

그 뒤, server.js 에서 app.get 함수의 내용을 수정하도록 합니다.

(create 파트를 먼저 구현하겠습니다.)

server.js

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

const app = express();

const Student = require('./models/Student');

app.use(bodyParser.json());

const db = require('./config/keys').mongoURI;
mongoose.connect(db, {
    useNewUrlParser: true
}).then(() => console.log("몽고 DB가 연결되었습니다.")).catch(err => console.log(err));


app.post('/', (req, res) => {
    const newStudent = new Student({
        name: req.body.name,
        score: req.body.score
    });
    newStudent.save().then(student => res.json(student));
});


app.listen(5000, (req, res) => {
    console.log("서버 실행중..");
});

라우터 부분은 따로 추가하지는 않았는데요, 원래대로라면 app.post부분은 라우터로 분리를 시켜주는 것이

가독성과 유지보수 면에서 더 좋습니다. 지금은 그냥 진행하도록 하겠습니다. 코드의 상단에서,

const Student = require('./models/Student');

를 통해서 위에서 만들었던 Student 스키마를 불러옵니다.

그다음, app.post를 통해 create 연산을 할 수 있도록 합니다.

app.post('/', (req, res) => {
    const newStudent = new Student({
        name: req.body.name,
        score: req.body.score
    });
    newStudent.save().then(student => res.json(student));
});

여기서 app.get이 아닌 app.post라는 것에 신경을 써주셔야합니다. 나중에 접근할때는 일반적으로 get방식으로 접근하면, 없는 페이지라고 뜨기 때문에 post방식으로 접근을 하여야 합니다.

코드에서, newStudent라는 변수에 json 형식으로 새로운 학생의 정보를 저장합니다. req.body 는 저번 포스트에서 다룬 body-parser 모듈로부터 post방식을 통해 넘어오는 인자들을 파싱해서 얻어지는 것입니다.

학생 정보를 받았다면, 새로운 학생을 데이터베이스에 저장하고, 저장된 학생의 정보를 페이지에 출력해보도록 하였습니다.

자, 이제 테스트를 해보아야 하는데 크롬이나 익스플로러등의 일반 브라우저로는 post방식으로 페이지에 접근하기가 어렵습니다. 그래서 이를 좀 더 편하게 접근하기 위한 프로그램이 있는데 바로 postman 이라는 프로그램입니다.

포스트맨 설치하기

위의 사이트로 가셔서 포스트맨을 설치하도록 합니다. (설치 과정은 다루지 않겠습니다.)
설치후, 서버를 실행시키고, 포스트맨을 실행시켜서 주소를 입력한 뒤, POST방식으로 변경해줍니다.

 

그 다음으로 아래의 탭중에서 Body를 선택하고, raw를 선택한 후, 옆에 나오는 선택리스트에서 JSON을 선택해 줍니다.

 

마지막으로, json 형태로 학생의 정보를 입력하여 줍니다.

{
    "name": "홍길동",
    "score": 100
}

완료 했다면, SEND를 눌러서 결과를 확인합니다. 스크롤을 내려서 밑으로 가면 결과가 보입니다.

 

결과가 이와 같다면 성공한 것입니다. 또한, 확인을 위해 mLab에서도 확인해 줍니다.

 

mLab페이지에 Collections항목에 students라는 새로운 스키마가 생성된 것을 볼 수 있습니다.
클릭해서 자세히 보면,

 

학생의 정보가 올바르게 들어간 것을 확인 할 수 있습니다.

다음은 Read입니다. 다시 server.js를 수정하여 아래와 같이 작성합니다.

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

const app = express();

const Student = require('./models/Student');

app.use(bodyParser.json());
const db = require('./config/keys').mongoURI;
mongoose.connect(db, {
    useNewUrlParser: true
}).then(() => console.log("몽고 DB가 연결되었습니다.")).catch(err => console.log(err));


app.post('/', (req, res) => {
    const newStudent = new Student({
        name: req.body.name,
        score: req.body.score
    });
    newStudent.save().then(student => res.json(student));
});

app.get('/', (req, res) => {
    Student.find().then(students => res.json(students));
});

app.listen(5000, (req, res) => {
    console.log("서버 실행중..");
});

추가된 부분은 아래와 같습니다.

// Read
app.get('/', (req, res) => {
    Student.find().then(students => res.json(students));
});

Student 객체에서 find라는 함수를 통해서 Student 스키마에 존재하는 모든 요소들을 students라는 변수에 가지고 옵니다. 그 후 단순히 json형태로 출력합니다.

테스트를 위해서, 브라우저를 이용해도 좋고 포스트맨을 이용해도 좋습니다. 저는 브라우저를 이용해서 확인해 보도록 하겠습니다.

 

localhost:5000/에 접속하니 위와같이 표시되는 것을 확인 할 수 있습니다.

반응형

댓글