Node.js

MVC 디자인 패턴

Jinny96 2022. 9. 20. 15:25

MVC란 Model View Controller의 약자로 애플리케이션을 세 가지의 역할로 구분한 개발 방법론이다. 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다. 

 


1. Model

  • 데이터 처리 역할이다.
  • Database와 소통한다.
  • Controller에게 데이터를 전달한다.
  • View와 직접 소통하는 일은 없다.

2. View

  • 유저에게 화면을 보여주는 역할이다.
  • 데이터를 받고 그리는 역할을 수행한다.
  • Model과 소통하지 않고 Controller와 소통한다.
  • Controller에게 액션이나 데이터를 전달하고 전달받기만 한다.

3. Controller

  • View에서 액션과 이벤트에 대한 인풋 값을 받는다.
  • Model에게 전달해주기 전 데이터를 가공할 수 있다.
  • View와 Model에게 받은 데이터를 가공할 수 있다.

4. 적용

- 폴더구조 (controllers, models, routes 폴더 생성)

 

- server.js 수정 전

const express = require('express');
const app = express();
const path = require('path');
const PORT = 5000;

app.use(express.json());
var cors = require('cors');
app.use(cors());

app.get('/user', function (req, res) {
    res.json({ 
        name: "song",
        gender: "male"
    });
});

app.listen(PORT, () => {
    console.log(`Listening on port ${PORT}`)
});

 

- server.js 수정 후

$ npm install body-parser

 

const express = require('express');
const app = express();
const bodyParser = require("body-parser");
const PORT = 5000;

app.use(express.json());
var cors = require('cors');
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

require("./routes/user.routes.js")(app);

app.listen(PORT, () => {
    console.log(`Listening on port ${PORT}`)
});

 

 

- routes/user.routes.js 생성

module.exports = app => {
    const users = require("../controllers/user.controller.js");
    app.get("/user", users.findAll);
};

 

 

- /controllers/user.controller.js 생성

const User = require("../models/user.model.js");

exports.findAll = (req, res) => {
    User.getAll((err, data) => {
        if (err)
            res.status(500).send({
                message:
                    err.message || "Some error occurred while retrieving users."
            });
        else res.send(data);
    });
};

 

 

- /models/user.model.js 생성

const User = function (user) {
    this.name = user.name;
    this.gender = user.gender;
};

User.getAll = result => {
    result(null, {
        name: "song",
        gender: "male"
    })
};

module.exports = User;

5. 결과

$ nodemon server.js

$ npm start