[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 1
JSCODE 박재성
2026-01-12
author
JSCODE 박재성
category
Redis
createdAt
Jan 12, 2026
series
비전공자도 이해할 수 있는 Redis 중급/실전
slug
rate-limit-api-requests-with-redis-part-1
type
post
updatedAt
Jan 12, 2026 12:24 AM
✅ 문제 상황
클론 받은 프로젝트의 API에는 요청 횟수에 대한 제한(Rate Limit)이 전혀 걸려있지 않다. 이 상태에서는 특정 사용자가 악의적으로 아주 짧은 시간 안에 수십, 수백 번의 요청을 보내면 서버 부하가 급격히 증가할 수 있다. 따라서 실무에서는 악의적으로 사용자가 서버에 과부하를 걸 수 없도록 API 요청 횟수를 제한한다. 따라서 이번 실습에서는 10초당 API 요청 횟수를 5회로 제한하는 기능을 Redis를 활용해 구현해볼 것이다.
✅ 구현 방법
요청이 들어올 때마다 Sorted Set에서 Member에는 각 요청을 구분할 수 있는 고유의 값을 넣고, Score에는 요청을 보낸 시간을 unixtime으로 넣는다.
‘현재 시간(unixtime)’에서 ‘Score에 저장되어 있는 요청을 보낸 시간(unixtime)’을 빼서 10,000(10초)을 넘는 값은 전부 삭제한다.
최근 10초에서 발생한 API 요청 횟수를 카운팅해서 제한하는 방식이기 때문에, 현재 시간을 기준으로 10초가 넘어간 요청은 삭제해준다.
Sorted Set에 남아있는 Member의 총 개수를 세알린다.
현재 시간을 기준으로 10초가 넘어간 요청은 삭제했기 때문에, 남아있는 요청은 10초 이내의 요청들이다. 따라서 남아있는 요청의 개수가 곧 최근 10초 동안 사용자가 보낸 요청의 개수이다.
사용자가 보낸 요청의 개수로 API 요청을 허용하거나 제한한다.
author
category
Redis
createdAt
Jan 12, 2026
series
비전공자도 이해할 수 있는 Redis 중급/실전
slug
type
series-footer
updatedAt
Jan 12, 2026 12:26 AM
📎
이 글은 비전공자도 이해할 수 있는 Redis 중급/실전 강의의 수업 자료 중 일부입니다.