본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.JS 서버의 사용량 제한 구현하기

by 할리갈리0 2023. 8. 30.

Node.js 서버에서 사용량 제한을 구현하는 것은 보안 및 성능 관리 측면에서 중요합니다. 

사용량 제한을 통해 악의적인 요청이나 과도한 부하로부터 서버를 보호하고, 리소스를 효율적으로 관리할 수 있습니다. 

 

1. Express-rate-limit 모듈 설치하기

사용량 제한을 구현하기 위해서는 express-rate-limit 모듈을 설치 필요

 Express.js 애플리케이션에서 미들웨어로 사용되며, 요청당 허용되는 최대 요청 수와 시간 간격 등 다양한 설정 옵션 제공

npm install express-rate-limit

 

2. 기본적인 사용량 제한 설정하기

* windowMs 옵션: 시간 간격을 밀리초 단위로 지정

* max 옵션: 해당 시간 간격 내에 허용되는 최대 요청 수

const express = require('express');
// rateLimit 함수를 호출하여 미들웨어 객체를 생성
const rateLimit = require('express-rate-limit');

const app = express();

// 기본적인 사용량 제한 설정 (1분당 최대 100개의 요청)
const limiter = rateLimit({
  windowMs: 60 * 1000, // 시간 간격 (밀리초 단위)
  max: 100, // 최대 요청 수
});

app.use(limiter);

// 라우트 정의 및 처리 로직 작성

app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다.');
});

 

3. 커스텀 메시지와 상태 코드 지정하기

사용자 정의 메시지와 상태 코드를 지정하여 클라이언트에게 적절한 응답을 전달 가능

const express = require('express');
const rateLimit = require('express-rate-limit');

const app = express();

// 기본적인 사용량 제한 설정 (1분당 최대 100개의 요청)
const limiter = rateLimit({
  windowMs: 60 * 1000, // 시간 간격 (밀리초 단위)
  max: 100, // 최대 요청 수
  message: '너무 많은 요청이 발생하여 일시적으로 접근이 제한됩니다.', // 커스텀 메시지
  statusCode: 429, // 상태 코드 (기본값: 429 - Too Many Requests)
});

app.use(limiter);

// 라우트 정의 및 처리 로직 작성

app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다.');
});

 

4. 로그인 사용량 제한 설정하기

/login 엔드포인트에 대한 로그인 사용량 제한 설정 가능

const express = require('express');
const rateLimit = require('express-rate-limit');

const app = express();

// 로그인 사용량 제한 설정
const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15분 (밀리초 단위)
  max: 5, // 최대 5회의 로그인 시도
  message: '로그인 시도가 너무 많이 발생하여 접근이 제한됩니다. 잠시 후 다시 시도해주세요.', // 커스텀 메시지
  statusCode: 429, // 상태 코드 (기본값: 429 - Too Many Requests)
});

app.post('/login', loginLimiter);

// 라우트 정의 및 처리 로직 작성

app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다.');
});

 

 

반응형