1️⃣ 서론
안녕하세요 오늘은 Express의 미들웨어 사용법에 대해 자세하게 알아보는 시간을 가져보려고 합니다.
먼저 미들웨어가 무엇인지 어떻게 사용하는 것인지에 대해 알아보고 종류와 각각의 사용법들에 대하여 알아보도록 하겠습니다.
본 포스팅은 공식 문서를 보고 제가 복습할 때 보기 좋게 만든 포스팅입니다. 좀더 전문화된 글을 읽고 싶으시다면 공식문서를 참조해 주세요.
그럼 시작하겠습니다.
2️⃣ 미들웨어란?
미들웨어 함수는 어플리케이션 요청-응답 사이클 동안 (req)요청 객체, (res)응답 객체, next() 함수에 대한 엑세스 권한을 갖는 함수입니다.
즉, 미들웨어 함수는 요청이 오면 응답을 하기전에 거쳐가는 함수라고 보시면 될 것 같습니다.
여기서 생소한 함수가 next()일텐데요.
이 함수는 익스프레스 라우터 안의 함수로써 호출될 때 현재 미들웨어에 이어 미들웨어가 실행됩니다.
3️⃣ 미들웨어 예시
간단한 미들웨어 myLogger 함수를 만들어 보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var express = require("express");
var app = express();
var myLogger = function (req, res, next) {
console.log("LOGGED");
next();
};
app.use(myLogger);
app.get("/", function (req, res) {
res.send("Hello World!");
});
app.listen(3000);
위의 코드처럼 쓰고 /
경로로 접속한다면 먼저 app.use()를 통해 myLogger함수가 실행됩니다.
그 후 성공적으로 myLogger 함수가 실행된 후 app.get(‘/’) 함수가 실행되게 됩니다.
이 때 주의해야할점은 미들웨어를 쓸 때는 마지막에 next()가 들어가야한다는 점입니다.
4️⃣ Express 미들웨어 종류
Express 미들웨어 종류는 크게 5가지가 있습니다.
- Application-level middleware
- Router-level middleware
- Error-handling middleware
- Built-in middleware
- Third-party middleware
크게 이렇게 나눌 수 있는데요 그럼 이제 하나하나 살펴보며 각각 어떤 종류인지 알아보도록 하겠습니다.
5️⃣ Application-level middleware
app.use() 와 app.METHOD(여기서 METHOD는 GET, PUT, POST등의 HTTP 메서드를 의미)함수를 사용함으로써 애플리케이션 레벨의 미들웨어를 앱에 바인딩하는 것을 의미합니다.
1
2
3
app.get("/user/:id", function (req, res, next) {
res.send("USER");
});
가장 간단한 예로 위와 같이 라우팅하는 미들웨어를 의미합니다.
6️⃣ Router-level middleware
router-level 미들웨어또한 express.Router()
를 사용한다는것 빼고는 application-level 미들웨어와 같은 방식으로 동작합니다.
express.Router()는 라우터를 모듈화할때 매우 유용한 기능이다.
만약 users 라는 URI아래 또다른 URI를 여러개 작성하고 싶을땐 다음과 같이 미들웨어를 쓸 수 있다.
1
app.use("/users", require("./routes/users"));
그리고 새로 파일을 하나 만들어 다음과 같이 라우팅을 해주어 모듈화를 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var express = require("express");
var router = express.Router();
router.get("/", function (req, res, next) {
res.send("유저 리스트");
});
router.get("/:id", function (req, res, next) {
res.send("특정 유저 아이디: " + req.params.id);
});
router.post("/", function (req, res, next) {
res.send("유저 이름 등록: " + req.body.name);
});
router.put("/:id", function (req, res, next) {
res.send("유저 이름 수정:" + req.body.name);
});
router.delete("/:id", function (req, res, next) {
res.send("유저 이름 삭제" + req.params.id);
});
module.exports = router;
7️⃣ Error-handling middleware
에러 핸들링 미들웨어는 항상 4개의 파라미터가 필요합니다.
그래야 오류 처리 미들웨어로 식별이 가능합니다.
1
2
3
4
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send("Something broke!");
});
에러 핸들링은 다음에 추가적으로 포스팅 하도록 하겠습니다.
8️⃣ Built-in middleware
이미 내장되어있는 미들웨어는 4.x 버전 부터 다음과 같습니다.
- express.static 은 정적파일을 제공하는 역할을 합니다.
- express.json 은 요청을 JSON으로 파싱하는 역할을 합니다.
- express.urlencoded 은 URL 인코딩 페이로드로 수신 요청을 구문 분석합니다.
9️⃣ Third-party middleware
다른 써드파티 미들웨어를 사용하여 Express 앱에 추가하는 것을 말합니다.
예를 들어 쿠키파서 같은 미들웨어가 있습니다.
1
$ npm install cookie-parser
1
2
3
4
5
6
var express = require("express");
var app = express();
var cookieParser = require("cookie-parser");
// 쿠키 파서 미들웨어를 로드합니다.
app.use(cookieParser());
🔟 마치며..
오늘은 미들웨어의 뜻과 미들웨어의 종류에 대해 알아보았습니다.
다음 시간엔 에러 핸들링 방법을 좀더 자세하게 알아보는 시간을 가져보도록 하겠습니다.
읽어주셔서 감사합니다. 🙏