IT Developer/Node.js

Node.js 기초 <12. Express의 미들웨어와 요청 처리 흐름>

TEMA_ 2025. 3. 14. 16:51
반응형

노드 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를 활용한 파일 업로드 방법을 배워봅시다!

반응형