Seongwon Lim

[node.js] 미들웨어(MiddleWare)란 무엇일까? 본문

Node.js

[node.js] 미들웨어(MiddleWare)란 무엇일까?

limsw 2022. 5. 7. 15:05
반응형

미들웨어(MiddleWare)?

 

미들웨어는 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어를 말한다.

 

  • 쉽게 생각하면 미들웨어는 클라이언트로부터 요청이 오고, 해당 요청을 다시 응답으로 보내기 위해 목적에 맞게 작성된 함수들의 연속이라고 생각할 수 있다.
  • app.use() 를 통해서 미들웨어를 정의할 수 있다.
  • 미들웨어는 본인의 함수가 끝나면 next()를 통해서 다음 함수를 호출해야 한다.

미들웨어의 특징

  • 각 미들웨어에 정의된 코드를 실행한다.
  • 다음 미들웨어를 순차적으로 실행한다.
  • res.send() 등의 메서드를 이용하여 클라이언트와 서버간 Request-Response 주기를 종료한다.
  • 이전 미들웨어에서 정의한 프로퍼티를 다음 미들웨어로 넘겨줄 수 있다.

미들웨어 구성 방법

미들웨어를 간단하게 구성해보자.

const logger = (req, res, next) => {
    console.log("I'am Logger");
		next(); // 해당 명령어가 존재해야 한다.
}

app.use(logger); // 미들웨어 정의

app.listen(3000, () => {
    console.log("Server is running!");
})
  • 해당 코드로 실행하면 터미널에 Server is running 콘솔 로그가 찍히며 서버가 실행된다.
  • 그리고 http://localhost:3000 으로 접속하면 콘솔에 I'am Logger가 찍힌다.
  • 홈페이지에서 접속하기 귀찮은 경우 터미널 명령어로 curl http://localhost:3000 해도 무방하다.

미들웨어 실행 순서는 어떻게 될까?

const logger = (req, res, next) => {
    console.log("I'am Logger");
    next();
}
const logger2 = (req, res, next) => {
    console.log("Second Logger");
    next();
}

app.use(logger);
app.use(logger2);

위와 같이 2개의 미들웨어가 존재하는 경우 실행 순서는 logger ⇒ logger2 순서대로 실행이 된다.

logger 미들웨어에서 next()가 없으면 logger2 미들웨어가 실행되지 않는다.
즉, next() 함수는 다음 미들웨어를 실행시키기 위해 사용되는 함수이다.

Third Party MiddleWare

  • 다른 사람이 만들어놓은 미들 웨어를 사용할 수 있다.
  • https://www.npmjs.com/ 에서 찾아 사용할 수 있다.
  • 예시로 우리가 많이 사용하는 body-parser, morgan 등이 써드 파티 미들웨어에 해당한다.

일반 미들웨어 vs 에러 미들웨어

  • 일반 미들웨어는 파라미터를 3개 받는다.
  • 에러 미들웨어는 파라미터를 4개 받는다.
const commonMiddle = (req, res, next) => {
    console.log("Common Middle Ware");
    next(new Error("error Occur!"));
}

const errorMiddle = (err, req, res, next) => {
    console.log(err.message);
    // 에러를 처리 하거나, 에러를 처리 하지 못 했으면 다음 미들 웨어로 넘겨줌
    next();
}

app.use(commonMiddle);
app.use(errorMiddle);

출처

Comments