본문 바로가기

[Project] 프로젝트 삽질기31 (feat Rate Limiting 구성)

어가며

NestJS로 개발하면서, 무차별적으로 API 요청을 하는 공격을 받은 경험이 있습니다. 이 경험을 통해 외부로부터 오는 해커들의 공격으로부터 방어하기 위해서는 Rate Limiting이 필요하다는 것을 알았습니다. 이 글은 NestJS에서 Rate Limit을 보다 잘 활용하려면 어떻게 해야 할지 고민하기 위해 작성된 글입니다. 

 

 

 

 
 

NestJS Rate Limiting

무차별 대입 공격으로부터 앱을 보호하기 위해 일종의 속도 제한을 구현하는 옵션입니다. 간혹 운영 중인 서버에 DoS(Denial of Service) 공격을 받게 된다면, 서버 인스턴스의 리소스가 MAX가 되고, 무응답 상태가 나타날 수 있습니다. 이때 express-rate-limit을 활용하면 허용 가능한 접근 횟수 및 간격을 설정해서 지속적인 DOS 공격을 차단할 수 있습니다. express-rate-limit을 활용하기 위해서는 먼저 라이브러리를 설치합니다. 

 

 

npm i express-rate-limit

 

 

위와 같이 입력 후, 아래와 같이 미들웨어를 추가합니다. 

 

import rateLimit from 'express-rate-limit';

app.use({
	windowMs: 60000,
	max: 5,
	handler(req, res) {
		res.status(this.statusCode).json({
			code: this.statusCode,
			message: '1분에 5번 1초씩 요청가능'
		});
	}
})

 

 

위의 예시는 ip당 1분 간 들어오는 request의 숫자를 5로 제한한 것입니다. windowMs는 밀리초 단위로 구성되는데, 위의 예시에서는 1분으로 설정했습니다. max는 허용 가능한 횟수를 의미합니다. 또한 위의 설정 값을 벗어나는 요청이 온다면, handler로 지정한 함수를 호출해서 사용자에게 별도의 응답을 내보냅니다.

 

 

 

 

 


 

 

 

 

 

마치며

앞으로도 팀의 발전을 돕는 개발자가 되기 위해 노력하려 합니다. 팀에 필요한 부분이 무엇일지 고민하면서, 팀에 도움이 된다면, 열심히 공부해서 실무에 적용할 수 있는 개발자가 되기 위해 노력하고 싶습니다. 팀의 성장에 기여할 수 있는 개발자가 되겠습니다. 

 

 

 

 

 

 


 

 

 

 

 

참고 및 출처

 

[Nodejs] express-rate-limit으로 DoS 예방하기

Nodejs의 express 모듈은 간편한 방식으로 Web API를 구성할 수 있게 해준다. 나름 안정성도 꽤 뛰어나 기본적으로 많이 쓰이는 모듈일 것이다. 그런데, Nodejs에 익숙하지 않아 일반적

calvinjmkim.tistory.com

 

[Node.js] #13 API 사용량 제한 구현하기

이 노트는 "Node.js 교과서"를 공부하면서 기록되었다.Express 용 기본 속도 제한 미들웨어. 암호 재설정과 같은 공용 API 및 / end point 에 대한 반복 요청을 제한하는 데 사용한다.nodebird_api에서 사용량

velog.io

 

[node.js] express-rate-limit(DOS공격 방어하기)

express-rate-limit를 사용해 허용 가능한 접근 횟수 및 간격을 설정함으로써 지속적인 DOS공격을 차단할 수 있습니다. express-rate-limit는 아래와 같이 설치합니다. npm i express-rate-limit 설치를 완료하고..

lab.cliel.com

 

Security - nestjs

const app = await NestFactory.create(ApplicationModule, { cors: true });

jakekwak.gitbook.io

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com