Express 앱을 처음 만들면 라우팅은 금방 되지만, 보안·로깅·파일 업로드 같은 공통 관심사를 직접 구현하려다 시간을 날리기 쉽다. 이미 검증된 Middleware를 조합하면 그 시간을 아낄 수 있다. 아래에 실무에서 가장 자주 등장하는 8가지를 정리했다.
Client
│
▼
morgan (로그)
│
▼
helmet (보안 헤더)
│
▼
cors (CORS 허용)
│
▼
express.json / cookie-parser / express-session
│
▼
multer (파일 파싱, 필요한 라우트만)
│
▼
compression (응답 압축)
│
▼
Router / Controller
│
▼
Client
브라우저는 다른 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 메커니즘.
HTTP 응답 헤더에 보안 관련 값을 추가해 XSS, Clickjacking 등을 방어한다. 기본 설정만으로도 Content-Security-Policy, X-Frame-Options 등 14개 헤더가 적용된다.
npm install helmet
import helmet from 'helmet';
app.use(helmet());
요청마다 메서드·URL·상태코드·응답시간을 콘솔에 출력하는 HTTP 로깅 Middleware다. 개발 중에는 dev, 프로덕션에서는 combined 포맷을 주로 쓴다.
npm install morgan
import morgan from 'morgan';
app.use(morgan(process.env.NODE_ENV === 'production' ? 'combined' : 'dev'));
응답 본문을 gzip/deflate로 압축해 네트워크 전송량을 줄인다. JSON API 응답이 많은 서비스에서 체감 속도 차이가 크다.
npm install compression
import compression from 'compression';
app.use(compression());
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 공격 시 세션 탈취를 막는 쿠키 속성.
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 });
});
.env 파일의 환경 변수를 process.env에 로드한다. 코드에 시크릿을 하드코딩하는 것을 막는 첫 번째 방어선이다.
npm install dotenv
// 앱 진입점 최상단에서 한 번만 호출
import 'dotenv/config';
| Middleware | 주요 역할 | 적용 범위 |
|---|---|---|
| cors | CORS 헤더 설정 | 전역 |
| helmet | 보안 헤더 추가 | 전역 |
| morgan | HTTP 요청 로깅 | 전역 |
| compression | 응답 압축 | 전역 |
| cookie-parser | 쿠키 파싱 | 전역 |
| express-session | 세션 관리 | 전역 |
| multer | 파일 업로드 파싱 | 라우트별 |
| dotenv | 환경 변수 로드 | 진입점 1회 |