미들웨어 (Middleware)

programming·2023년 2월 11일
0
post-thumbnail

미들웨어 (Middleware)

웹 서버에서 요청을 받을때 가끔 모든 요청에 대해 공통적인 처리를 하고싶은 경우가 생길 수 있다.
미들웨어를 통해 웹 서버의 요청/응답에 대해 공통적으로 관리가 가능하다.

예를 들어, 모든 요청에 대해서 로그를 남겨 확인하고 싶은 경우처럼 말이다.
이 외에도 승인된 사용자만 API를 접근할 수 있게 만들고 싶을때도 해당 될 수 있다.

이런 기능적인 부분 외에도 아주 기본적인 미들웨어로, 브라우저가 보낸 데이터를 우리가 쉽게 사용할 수 있게 바꿔주는 미들웨어도 존재한다.

미들웨어 작성 방법

app.use((req, res, next) => {
  // 필요한 코드
});

위의 형태에서 req, res, next는 각자 역할을 지니고 있는 인자(Parameter)이다.

  • req: 요청(Request)에 대한 정보가 담겨있는 객체이다.
    • HTTP Headers, Query Parameters, URL 등 브라우저가 서버로 보내는 정보들이 담겨있다.
  • res: 응답(Response)을 위한 기능이 제공된다.
    • 어떤 HTTP Status Code로 응답 할지, 어떤 데이터 형식으로 응답 할지, 헤더는 어떤 값을 넣어 응답 할지 다양한 기능을 제공한다.
  • next: 다음 스택으로 정의된 미들웨어를 호출한다.

여러개의 미들웨어가 겹치는 경우 동작하는 방식

  • 여러개의 미들웨어가 겹치는 경우, 이는 첫번째 미들웨어부터 순차적으로 진입하게 된다.
  • 예시로 아래와 같이 3개의 미들웨어가 있다고 가정해보겠다.
app.use((req, res, next) => {
    console.log('첫번째 미들웨어');
    next();
});

app.use((req, res, next) => {
    console.log('두번째 미들웨어');
    next();
});

app.use((req, res, next) => {
    console.log('세번째 미들웨어');
    next();
});

// print: 첫번째 미들웨어
// print: 두번째 미들웨어
// print: 세번째 미들웨어
  • 위와같은 그림처럼 순차적으로 미들웨어를 통과하고 중간에 응답을해서 종료가 되거나 다음 미들웨어로 넘어가서 터미널에 첫번째 미들웨어라는 로그부터 차례대로 세번째 미들웨어라는 로그가 쓰여진걸 확인 할 수 있다.
  • 하지만 미들웨어를 거치는 중간에 next() 가 실행되지 않으면 다음 미들웨어는 실행되지 않고, 클라이언트의 요청은 거기서 종료된다.

Router와 미들웨어의 차이

Router와 미들웨어는 서로 다른 방식처럼 보이지만 Router는 미들웨어 기반으로 구현된 객체이므로 미들웨어와 동일한 방식으로 작동된다.

profile
개발 기록 일지

0개의 댓글