노드 Node.js
12. Express의 미들웨어와 요청 처리 흐름
안녕하세요! 태마입니다.
Node.js 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
노드 Node.js
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 미들웨어(Middleware)란?
미들웨어는 Express에서 요청(Request)과 응답(Response) 사이에서 특정 작업을 수행하는 함수입니다.
요청을 가로채서 로그 출력, 인증, 데이터 검증, 오류 처리 등을 수행할 수 있습니다.
📌 미들웨어의 특징
✔ 요청과 응답을 조작 가능 → 요청 데이터를 가공하거나 응답을 변경할 수 있음
✔ 체인 구조로 실행 가능 → 여러 개의 미들웨어를 순차적으로 실행 가능
✔ 특정 경로(Route) 또는 전역(Global)으로 적용 가능
2. Express의 미들웨어 종류
✅ 1) 애플리케이션 레벨 미들웨어
✔ app.use()를 사용하여 전역적으로 적용
✔ 모든 요청에서 실행됨
✅ 2) 라우트 레벨 미들웨어
✔ 특정 경로(Route)에서만 실행
✅ 3) 오류 처리 미들웨어
✔ 서버에서 발생한 오류를 처리하는 역할
✔ next(err)를 호출하여 Express의 기본 오류 처리기로 전달
✅ 4) 빌트인 미들웨어
✔ Express에서 기본 제공 (express.json(), express.static() 등)
✅ 5) 서드파티 미들웨어
✔ morgan, cors, helmet 같은 추가 패키지 사용
📌 미들웨어는 Express의 핵심 개념이며, 요청을 효과적으로 제어할 수 있음!
✅ 여기까지 미들웨어의 개념과 종류를 배웠습니다!
👉 "그렇다면, 실제로 미들웨어를 어떻게 구현할까?"
✅ 2부에서 미들웨어 구현과 활용법을 배워봅시다!
2. 상세 주제 정리
1. 애플리케이션 레벨 미들웨어
✅ 1) 모든 요청에서 실행되는 전역 미들웨어
const express = require("express");
const app = express();
// 요청 로깅 미들웨어
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next(); // 다음 미들웨어로 이동
});
app.get("/", (req, res) => {
res.send("홈 페이지");
});
app.listen(3000, () => console.log("서버 실행 중"));
📌 모든 요청을 가로채서 로그를 출력하는 미들웨어!
✅ 2) JSON 요청 본문 처리 (express.json())
app.use(express.json()); // JSON 형식의 요청 본문(body) 파싱
📌 POST 요청에서 JSON 데이터를 처리할 수 있도록 설정!
2. 라우트 레벨 미들웨어
✅ 특정 경로에만 적용되는 미들웨어
const authMiddleware = (req, res, next) => {
if (!req.headers.authorization) {
return res.status(403).send("접근 거부!");
}
next();
};
app.get("/protected", authMiddleware, (req, res) => {
res.send("인증된 사용자만 접근 가능");
});
📌 /protected 경로에만 인증 미들웨어 적용!
3. 오류 처리 미들웨어
✅ 서버에서 발생한 오류를 처리하는 미들웨어
app.use((err, req, res, next) => {
console.error("에러 발생:", err.message);
res.status(500).send("서버 오류 발생!");
});
📌 next(err)를 호출하면 이 미들웨어가 실행됨!
✅ 에러 발생 예제
app.get("/error", (req, res, next) => {
next(new Error("강제 오류 발생!"));
});
📌 /error 경로에서 강제로 오류를 발생시키고 미들웨어에서 처리 가능!
4. 빌트인 미들웨어 활용 (express.static)
✅ 정적 파일 제공 (CSS, 이미지 등)
app.use(express.static("public"));
📌 public 폴더 안의 정적 파일을 제공하는 미들웨어!
http://localhost:3000/style.css
http://localhost:3000/logo.png
5. 서드파티 미들웨어 활용
✅ 1) morgan – HTTP 요청 로깅
$ npm install morgan
const morgan = require("morgan");
app.use(morgan("dev")); // 요청을 콘솔에 출력
📌 요청을 자동으로 로깅하여 디버깅이 용이!
✅ 2) cors – CORS 문제 해결
$ npm install cors
const helmet = require("helmet");
app.use(helmet()); // 기본 보안 헤더 추가
📌 CORS 정책을 적용하여 외부 클라이언트 요청을 허용할 수 있음!
✅ 3) helmet – 보안 강화
$ npm install helmet
const helmet = require("helmet");
app.use(helmet()); // 기본 보안 헤더 추가
📌 XSS, Clickjacking, MIME Sniffing 공격을 방어 가능!
6. 미들웨어 실행 순서 이해
✅ 미들웨어는 순서대로 실행되므로 순서가 중요함!
app.use((req, res, next) => {
console.log("1번 미들웨어 실행");
next();
});
app.use((req, res, next) => {
console.log("2번 미들웨어 실행");
next();
});
app.get("/", (req, res) => {
console.log("최종 응답 처리");
res.send("홈 페이지");
});
📌 출력 결과
1번 미들웨어 실행
2번 미들웨어 실행
최종 응답 처리
📌 미들웨어는 next()를 호출해야 다음 미들웨어로 이동 가능!
✅ 여기까지 Express의 미들웨어 개념과 활용법을 배웠습니다!
👉 "그렇다면, Express에서 파일 업로드는 어떻게 처리할까?"
✅ 다음 회차에서 multer를 활용한 파일 업로드 방법을 배워봅시다!
'IT Developer > Node.js' 카테고리의 다른 글
Node.js 기초 <16. 마이크로서비스 아키텍처(MSA)와 RabbitMQ 활용> (0) | 2025.03.18 |
---|---|
Node.js 기초 <15. 작업 큐(Queue)와 백그라운드 작업 처리 (Bull 활용)> (1) | 2025.03.17 |
Node.js 기초 <14. 클라우드 스토리지(AWS S3, Firebase)와 파일 업로드> (0) | 2025.03.16 |
Node.js 기초 <13. 파일 업로드와 이미지 처리 (multer 활용)> (0) | 2025.03.15 |
Node.js 기초 <11. 인증과 보안: JWT, OAuth, 세션 관리> (0) | 2025.03.13 |
Node.js 기초 <10. 웹소켓(WebSocket)과 실시간 데이터 처리> (1) | 2025.03.12 |
Node.js 기초 <9. 파일 시스템(fs 모듈)과 스트림(Stream) 활용> (0) | 2025.03.11 |
Node.js 기초 <8. Node.js와 데이터베이스 (MySQL, PostgreSQL, MongoDB)> (0) | 2025.03.10 |