Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- nodejs
- Sequelize
- jest
- typeORM
- TypeScript
- nestjs
- Python
- MySQL
- OCR
- class
- 자료구조
- MongoDB
- AWS
- Queue
- react
- mongoose
- dfs
- GIT
- flask
- Bull
- Nest.js
- game
- 게임
- 공룡게임
- 정렬
- cookie
- Express
- Dinosaur
- JavaScript
Archives
- Today
- Total
포시코딩
미들웨어(Middleware) 본문
728x90
미들웨어란?
웹 서버에서 요청을 받을 때 모든 요청에 대해 공통적인 처리를 하고 싶은 경우
미들웨어을 통해 웹 서버의 요청/응답에 대해 공통적으로 관리가 가능하다.
- ex.1) 모든 요청에 대해 로그를 남겨 확인하고 싶은 경우
- ex.2) 승인된 사용자만 API를 접근할 수 있게 만들고 싶은 경우
가장 유명한 웹 서버인 Apache, Nginx 모두 '모듈'이라는 개념을 가지고 있는데, 미들웨어와 아주 유사하다.
요즘은 어디서나 볼 수 있는 보안 연결 방법인 HTTPS를 지원하기 위해서 https 모듈을 추가하고,
모든 요청과 응답을 기록하고 싶다면 로깅 모듈을 추가하면 된다.
Express.js의 미들웨어와 같은 개념인데 아래 예시를 보자
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
- urlencoded: form-urlencoded 라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어
- json: JSON 이라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어
미들웨어 작성
기본틀
app.use((req, res, next) => {
// 필요한 코드
});
위의 형태에서 req, res, next는 각자 역할을 지니고 있는 인자(Parameter)이다.
- req: 요청(Request)에 대한 정보가 담겨있는 객체다.
- HTTP headers, Query Parameters, URL 등 브라우저가 서버로 보내는 정보들이 담겨있다.
- res: 응답(Response)을 위한 기능이 제공된다.
- 어떤 HTTP Status Code로 응답할지 , 어떤 데이터 형식으로 응답할지, 헤더는 어떤 값을 넣어 응답할지 등
다양한 기능을 제공한다.
- 어떤 HTTP Status Code로 응답할지 , 어떤 데이터 형식으로 응답할지, 헤더는 어떤 값을 넣어 응답할지 등
- next: 다음 스택으로 정의된 미들웨어를 호출한다.
예시
app.use((req, res, next) => {
console.log('Request URL: ', req.originalUrl, ' - ', new Date());
next();
});
여러개의 미들웨어가 동작하는 방식
여러개의 미들웨어가 겹치는 경우, 첫번째 미들웨어부터 순차적으로 진입하게 된다.
app.use((req, res, next) => {
console.log('첫번째 미들웨어');
next();
});
app.use((req, res, next) => {
console.log('두번째 미들웨어');
next();
});
app.use((req, res, next) => {
console.log('세번째 미들웨어');
next();
});
위 처럼 순차적으로 미들웨어를 통과하고 중간에 응답을 해서 종료되거나 다음 미들웨어로 넘어가게 된다.
하지만 중간에 미들웨어상의 next()가 실행되지 않으면 다음 미들웨어는 실행되지 않는다.
Router와 미들웨어의 차이
Router와 미들웨어는 서로 다른 방식처럼 보이지만 Router는 미들웨어 기반으로 구현된 객체이므로
미들웨어와 동일한 방식으로 작동된다.
Express의 미들웨어가 실행되는 경우
- app.use(Middleware): 모든 요청에서 미들웨어를 실행한다.
- app.use('/api', Middleware): api로 시작하는 요청에서 미들웨어를 실행한다.
- app.post('/api', Middleware): api로 시작하는 POST 요청에서 미들웨어를 실행한다.
728x90
'Node.js' 카테고리의 다른 글
[Sequelize] config.json에 dotenv 환경변수 사용하기 - 작성중 (0) | 2022.12.20 |
---|---|
[Sequelize] 세팅 및 사용방법 (0) | 2022.12.20 |
Access Token, Refresh Token (0) | 2022.12.19 |
JWT (0) | 2022.12.19 |
쿠키(Cookie), 세션(session) (0) | 2022.12.19 |