본문 바로가기
전공수업/Node.js

Express란 무엇인가(+ 미들웨어)

by JooRi 2024. 6. 14.
728x90
SMALL

Express란?

http 모듈로 웹 서버를 만들 때 코드가 보기 좋지 않고 확장성도 떨어질 때 프레임워크로 해결한다.

Express는 Node.js의 대표적 웹 프레임워크이다.

 

Express-generator로 설치

express-generator는 express 구조를 빠르게 갖추어 주는 패키지이다.

npm i -g express-generator

express-generator 패키지 전역 설치

 

 

express 프로젝트명 --view=pug

 

npm install

 

npm audit fix --force

모든 취약점 해결

 

 

익스프레스 초기 폴더 구조

- bin/www: 서버를 실행하는 스크립트

- public: 외부에서 접근 가능한 파일들

- routes: 서버의 라우터와 로직들, 추후 데이터베이스에 사용

- views: 템플릿 파일들

- app.js: 핵심 서버 스크립트

 

익스프레스 구조도

 

Express 서버 실행

npm start

 

localhost:3000

 

콘솔

콘솔에 클라이언트가 보낸 요청이 기록된다.

 

 

locahost:3000/users

 

콘솔

 

미들웨어란?

 

익스프레스는 미들웨어로 구성된다. 요청과 응답의 중간에 위치하여 미들웨어라고 부른다.

 

 

아래는 app.js 코드이다. app.use와 함께 사용된 것은 미들웨어들이다.

// 필요 모듈
var createError = require('http-errors');  // 에러 생성 모듈
var express = require('express');  // 익스프레스 프레임워크
var path = require('path');  // 경로 조작 모듈
var cookieParser = require('cookie-parser');  // 쿠키 파싱 모듈
var logger = require('morgan');  // HTTP 요청 로깅 모듈

// 라우터 모듈
var indexRouter = require('./routes/index');  // 메인페이지 라우터
var usersRouter = require('./routes/users');  // 사용자 관련 라우터

// 익스프레스 애플리케이션 객체 생성
var app = express();

// 뷰 엔진 설정
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// 미들웨어 설정
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 라우터 설정
app.use('/', indexRouter);
app.use('/users', usersRouter);

// 404 에러 핸들러
app.use(function(req, res, next) {
  next(createError(404));
});

// 에러 핸들러
app.use(function(err, req, res, next) {
  // 로컬 변수 설정
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // 에러 페이지 렌더링
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

 

미들웨어 설정 부분을 보면, logger, json, urlencoded, cookieParser, static 미들웨어 등이 장착되어 있다..

app.use와 함께 사용된 라우터와 에러 핸들러도 모두 미들웨어이다.

 

 

미들웨어 요청 흐름

미들웨어는 위에서부터 아래로 순서대로 실행되며, 요청과 응답 사이에 기능을 추가할 수도 있다.

 

next()

next

매개변수 next()는 다음 미들웨어로 넘어가는 함수로, next를 호출해야 다음 코드로 넘어갈 수 있다.

next에 인수로 값을 넣으면 해당 미들웨어로 넘어간다.

 

 

next의 동작

next에 route라는 문자열을 넣으면 다음 라우터의 미들웨어로 바로 이동한다. 

 

에러 처리 미들웨어

미들웨어 끝 부분에 에러 처리 미들웨어(핸들러)를 두어 전체적인 에러를 처리한다.

express-generator는 404 처리 미들웨어와 에러 핸들러를 자동 생성한다.

404 에러 처리 미들웨어

404 에러는 찾고자 하는 페이지(또는 요청 주소)가 없을 때나 라우터로 등록되지 않은 주소로 요청이 들어올 때 발생한다.

 

 

에러 핸들러

에러 핸들러는 서버 쪽에서 발생한 에러를 처리한다.

 

morgan 미들웨어

콘솔

위에서부터 봤듯이, 서버로 들어온 요청과 응답을 기록해 주는 미들웨어이다.

logger 함수의 인자로 dev 대신 short, common, combined 등을 줄 수 있다.

 

미들웨어 만들기

미들웨어를 직접 만들 수 있다.

미들웨어 만들기

 

콘솔

localhost:3000에 접속하면 콘솔에 내가 만든 미들웨어 문자열이 출력된다.

 

 

 

728x90
LIST

댓글