JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
과외유튜브블로그후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 Redis 중급/실전

Redis로 ‘쓰기 작업’에 대한 DB 부하 줄이기

Redis의 수많은 자료 구조를 효율적으로 배우려면?
List 자료 구조 (RPUSH, LRANGE, LPOP 등)
[실습] 좋아요 수 폭증으로 인한 DB 부하를 Redis로 해결하기 - 1
[실습] 좋아요 수 폭증으로 인한 DB 부하를 Redis로 해결하기 - 2

Redis로 동시성 이슈 해결하기

String 자료 구조 (SET, GET, DEL, SETNX)
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 1
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 2
[실습] 재고를 차감할 때 동시성 이슈로 인한 오차가 발생하지 않도록 만들기 - 3

Redis로 인기 검색어 구현하기

Sorted Set 자료 구조 (ZADD, ZRANGE, ZINCRBY)
[실습] 많이 검색한 키워드 Top 10을 보여주는 '인기 검색어 기능’ 만들기 - 1
[실습] 많이 검색한 키워드 Top 10을 보여주는 '인기 검색어 기능’ 만들기 - 2

Redis로 API 요청 횟수 제한 기능 구현하기 (Rate Limiting)

Sorted Set 자료 구조 (ZCARD, ZREMRANGEBYSCORE, EXPIRE)
[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 1
[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 2

Redis를 활용해 내 위치를 기준으로 반경 1km에 위치한 카페 찾기

Geospatial 자료 구조 (GEOADD, GEOPOS, GEODIST, GEOSEARCH)
[실습] 내 위치를 기준으로 반경 1km에 위치한 카페 찾기 - 1
[실습] 내 위치를 기준으로 반경 1km에 위치한 카페 찾기 - 2

Redis로 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기

Set 자료 구조 (SADD, SMEMBERS, SCARD)
Bitmap 자료 구조 (SETBIT, GETBIT, BITCOUNT)
Set과 Bitmap의 공통점 / 차이점
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 1
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 2
[실습] 하루 동안 서비스에 방문한 사용자 수(DAU) 카운팅하기 - 3

Redis를 세션 스토리지로 활용하기

Hash 자료 구조 (HSET, HGET, HGETALL)
서버가 2대 이상일 경우, Redis로 세션 스토리지를 구축해야 하는 이유
[실습] 인증 기능을 로컬 세션 스토리지로 구현했을 때 발생하는 문제점 - 1
[실습] 인증 기능을 로컬 세션 스토리지로 구현했을 때 발생하는 문제점 - 2
[실습] Redis로 세션 스토리지 구축하기
← 블로그 목록으로 돌아가기

[실습] 악의적인 요청을 방지하기 위해, 10초당 API 요청 횟수를 5회로 제한하기 - 1

JSCODE 박재성
JSCODE 박재성
2026. 02. 25.
author
JSCODE 박재성
category
Redis
createdAt
Jan 12, 2026 12:23 AM
isPublic
isPublic
series
비전공자도 이해할 수 있는 Redis 중급/실전
slug
rate-limit-api-requests-with-redis-part-1
type
post
updatedAt
Feb 25, 2026 11:00

✅ 문제 상황

클론 받은 프로젝트의 API에는 요청 횟수에 대한 제한(Rate Limit)이 전혀 걸려있지 않다. 이 상태에서는 특정 사용자가 악의적으로 아주 짧은 시간 안에 수십, 수백 번의 요청을 보내면 서버 부하가 급격히 증가할 수 있다. 따라서 실무에서는 악의적으로 사용자가 서버에 과부하를 걸 수 없도록 API 요청 횟수를 제한한다. 따라서 이번 실습에서는 10초당 API 요청 횟수를 5회로 제한하는 기능을 Redis를 활용해 구현해볼 것이다.
 
 

✅ 구현 방법

  1. 요청이 들어올 때마다 Sorted Set에서 Member에는 각 요청을 구분할 수 있는 고유의 값을 넣고, Score에는 요청을 보낸 시간을 unixtime으로 넣는다.
    1. notion image
       
  1. ‘현재 시간(unixtime)’에서 ‘Score에 저장되어 있는 요청을 보낸 시간(unixtime)’을 빼서 10,000(10초)을 넘는 값은 전부 삭제한다.
    1. 최근 10초에서 발생한 API 요청 횟수를 카운팅해서 제한하는 방식이기 때문에, 현재 시간을 기준으로 10초가 넘어간 요청은 삭제해준다.
      notion image
       
  1. Sorted Set에 남아있는 Member의 총 개수를 세알린다.
    1. 현재 시간을 기준으로 10초가 넘어간 요청은 삭제했기 때문에, 남아있는 요청은 10초 이내의 요청들이다. 따라서 남아있는 요청의 개수가 곧 최근 10초 동안 사용자가 보낸 요청의 개수이다.
      notion image
       
  1. 사용자가 보낸 요청의 개수로 API 요청을 허용하거나 제한한다.
 
📎
이 글은 비전공자도 이해할 수 있는 Redis 중급/실전 강의의 수업 자료 중 일부입니다.