1. MVC란 무엇인가?
MVC(Model-View-Controller)는 애플리케이션의 코드 구조를 모델(Model), 뷰(View), 컨트롤러(Controller) 세 부분으로 분리하는 소프트웨어 디자인 패턴이다.
이 패턴을 사용하면 코드의 구조화와 유지보수가 쉬워지고, 역할별로 모듈화할 수 있어 확장성이 높아진다.
- Model (모델) → 데이터 및 비즈니스 로직을 처리한다.
- View (뷰) → 사용자에게 보이는 화면을 담당한다.
- Controller (컨트롤러) → 사용자 요청을 받아 Model과 View를 연결하는 역할을 한다.
2. MVC 패턴의 구조
사용자 ←→ [Controller] ←→ [Model]
↓
[View]
1) Model (모델)
- 애플리케이션의 데이터(데이터베이스)와 비즈니스 로직을 담당한다.
- 데이터의 생성, 수정, 삭제 등을 수행한다.
- 예) 사용자의 정보를 저장하는 User 모델.
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: String,
email: String,
password: String
});
module.exports = mongoose.model('User', UserSchema);
2) View (뷰)
- 사용자에게 보여지는 화면(UI)를 담당한다.
- Express.js에서 Pug, EJS, React 등을 사용해 구현할 수 있다.
- API 서버라면 JSON 응답을 반환하는 것이 뷰 역할을 대신할 수도 있다.
app.get('/user/:id', async (req, res) => {
const user = await User.findById(req.params.id);
res.json(user); // API 서버에서는 JSON이 View 역할을 한다.
});
3) Controller (컨트롤러)
- 사용자의 요청을 받아 Model과 View를 연결하는 역할을 한다.
- Model에서 데이터를 가져와 가공 후 View에 전달한다.
- 예) 사용자 정보를 요청하면 User 모델에서 데이터를 가져와 JSON으로 반환.
const User = require('../models/userModel');
const getUser = async (req, res) => {
try {
const user = await User.findById(req.params.id);
res.json(user);
} catch (err) {
res.status(500).json({ error: '사용자를 찾을 수 없습니다.' });
}
};
module.exports = { getUser };
3. Express.js에서 MVC 패턴 적용하기
프로젝트 구조 예시:
/project
│── server.js # 메인 서버 파일
│── routes
│ ├── userRoutes.js # 라우트 설정
│── controllers
│ ├── userController.js # 컨트롤러
│── models
│ ├── userModel.js # 모델
1) 서버 설정 (server.js)
const express = require('express');
const app = express();
const userRoutes = require('./routes/userRoutes');
app.use(express.json());
app.use('/users', userRoutes);
app.listen(3000, () => console.log('서버가 3000번 포트에서 실행 중입니다.'));
2) 라우트 설정 (routes/userRoutes.js)
const express = require('express');
const router = express.Router();
const { getUser } = require('../controllers/userController');
router.get('/:id', getUser);
module.exports = router;
3) 컨트롤러 (controllers/userController.js)
const User = require('../models/userModel');
const getUser = async (req, res) => {
try {
const user = await User.findById(req.params.id);
res.json(user);
} catch (err) {
res.status(500).json({ error: '사용자를 찾을 수 없습니다.' });
}
};
module.exports = { getUser };
4) 모델 (models/userModel.js)
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: String,
email: String,
password: String
});
module.exports = mongoose.model('User', UserSchema);
4. MVC 패턴을 사용하는 이유
✅ 코드 분리 → 역할별로 파일을 분리하여 유지보수 용이 ✅ 재사용성 → Model과 Controller는 여러 View에서 재사용 가능 ✅ 확장성 → 새로운 기능 추가 시 구조 변경 없이 쉽게 확장 가능 ✅ 협업 용이 → 프론트엔드/백엔드 개발자가 역할을 분리하여 작업 가능
5. 결론
MVC 패턴은 Node.js + Express.js 백엔드에서 API 서버를 만들 때 코드를 체계적으로 관리할 수 있도록 도와주는 아키텍처 패턴이다.
- Model: 데이터베이스 및 비즈니스 로직 담당
- View: 사용자에게 보여지는 UI 또는 API 응답 (JSON)
- Controller: 요청을 받아 Model과 View를 연결
Express.js에서 API 서버를 개발할 때 프로젝트 규모가 커지면 MVC 구조를 적용하는 것이 유지보수와 협업에 도움이 된다. 🚀
'Backend Study' 카테고리의 다른 글
Node.js와 Sequelize: 효율적인 데이터베이스 ORM 활용 (0) | 2025.02.02 |
---|---|
Node.js에서 MySQL 연결하기 (0) | 2025.02.01 |
SQL vs NoSQL (0) | 2025.01.31 |
Express.js란 무엇인가? (0) | 2025.01.31 |
Node.js 백엔드(Web)의 기본 동작 원리 (0) | 2025.01.30 |