개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Express Middleware — 실무에서 자주 사용하는 라이브러리

2025년 2월 9일
Expresscorshelmetmorganmulter

Express 앱을 처음 만들면 라우팅은 금방 되지만, 보안·로깅·파일 업로드 같은 공통 관심사를 직접 구현하려다 시간을 날리기 쉽다. 이미 검증된 Middleware를 조합하면 그 시간을 아낄 수 있다. 아래에 실무에서 가장 자주 등장하는 8가지를 정리했다.

요청 흐름 속 Middleware 위치

Client
  │
  ▼
morgan (로그)
  │
  ▼
helmet (보안 헤더)
  │
  ▼
cors (CORS 허용)
  │
  ▼
express.json / cookie-parser / express-session
  │
  ▼
multer (파일 파싱, 필요한 라우트만)
  │
  ▼
compression (응답 압축)
  │
  ▼
Router / Controller
  │
  ▼
Client

cors

브라우저는 다른 Origin에서 온 요청을 기본 차단한다. cors Middleware는 Access-Control-Allow-Origin 등의 헤더를 자동으로 붙여준다.

npm install cors
import cors from 'cors';

app.use(cors({
  origin: ['https://example.com', 'http://localhost:3000'],
  credentials: true,
}));

CORS(Cross-Origin Resource Sharing) — 브라우저가 다른 도메인·포트의 리소스 요청을 허용할지 결정하는 HTTP 메커니즘.

helmet

HTTP 응답 헤더에 보안 관련 값을 추가해 XSS, Clickjacking 등을 방어한다. 기본 설정만으로도 Content-Security-Policy, X-Frame-Options 등 14개 헤더가 적용된다.

npm install helmet
import helmet from 'helmet';

app.use(helmet());

morgan

요청마다 메서드·URL·상태코드·응답시간을 콘솔에 출력하는 HTTP 로깅 Middleware다. 개발 중에는 dev, 프로덕션에서는 combined 포맷을 주로 쓴다.

npm install morgan
import morgan from 'morgan';

app.use(morgan(process.env.NODE_ENV === 'production' ? 'combined' : 'dev'));

compression

응답 본문을 gzip/deflate로 압축해 네트워크 전송량을 줄인다. JSON API 응답이 많은 서비스에서 체감 속도 차이가 크다.

npm install compression
import compression from 'compression';

app.use(compression());

cookie-parser & express-session

cookie-parser는 req.cookies를 파싱하고, express-session은 서버 측 세션을 관리한다. 인증 흐름에서 함께 쓰이는 경우가 많다.

npm install cookie-parser express-session
import cookieParser from 'cookie-parser';
import session from 'express-session';

app.use(cookieParser());
app.use(session({
  secret: process.env.SESSION_SECRET!,
  resave: false,
  saveUninitialized: false,
  cookie: { secure: true, httpOnly: true },
}));

httpOnly — JavaScript에서 쿠키 접근을 차단해 XSS 공격 시 세션 탈취를 막는 쿠키 속성.

multer

multipart/form-data 형식의 파일 업로드를 처리한다. 저장 위치와 파일명을 DiskStorage 또는 MemoryStorage로 제어할 수 있다.

npm install multer
import multer from 'multer';

const upload = multer({ dest: 'uploads/' });

app.post('/profile', upload.single('avatar'), (req, res) => {
  res.json({ file: req.file });
});

dotenv

.env 파일의 환경 변수를 process.env에 로드한다. 코드에 시크릿을 하드코딩하는 것을 막는 첫 번째 방어선이다.

npm install dotenv
// 앱 진입점 최상단에서 한 번만 호출
import 'dotenv/config';
Middleware주요 역할적용 범위
corsCORS 헤더 설정전역
helmet보안 헤더 추가전역
morganHTTP 요청 로깅전역
compression응답 압축전역
cookie-parser쿠키 파싱전역
express-session세션 관리전역
multer파일 업로드 파싱라우트별
dotenv환경 변수 로드진입점 1회
← 이전 글Express 프로젝트 구조 — MVC와 Layered 패턴
다음 글 →Express 보안 — XSS, CSRF, SQL Injection 방어