들어가며
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로 지정한 함수를 호출해서 사용자에게 별도의 응답을 내보냅니다.
마치며
앞으로도 팀의 발전을 돕는 개발자가 되기 위해 노력하려 합니다. 팀에 필요한 부분이 무엇일지 고민하면서, 팀에 도움이 된다면, 열심히 공부해서 실무에 적용할 수 있는 개발자가 되기 위해 노력하고 싶습니다. 팀의 성장에 기여할 수 있는 개발자가 되겠습니다.
참고 및 출처
'Project > 서버 개발' 카테고리의 다른 글
[Project] 프로젝트 삽질기33 (feat 정적 팩토리 메서드) (2) | 2022.07.09 |
---|---|
[Project] 프로젝트 삽질기32 (feat Static) (0) | 2022.07.09 |
[Project] 프로젝트 삽질기30 (feat helmet 구성) (0) | 2022.06.07 |
[Project] 프로젝트 삽질기29 (feat Swagger 보안 구성) (0) | 2022.06.03 |
[Project] 프로젝트 삽질기28 (feat 푸시 메시지 구성) (0) | 2022.05.16 |