node.js 백엔드서버에서 api 요청 제한 구현하기
1) 트래픽제한을 하는이유
서버 트래픽 제한을 설정하는 주된 이유는 악의적인 디도스(DDoS) 공격 등을 방지하고, 클라이언트로부터 서버로 과도한 요청이 발생하는 경우 서버가 과부화로 인해 다운되거나 속도 저하 등의 문제가 발생하는 것을 방지하기 위해서입니다.
이러한 제한은 서버의 안정성을 높이고, 운영 비용을 절감하는 데도 큰 도움이 됩니다.
과도한 트래픽은 서버의 자원을 소모하여 다른 정상적인 요청의 처리를 방해하고, 서비스 품질을 저하시키므로, 트래픽 제한을 통해 서버의 성능을 유지하는 것이 중요합니다.
2) 적용방법
Node.js 서버에서는 Rate Limiting 미들웨어를 사용하여 트래픽 제한을 설정할 수 있습니다.
다음은 이를 적용하는 방법입니다.
1. 관련 패키지 설치
먼저, express-rate-limit 패키지를 설치합니다.
>> npm install express-rate-limit
2. 소스 코드 적용

const rateLimit = require('express-rate-limit');
트래픽 제한 설정

const apiLimiter = rateLimit({
windowMs: 10 * 60 * 1000, // 10 분 동안 제한 시간
max: 50, // 최대 요청 횟수
message: '요청 횟수 제한 초과',
});
위와 같이 설정을 통해 10분 동안 최대 50번의 요청만 허용되도록 제한할 수 있습니다.
트래픽 제한 적용
트래픽 제한 설정을 실제 라우터에 적용하는 방법은 다음과 같습니다.

위 코드에서는 /api/blog/IntroSearch 경로로의 POST 요청에 대해 apiLimiter를 적용하여 10분 동안 최대 50번의 요청만 허용되도록 설정하였습니다.
요청 횟수를 초과하면 "요청 횟수 제한 초과" 메시지가 반환됩니다.
추가 설정 및 고려사항
- 전역 트래픽 제한: 특정 라우터가 아니라 서버 전체에 트래픽 제한을 적용할 수 있습니다. 이를 위해 app.use(apiLimiter); 와 같이 설정할 수 있습니다.
- 별도의 제한 정책: 각기 다른 엔드포인트마다 별도의 트래픽 제한 정책을 설정할 수 있습니다. 예를 들어, 로그인 엔드포인트와 데이터 조회 엔드포인트에 다른 제한을 적용할 수 있습니다.
- IP 주소별 제한: 사용자의 IP 주소별로 트래픽을 제한하여 특정 IP에서의 과도한 요청을 막을 수 있습니다.
이와 같이 트래픽 제한을 통해 서버의 안정성과 성능을 유지할 수 있습니다.
트래픽 제한을 설정하지 않으면 악의적인 사용자의 공격이나 실수로 인해 서버가 불안정해질 수 있으며, 이는 서비스 중단으로 이어질 수 있습니다.
따라서 트래픽 제한은 모든 서버 운영 환경에서 필수적으로 고려해야 할 사항입니다.
위 설명을 바탕으로 트래픽 제한을 설정하고, 추가적인 궁금한 점이 있다면 댓글로 문의해 주세요.
읽어주셔서 감사합니다. 😊