백엔드-노드

노드 실전

강사: 오백엔드 · 작성자: 이종춘 · 작성일: 2026-07-08 18:05:40 · 조회수: 3

21강. Node.js 실무 프로젝트 구조(MVC 패턴)
목록으로
21강. Node.js 실무 프로젝트 구조(MVC 패턴)

이번 강의에서는 실무에서 가장 많이 사용하는 MVC(Model-View-Controller) 구조를 배웁니다.

목표: 하나의 파일에 모든 코드를 작성하지 않고, 기능별로 분리하여 유지보수하기 쉬운 프로젝트를 만들 수 있습니다.

1. MVC란?

MVC는 프로젝트를 역할별로 나누는 설계 방식입니다.

Model : 데이터베이스 처리
View : 화면(EJS, HTML, React)
Controller : 비즈니스 로직 처리

2. MVC 구조
사용자



Route



Controller



Model



MySQL



Controller



View(JSON/EJS)



사용자

3. 프로젝트 구조
node-project

├── app.js
├── package.json
├── .env

├── config
│ db.js

├── routes
│ member.js
│ board.js

├── controllers
│ memberController.js
│ boardController.js

├── models
│ memberModel.js
│ boardModel.js

├── middleware
│ auth.js

├── uploads

├── public

└── views

4. app.js
const express = require("express");

const memberRouter = require("./routes/member");
const boardRouter = require("./routes/board");

const app = express();

app.use(express.json());

app.use("/member", memberRouter);
app.use("/board", boardRouter);

app.listen(3000, () => {

console.log("Server Running");

});

5. Route 만들기

routes/member.js

const express = require("express");

const router = express.Router();

const memberController = require("../controllers/memberController");

router.get("/", memberController.list);

router.post("/", memberController.insert);

module.exports = router;

6. Controller 만들기

controllers/memberController.js

const memberModel = require("../models/memberModel");

exports.list = (req, res) => {

memberModel.list((result) => {

res.json(result);

});

};

exports.insert = (req, res) => {

memberModel.insert(req.body, () => {

res.send("회원 등록 완료");

});

};

7. Model 만들기

models/memberModel.js

const db = require("../config/db");

exports.list = (callback) => {

const sql = "SELECT * FROM member";

db.query(sql, (err, result) => {

callback(result);

});

};

8. DB 연결

config/db.js

const mysql = require("mysql2");

const db = mysql.createConnection({

host: "localhost",
user: "root",
password: "1234",
database: "node_db"

});

module.exports = db;

9. Controller 역할

Controller는

데이터 검증
로그인 확인
Model 호출
결과 반환

을 담당합니다.

Controller



회원가입 검사



Model 호출



JSON 반환

10. Model 역할

Model은

SQL 작성
INSERT
UPDATE
DELETE
SELECT

만 담당합니다.

Model



SQL 실행



MySQL



결과 반환

11. Route 역할

Route는

GET

/member



memberController.list

처럼 URL과 Controller를 연결합니다.

12. Middleware
function auth(req, res, next){

console.log("로그인 확인");

next();

}

사용

router.get("/mypage",

auth,

memberController.mypage);

13. 환경 변수(.env)

설치

npm install dotenv

.env

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=1234
DB_NAME=node_db
PORT=3000
JWT_SECRET=mySecretKey

app.js

require("dotenv").config();

사용

process.env.DB_HOST

14. 실제 프로젝트 구조
쇼핑몰



├── 회원

├── 상품

├── 주문

├── 장바구니

├── 관리자

└── 결제

각 기능마다

routes

controllers

models

를 하나씩 만듭니다.

15. 게시판 구조
board



├── board.routes.js

├── board.controller.js

├── board.model.js

16. 회원 구조
member



├── member.routes.js

├── member.controller.js

├── member.model.js

17. API 흐름
React



GET /member



Route



Controller



Model



MySQL



JSON



React

18. 실습 1

회원 Route 만들기

routes/member.js

19. 실습 2

회원 Controller 만들기

controllers/memberController.js

20. 실습 3

회원 Model 만들기

models/memberModel.js

21. 실무에서 많이 사용하는 폴더
project



├── config

├── routes

├── controllers

├── models

├── middleware

├── utils

├── services

├── uploads

├── public

└── views

추가 폴더 설명

폴더 역할
services 비즈니스 로직 분리
utils 공통 함수(날짜, 암호화 등)
middleware 인증, 권한, 로그 처리
config DB, 환경 변수 설정

22. MVC의 장점
유지보수가 쉽다.
기능별로 역할이 명확하다.
여러 명이 동시에 개발하기 좋다.
코드 재사용성이 높다.
프로젝트 규모가 커져도 관리하기 쉽다.

23. 이번 강의 핵심 정리
구성 요소 역할
Route URL 연결
Controller 요청 처리 및 비즈니스 로직
Model 데이터베이스 처리
View 화면(EJS/React)
Middleware 공통 기능 처리
Config 환경 설정
실무 팁

실무에서는 Controller에 SQL을 직접 작성하지 않습니다.

좋은 구조는 다음과 같습니다.

React



Route



Controller



Service (선택)



Model



MySQL

Service 계층을 추가하면 복잡한 비즈니스 로직을 Controller에서 분리할 수 있어 대규모 프로젝트에서 특히 유용합니다.

실습 미션

다음 기능을 MVC 구조로 분리해 보세요.

✅ 회원관리
✅ 로그인
✅ 게시판
✅ 댓글
✅ 파일 업로드
✅ JWT 인증
#21강. Node.js 실무 프로젝트 구조(MVC 패턴)

첨부 파일

0개
첨부된 파일이 없습니다.

댓글 / 답글

0개
댓글을 작성하려면 로그인하세요.
아직 댓글이 없습니다.