Middleware

2025. 5. 12. 19:42·개발후기

서로 다른 앱의 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할 하는 소프트웨어

-> 요청을 중간 지점에서 가로채기 때문에 Intercepter라고도 한다.

목적


디스코드 클론 코딩 토이 프로젝트를 위한 첫 걸음으로 Node.js로 서버를 구성하는 중 "Token을 자동으로 설정해주는 소프트웨어가 없을까?"하고 찾게 되었다.

 

Middleware의 기능


  • 프로토콜 변환 (Protocol Translation)
  • 메시지 큐 (Message Queuing)
  • 데이터베이스 연결 (Database Connectivity)
  • 보안 (Security)
  • 로깅 (Logging)
  • 인터페이스 (Interface)
  • 트랜잭션 (Transaction)
  • 분산 처리 (Distributed Computing)
  • 서비스 (Service)
  • 모니터링 (Monitoring)
  • 배포 (Deployment)
  • 라우팅 (Routing)
  • 기타등등...

-> 다수의 Middleware를 동시에 사용할 수도 있다.

 

Middleware 왜 사용할까?


Middleware를 사용하는 이유

요청과 응답을 쉽게 처리할 수 있고 코드의 중복성을 줄여주며 확장성이 높기 때문이다.

 

Middleware를 자주 사용하는 로직

  • 인증 ex) 로그인, 회원가입
  • 로깅 및 모니터링 ex) 토큰 인증 중 발생한 오류 처리
  • 라우팅 및 URL 재작성 ex) 로그인 전 콘텐츠로 접근 시 로그인 화면으로 리다이렉션

 

Node.js에서 Middleware 사용해보기


각 요청 마다 Middleware 실행하기

authJWT라는 Middleware가 create 요청 시마다 중간의 요청을 가로채어 작동하게 된다.

// routes/room.route
const express = require("express");
const router = express.Router();
const authJWT = require("../middleware/authJWT");
const { create } = require("../controllers/room.controller");

router.post("/create", authJWT, create);

module.exports = router;

 

authJWT Middleware

해당 Middleware를 작동 시키고 싶은 부분에 추가하여 사용할 수 있다.

// middleware/authJWT
const { verify } = require("../util/jwt-util");

const authJWT = (req, res, next) => {
  if (req.headers.authorization) {
    const token = req.headers.authorization.split("Bearer ")[1];
    const result = verify(token); 

    if (result.ok) {
      req.name = result.name;
      req.email = result.email;
      next();
    }

    else {
      res.status(401).send({
        ok: false,
        message: result.message,
      });
    }
  }
};

module.exports = authJWT;

 

Node.js에서 다수의 Middleware 사용하기

Middleware 내부에서 next()를 호출하여 다음 미들웨어의 작업을 실행할 수 있다.
유의할 점으로는 응답이 없는 미들웨어 함수에서는 반드시 next()를 호출해주어야 한다는 점이다.
호출해주지 않는다면 해당 요청은 정지된 채로 방치되게 되어 오류를 초래할 수 있다.

 

참고 자료


https://velog.io/@seosu2000/Middleware%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://velog.io/@nemo/node-middleware-next
https://dev.to/hasanelsherbiny/what-is-middleware-26mk

'개발후기' 카테고리의 다른 글

[ 블로그 만들기 ] OAuth를 쉽게 구현해보자.  (0) 2025.09.07
Loading  (0) 2025.07.02
WebSocket  (0) 2025.05.17
React Query로 무한 스크롤 구현하기  (0) 2025.04.23
반응형 웹 디자인과 미디어 쿼리  (0) 2025.04.14
'개발후기' 카테고리의 다른 글
  • Loading
  • WebSocket
  • React Query로 무한 스크롤 구현하기
  • 반응형 웹 디자인과 미디어 쿼리
Dino0204
Dino0204
프론트엔드 개발자를 넘어 풀스택 개발자가 되고 싶은 광주소마고 학생의 개발일지.
  • Dino0204
    디노의 개발일지
    Dino0204
    • 분류 전체보기 (22)
      • 튜토리얼 (11)
      • 개발후기 (7)
      • 트러블슈팅 (1)
      • 나의 생각 (2)
      • 서평 (1)
      • 회고 (0)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Dino0204
Middleware
상단으로

티스토리툴바