[express] express 미들웨어가 뭘까

Hyebin·2021년 6월 9일
2

node.js

목록 보기
6/6
post-thumbnail

미들웨어(middleware)란?

express는 미들웨어의 집합이라 해도 과언이 아니다.
express를 사용하는 것이 미들웨어를 활용한다는 뜻과 같다.

express 공식 문서에 따르면 "미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수입니다." 라고 설명한다.

말이 어렵지만 쉽게 풀면 요청을 받아들이는 것과 응답을 보내는 사이에 작동하는 것이 미들웨어란 것이다.

미들웨어 수행

미들웨어 함수는 다음과 같은 작업을 수행한다.

  • 모든 코드를 실행.
  • 요청 및 응답 오브젝트에 대한 변경을 실행.
  • 요청-응답 주기를 종료.
  • 스택 내의 그 다음 미들웨어를 호출.

현재 미들웨어 함수가 응답을 종료하지 않는 경우 next()를 호출하여 다음 미들웨어 함수에서 제어할 수 있도록 해야한다.
제어를 전달하지 않으면 해당 요청은 정지 상태로 방치된다.

next()는 따로 포스팅을 하며 다뤄볼 예정이다.

미들웨어 특징

  • 미들웨어는 로드 순서가 중요하다.
    먼저 작성된 미들웨어 함수가 먼저 실행 된다.
    전역에 적용될 미들웨어는 라우팅 처리를 위한 미들웨어 전에 작성되어야 모든 요청에 실행될 수 있다.
  • 수행하고 싶은 로직을 정확하게 수행시킬 수 있다.

app.method

app.method를 사용해 엔드포인트 별 응답 처리를 해줄 수 있었다.
이 또한 미들웨어이다. 다만 특정 method 요청이 있을 경우만 작동된다는게 아래 app.use()와 다른 점이다.

그림과 같이 app.get('/', handler)는 get 요청이며 루트 path인 경우 미들웨어가 실행된다.

app.use()

미들웨어를 전역 처리 스택에 추가한다.
모든 요청이 들어올 때마다 미들웨어가 실행되어진다.

1) 미들웨어 모듈 사용
미리 만들어진 모듈을 npm install로 설치해 불러서 적용시켜줄 수 있다.

아래 링크로 express에서 제공하는 미들웨어 모듈 종류들을 확인해볼 수 있다.
공식문서: express 미들웨어 모듈

//미들웨어 모듈 불러서 사용
const ex = require('미들웨어');

app.use(ex);

2) 직접 미들웨어 정의해서 사용
내가 필요한 로직을 작성해 미들웨어로 적용해 줄 수 있다.

아래와 같이 작성하면 요청이 올 때마다 get request!!가 출력될 것이다.

//사용자가 미들웨어 생성 
app.use((req, res) => {
	console.log('get request!!');
})

0개의 댓글