Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js에 Express-rate-limit 통합하기 – 요청 속도 제한 구현 가이드

웹사이트를 DoS(서비스 거부) 및 DDoS(분산 서비스 거부) 공격으로부터 보호하기 위해 요청 속도 제한(Rate Limiting)은 날로 중요해지고 있습니다. 요청 속도 제한은 시스템을 가짜 요청이나 무차별 대입(Brute Force) 공격 등 다양한 유형의 악성 트래픽으로부터 지켜줍니다. 쉽게 말해, 하나의 IP가 일정 시간 동안 보낼 수 있는 요청 횟수를 제한하는 기술입니다.

Express 애플리케이션에서는 express-rate-limit라는 npm 패키지를 사용하여 사용자별 요청 횟수를 간편하게 제한할 수 있습니다.

rate-limit 모듈 설치하기

아래 명령어를 실행하여 애플리케이션에 express-rate-limit 모듈을 설치합니다.

npm install --save express-rate-limit

예제 코드

먼저 rateLimit.js라는 이름의 파일을 생성하고 아래 코드를 복사합니다. 파일 생성 후에는 다음 명령어로 코드를 실행할 수 있습니다.

node rateLimit.js

rateLimit.js

// express 의존성 불러오기
const express = require("express");

// express-rate-limit 의존성 불러오기
const rateLimit = require("express-rate-limit");

// express 함수를 application 변수에 저장
const applicaion = express();

// 옵션과 함께 rate limiter 함수 호출
// max: 허용되는 최대 요청 횟수
// windowMs: max만큼의 요청을 받을 수 있는 시간(밀리초)
// message: 요청 제한 시 사용자에게 보여줄 메시지
const limiter = rateLimit({
    max: 5,
    windowMs: 60 * 60 * 1000,
    message: "Too many request from this IP"
});

// rate-limit 함수를 express 미들웨어에 추가하여
// 모든 요청이 실행되기 전에 이 제한을 통과하도록 설정
applicaion.use(limiter);

// 사용자 요청을 처리하는 GET 라우트
applicaion.get("/", (req, res) => {
    res.status(200).json({
        status: "SUCCESS",
        message: "Welcome to TutorialsPoint !"
    });
});

// 서버 설정
const port = 8000;
applicaion.listen(port, () => {
    console.log(`app is running on port ${port}`);
});

실행 결과

C:\home\node>> node rateLimit.js

Node 애플리케이션을 실행한 후, 브라우저에서 localhost:8000에 접속합니다.

그러면 아래와 같은 화면을 볼 수 있습니다.

Node.js에 Express-rate-limit 통합하기 – 요청 속도 제한 구현 가이드

같은 URL을 5번 이상 반복해서 새로고침하면 아래와 같은 오류 메시지가 표시됩니다.

Node.js에 Express-rate-limit 통합하기 – 요청 속도 제한 구현 가이드

핵심 정리

위 예제에서는 windowMs60 * 60 * 1000, 즉 1시간으로 설정되어 있고, max는 5로 설정되어 있습니다. 따라서 동일한 IP에서 1시간 동안 최대 5번까지만 요청이 가능하며, 그 이상 요청하면 "Too many request from this IP"라는 메시지와 함께 요청이 차단됩니다. 이처럼 express-rate-limit 미들웨어를 활용하면 몇 줄의 코드만으로 API 남용 방지와 서버 안정성 확보를 동시에 달성할 수 있습니다.