Express 개발 강좌, Express.js의 인기 있는 미들웨어 소개 (Helmet, Morgan 등)

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. 참고 자료

더 깊이 있는 내용을 알고 싶다면 아래의 공식 문서를 참고하세요:

이 글은 Express 백앤드 서버 개발에 관한 강좌의 일환으로 작성되었습니다.