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

✨New Wisdom✨·2020년 9월 7일
0

📗 Nodejs 📗

목록 보기
14/20
post-thumbnail

이 노트는 "Node.js 교과서"를 공부하면서 기록되었다.

express-rate-limit?

Express 용 기본 속도 제한 미들웨어. 암호 재설정과 같은 공용 API 및 / end point 에 대한 반복 요청을 제한하는 데 사용한다.

nodebird_api에서 사용량을 제한하기 위해 express-rate-limit를 사용한다!
또한 v1.js로 v1 버전을 사용하는데 v2 가 나오게 된다면 /v1으로 요청을 막아야 하는데 이때 미들웨어로 deprecated를 두어 v1 사용을 제한하자!

🚩 express-rate-limit 실습

npm i express-rate-limit
  • nodebird_api에 설치해주고 middleware를 작성한다.

📃 middleware.js

const RateLimit = require('express-rate-limit')
...
// 토큰 너무 자주 발급받지 못하게
exports.apiLimiter = new RateLimit({
  windowMs: 60*1000, // 이 시간 동안
  max : 1, // 최대 횟수
  delayMs:0, // 요청 간 간격
  handler(req,res){ // 어겼을 경우 메시지
    res.status(this.statusCode).json({
      code:this.statusCode, // 기본 429
      message:'1분에 한번만 요청할 수 있습니다.'
    })
  }
})
exports.deprecated = (req,res)=>{ 
  res.status(419).jsom({
    code:419, 
    message:"새로운 버전이 나왔습니다. 새로운 버전을 사용하세요."
  })
}
  • express-rate-limit를 불러오고 apiLimiter를 만들어 주었다.
  • 각 옵션은 주석 참고!

apiLimiter, deprecated 미들웨어를 각각 v2, v1 에 적용해보자!

📃 v2.js

const {verifyToken,apiLimiter} = require('./middlewares')

...
router.post('/token',apiLimiter,async(req,res)=>{
...
  • 작성한 apiLimiter를 불러오고 verifyToken처럼 필요한 곳에 미들웨어로 써주면 된다!

📃 v1.js

const {verifyToken,deprecated} = require('./middlewares')

...
router.use(deprecated) // 모든 라우터에 이 미들웨어 적용됨 (=app.use)
...
  • 작성한 deprecated를 불러오고 v1 모든 요청을 막아야한다. router마다 미들웨어처럼 써도 되지만,
    지금은 모든 라우터들을 막으니 마치 app.use()처럼 router.use()를 하면 모든 router에 대해 이 미들웨어가 적용된다! 훨씬 간편!
profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

2개의 댓글

comment-user-thumbnail
2020년 10월 30일

스크린샷은, middleware 에서 던져준 에러가 아닌 오타로 인한 에러네요

1개의 답글