✅ 목적
- 로그인/회원가입/견적 요청 등 민감한 요청의 횟수 제한
- Brute force / 봇 공격 방지
📦 설치
# git pull 후에 npm i 또는 아래 실행
npm install express-rate-limit
🛠️ 사용법
- 다음 주소에 미들웨어 파일을 만들었습니다.
(src/middlewares/rateLimiter.ts)
- 해당 파일에 원하는 이름의 리미터함수를 만들어주시면 됩니다.
- 주로 변경할 옵션은
windowMs, max, handler
쪽 입니다
handler
는 따로 만들어둔 handleError
유틸 함수를 재사용하여 내부에 에러 메시지만 넣어주시면 됩니다
export const loginLimiter = rateLimit({
windowMs: 1 * 60 * 1000, // ✅ 제한 시간: 1분(60,000ms) 동안
max: 5, // ✅ 해당 시간 내 최대 허용 요청 수 (5회 초과 시 차단)
standardHeaders: true, // ✅ RateLimit 관련 응답 헤더를 표준 형식(`RateLimit-*`)으로 설정
legacyHeaders: false, // ✅ 비표준 헤더(`X-RateLimit-*`)는 비활성화
handler: (req, res) => {
// ✅ 제한 초과 시 실행되는 핸들러: 커스텀 에러 응답 반환
handleError(
res,
new TooManyRequestsError(
"로그인 요청이 너무 많습니다. 1분 후 다시 시도해주세요."
)
);
},
});

🚀 라우트 적용
- 사용하고 싶은 라우트에 미들웨어로 달아주시면 됩니다
// routes/auth.ts
authRouter.post("/sign-in", loginLimiter, postSignin);