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번 포트에서 실행 중입니다.');
});
반응형
'개발정리 (nodeJS)' 카테고리의 다른 글
[nodeJS] Puppeteer로 간단한 검색 웹 매크로 만들기 (0) | 2023.09.09 |
---|---|
[nodeJS] JWT 인증하기 (0) | 2023.08.31 |
[nodeJS] Node.JS 서버에 CORS 허용 설정하기 (0) | 2023.08.29 |
[nodeJS] Node.JS와 mongoDB 연동 방법 (0) | 2023.08.08 |
[nodeJS] Node.JS와 mySQL 연동 방법 (0) | 2023.08.07 |