Middleware
λ―Έλ€μ¨μ΄(Middleware)λ ν΄λΌμ΄μΈνΈμ μμ²(req)μ΄ Controllerμ λλ¬νκΈ° μ λλ μλ΅(res)μ 보λ΄κΈ° μ μ
곡ν΅μ μΌλ‘ μ²λ¦¬ν΄μΌ ν μμ
μ κ°λ‘μ±μ μννλ ν¨μμ
λλ€.
λ―Έλ€μ¨μ΄ λͺ©μ | μμ ν¨μ μ΄λ¦ | μ€λͺ |
---|---|---|
μΈμ¦ | auth.js | JWT ν ν°μ΄ μ ν¨νμ§ κ²μ¬ |
μ ν¨μ± κ²μ¬ | validator.js | req.bodyμ κ° μ²΄ν¬ |
μλ¬ νΈλ€λ§ | error.js | λͺ¨λ μ€λ₯λ₯Ό ν κ³³μμ μ²λ¦¬ |
λ‘κΉ | logger.js | μμ² μκ°, κ²½λ‘ κΈ°λ‘ |
β
λ―Έλ€μ¨μ΄λ MVCμ ν΅μ¬ κ³μΈ΅(Model, View, Controller) μμλ μνμ§ μμ§λ§,
Controller μλ¨μμ λμνλ 보쑰 κ³μΈ΅ (Pre-controller Layer) μν μ ν©λλ€.
β Controller μλ¨μμ μμ²μ κ±Έλ¬λ΄κ±°λ κ°κ³΅νλ μν
β Viewλ Modelκ³Όλ μ§μ μ μΈ κ΄κ³λ μμ
[μ¬μ©μ μμ²]
β¬
[π‘ λ―Έλ€μ¨μ΄ (Middleware)]
β¬
[π§ 컨νΈλ‘€λ¬ (Controller)]
β¬
[πΎ λͺ¨λΈ (Model)]
β¬
[μλ΅ λ°ν]
book-shop/
βββ app.js
βββ routes/
β βββ users.js // URL μ μ + λ―Έλ€μ¨μ΄ μ°κ²°
βββ controllers/
β βββ UserController.js
βββ middlewares/
β βββ auth.js // JWT μΈμ¦
β βββ validator.js // μ ν¨μ± κ²μ¬
β βββ errorHandler.js // κ³΅ν΅ μλ¬ μ²λ¦¬
βββ models/
β βββ User.js
const express = require('express');
const router = express.Router();
const auth = require('../middlewares/auth');
const UserController = require('../controllers/UserController');
router.get('/mypage', auth, UserController.getMyPage);
module.exports = (req, res, next) => {
const token = req.cookies.token;
if (!token) return res.status(401).json({ message: 'λ‘κ·ΈμΈ νμ' });
try {
const decoded = jwt.verify(token, process.env.PRIVATE_KEY);
req.user = decoded;
next(); // λ€μμΌλ‘
} catch (err) {
res.status(403).json({ message: 'μ ν¨νμ§ μμ ν ν°' });
}
};
β’ λ―Έλ€μ¨μ΄λ λ°λμ next()λ₯Ό νΈμΆν΄μΌ λ€μ λ―Έλ€μ¨μ΄λ 컨νΈλ‘€λ¬λ‘ λμ΄κ°
β’ express.json()μ²λΌ μ μμμ κ°μ₯ λ¨Όμ μ μ©λμ΄μΌ νλ λ―Έλ€μ¨μ΄λ μ‘΄μ¬
// middlewares/logger.js
module.exports = (req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.originalUrl}`);
next();
};
const express = require('express');
const logger = require('./middlewares/logger');
const app = express();
app.use(logger); // μ μμΌλ‘ μ μ©
// μ μ μ μ©
app.use(express.json());
// κ°λ³ μ μ©
router.post('/join', validateUser, UserController.join);
// middlewares/errorHandler.js
module.exports = (err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ message: 'μλ² λ΄λΆ μ€λ₯ λ°μ' });
};
app.use(require('./middlewares/errorHandler'));
νλͺ© | μ€λͺ |
---|---|
μν | Controller μ Β·ν κ³΅ν΅ μμ μ²λ¦¬ (μ μ²λ¦¬κΈ°) |
μ μ vs κ°λ³ κ΅¬λΆ | λͺ¨λ λΌμ°ν°μ μ μ© vs μΌλΆ λΌμ°ν°μλ§ μ μ© |
μμ | μΈμ¦, μ ν¨μ± 체ν¬, λ‘κ·Έ, μλ¬ νΈλ€λ§ λ± |
MVC λ΄ μμΉ | Controller κ³μΈ΅μ 보쑰 κ³μΈ΅μΌλ‘, ꡬ쑰 μΈκ³½μμ λμ |
λ―Έλ€μ¨μ΄λ₯Ό μ νμ©νλ©΄ 볡μ‘ν λ‘μ§μ Controllerμμ λΆλ¦¬νμ¬
μμ² νλ¦μ κΉ¨λνκ² μ 리νκ³ , μ€λ³΅μ μ€μ΄λ ν΅μ¬ μμμ
λλ€.
μ μͺΌκ°μ μ μ©νλ©΄ μ½λ κ°λ
μ±, μ μ§λ³΄μμ±, νμ₯μ± λͺ¨λ μ’μμ§λλ€.