간단한 예시로 Middleware를 알아보자
const express = require("express");
const server = express();
server.use((req,res,next => {
req.user = {
id: "1234",
};
next();
});
server.get("/", (req, res) => {
console.log(req.user);
res.sendFile(__dirname + "/index.html");
});
server.get("/about", (req, res) => {
res.sendFile(__dirname + "/about.html");
});
server.listen(3000, (err) => {
if (err) return console.log(err);
console.log("The server is listening on port 3000");
});
위와같이 NodeJS를 작성하면 서버가 실행되고 localhost:3000 으로 들어갔을때 server.get("/", ... /index.html
을 열기전에 무조건 server.use
를 지나오게 된다. 따라서 콘솔창에 id: "1234",
가 보이게 되는데 이처럼 요청이 들어와서 나가기전에 중간처리장치라고 생각할 수 있다.
const express = require("express");
const server = express();
server.use(express.static(__dirname + "/public"));
server.get("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});
server.get("/about", (req, res) => {
res.sendFile(__dirname + "/about.html");
});
server.use((req, res) => {
res.sendFile(__dirname + "/404.html");
});
server.listen(3000, (err) => {
if (err) return console.log(err);
console.log("The server is listening on port 3000");
});
Middleware의 필요성과 사용처를 가장 쉽게 알 수 있는 예시인거같아 가저왔다.
server.use(express.static(__dirname + "/public"));
server.use((req, res) => { res.sendFile(__dirname + "/404.html"); });
404.html
을 보여주게된다.
내가이해한 Middleware는 이 그림이 가장 비슷하게 상상된다. 모든 데이터의 이동이 Middleware를 지나치게되는
이런 요청과 응답사이 사용자,서버,DB어디끼리든 요청이 오가는한 영원한 while 반복문 가장위에서 항상 들리는 함수같은 느낌이든다.
Django의 Middleware는 이러하다 하는데 아직 잘모르겠다...
Django를 공부하면서 사용자가 페이지를 요청했을뿐인데 나는 view에서 request.user만 입력하면 그 사용자가 누구인지 알 수 있다. 이런것을 Django기본 Middleware에서 다 제공해주는 것이였다.
그래서 node로 이해가능한 수준에서 예시로 찾아보았다.
출처
https://www.youtube.com/watch?v=6vwMv6tH3O4
https://aws.amazon.com/ko/what-is/middleware/
https://sharplee7.tistory.com/52
https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=edusns1&logNo=221069285964
https://dongsik93.github.io/til/2020/02/12/til-django-middleware%281%29/