노드숙련강의 3-1

·2022년 12월 20일
0

study

목록 보기
13/81
post-thumbnail

미들웨어

01. 미들웨어?

미들웨어

req -> middleware -> app -> middleware -> res

미들웨어를 통해 웹 서버의 요청/응답에 대해 공통적으로 관리가 가능합니다.

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

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

  • 요즘은 어디서나 볼 수 있는 보안 연결 방법인 HTTPS를 지원하기 위해서는 https 모듈을 추가하고, 모든 요청과 응답을 기록하고 싶다면 로깅을 해주는 모듈을 추가하면 됩니다.

02. Express.js의 미들웨어

app.use(express.urlencoded({ extended: false }));
app.use(express.json());
  • urlencoded: form-urlencoded 라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어에요!
  • json: JSON 이라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어에요!

03. Express.js의 미들웨어 작성

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

Request 로그 남기는 미들웨어 작성

// bodyparser와 router사이에 작성
app.use((req, res, next) => {
    console.log('Request URL:', req.originalUrl, ' - ', new Date());
    next();
});

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

첫번째 미들웨어부터 순차적으로 진입하게 됩니다.

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() 가 실행되지 않으면 다음 미들웨어는 실행되지 않습니다.

라우터에 미들웨어

라우터에 미들웨어
결과

05. Router와 미들웨어의 차이

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

06. Express.js의 미들웨어가 실행되는 경우

  • app.use(Middleware) : 모든 요청에서 미들웨어가 실행된다.

  • app.use(’/api’, Middleware) : api로 시작하는 요청에서 미들웨어를 실행한다.

  • app.post(’/api’, Middleware) : api로 시작하는 POST 요청에서 미들웨어를 실행한다.

profile
개발자 꿈나무

0개의 댓글