Express.js는 가장 인기 있는 웹 애플리케이션 프레임워크 중 하나로, Node.js 환경에서 강력하고 유연한 백엔드 서버를 구축하는 데 적합합니다. Express는 미들웨어를 통해 다양한 기능을 손쉽게 확장할 수 있으며, 이를 활용하여 보안, 성능 모니터링, 로깅 등을 구현할 수 있습니다. 이번 강좌에서는 Express.js에서 자주 사용되는 미들웨어인 Helmet과 Morgan에 대해 자세히 알아보겠습니다.
1. Express.js 미들웨어란?
미들웨어는 요청(req) 및 응답(res) 객체를 수정하거나 제어하여 추가적인 처리를 제공하는 함수입니다. Express 애플리케이션에서는 여러 단계의 미들웨어를 사용할 수 있습니다. 각 미들웨어는 요청이 들어올 때 실행되며, 필요한 경우 다음 미들웨어로 제어를 넘길 수 있습니다. 기본적으로 미들웨어는 다음과 같은 기능을 수행할 수 있습니다:
- 요청 본문 해석
- 로그 기록
- 보안 설정
- 세션 관리
- 오류 처리
2. Helmet
Helmet은 Express 애플리케이션에서 HTTP 헤더를 설정하여 보안을 강화하는 미들웨어입니다. 기본적으로 Helmet은 여러 가지 기본 보안 설정을 제공합니다. 웹 애플리케이션에서 자주 발생하는 보안 취약점을 미리 차단할 수 있도록 도와줍니다.
2.1 Helmet 설치
Helmet을 설치하려면 npm을 사용하여 간단히 다음 명령어를 입력하면 됩니다:
npm install helmet
2.2 Helmet 사용법
Helmet을 애플리케이션에 사용하려면, Express 앱에 Helmet을 미들웨어로 추가하면 됩니다. 아래의 예제를 통해 Helmet의 기본 설정을 적용하는 방법을 살펴보겠습니다.
const express = require('express');
const helmet = require('helmet');
const app = express();
// Helmet 미들웨어 사용
app.use(helmet());
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
2.3 Helmet의 다양한 기능
Helmet은 다양한 모듈을 포함하고 있으며, 각 모듈은 특정 HTTP 헤더를 설정합니다. 예를 들어:
helmet.contentSecurityPolicy()
: 콘텐츠 보안 정책을 정의하여 XSS 공격을 방지합니다.helmet.referrerPolicy()
: 리퍼러 정보를 제어하여 개인정보 보호를 강화합니다.helmet.xssFilter()
: XSS 필터를 활성화하여 스크립트 공격을 방지합니다.
2.4 Helmet 설정 예제
Helmet을 사용하여 특정 설정을 조정하는 방법은 다음과 같습니다:
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "https://trusted-script.com"]
}
},
referrerPolicy: { policy: 'no-referrer' },
}));
3. Morgan
Morgan은 HTTP 요청 로깅을 위한 미들웨어로, 주로 개발 중이나 프로덕션 환경에서 요청의 세부 정보를 기록하는 데 사용됩니다. Morgan을 사용하면 애플리케이션의 동작 상황을 쉽게 모니터링할 수 있습니다.
3.1 Morgan 설치
Morgan은 npm을 통해 설치할 수 있습니다:
npm install morgan
3.2 Morgan 사용법
Morgan을 애플리케이션에 추가하려면 다음과 같이 설정합니다:
const morgan = require('morgan');
app.use(morgan('combined')); // 다양한 로깅 옵션 중 'combined' 사용
3.3 Morgan의 로깅 옵션
Morgan은 다양한 로깅 형식을 지원합니다. 다음은 몇 가지 예입니다:
'tiny'
: 요청의 메서드, URL, 응답 시간만을 기록합니다.'dev'
: 컬러로 표시된 간단한 형식으로 로그를 출력합니다.'combined'
: 클라이언트의 IP, 메서드, URL, HTTP 버전, 응답 상태 코드 등을 포함하여 모든 정보를 기록합니다.
3.4 Morgan 설정 예제
아래는 Morgan을 사용하여 로그를 파일로 저장하는 방법을 보여주는 예제입니다:
const fs = require('fs');
const path = require('path');
const morgan = require('morgan');
// 로그 스트림을 파일로 저장하기 위해 createWriteStream 사용
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' });
app.use(morgan('combined', { stream: accessLogStream })); // 로그를 파일로 스트리밍
4. 결론
이 강좌에서는 Express.js에서 자주 사용되는 미들웨어인 Helmet과 Morgan에 대해 알아보았습니다. Helmet을 통해 애플리케이션의 보안을 강화하고, Morgan을 통해 HTTP 요청을 효율적으로 기록할 수 있습니다. 이러한 미들웨어들은 Express 애플리케이션을 더욱 견고하고 안전하게 만드는 데 기여합니다. 애플리케이션을 구축할 때 이러한 미들웨어를 적절히 활용하여 최상의 결과를 얻으시길 바랍니다.
5. 참고 자료
더 깊이 있는 내용을 알고 싶다면 아래의 공식 문서를 참고하세요: