API 요청제한 (API Rate Limiting)
쉽게 풀면
놀이공원의 인기 놀이기구가 한 사람당 하루에 탈 수 있는 횟수를 제한하는 것을 떠올리면 됩니다. 이렇게 하지 않으면 한 사람이 계속 줄을 서서 자리를 독차지하고, 다른 사람들은 기다리다 지쳐버릴 수 있습니다. API 요청제한도 마찬가지로, 짧은 시간 안에 같은 사용자나 프로그램이 너무 많은 요청을 보내지 못하도록 막아서 서버가 감당할 수 있는 수준으로 트래픽을 조절합니다. 이 제한이 없으면 한두 사람의 과도한 요청 때문에 전체 서비스가 느려지거나 멈출 수 있습니다.
왜 중요한가
API 요청제한은 서비스 거부(DoS) 공격을 막는 기초적인 방어 수단일 뿐 아니라, 비밀번호 무작위 대입 공격이나 자동화된 데이터 수집(크롤링) 남용을 억제하는 데도 중요한 역할을 합니다. 웹 애플리케이션이 대부분 API를 통해 데이터를 주고받는 오늘날의 구조에서, 요청제한 설계는 보안성과 서비스 안정성을 동시에 좌우하는 요소로 다뤄집니다.
논문에서는 이렇게 쓰입니다
비밀번호를 계속 바꿔가며 시도하는 공격을 막으려면 로그인 시도 횟수 자체를 제한하는 것이 효과적이라는 실험 결과입니다.
매 순간 정확히 같은 속도로만 요청을 허용하는 것이 아니라, 일정 여유분을 두어 순간적인 사용량 증가는 유연하게 받아들이는 방식이라는 설명입니다.
조금 더 깊게 보면
API 요청제한을 구현하는 알고리즘으로는 토큰 버킷(token bucket), 누출 버킷(leaky bucket), 고정 윈도우(fixed window), 슬라이딩 윈도우(sliding window) 방식 등이 있으며, 각각 트래픽 허용 패턴과 구현 복잡도에서 차이가 있습니다. 제한 기준은 IP 주소, 사용자 계정, API 키 등 다양한 단위로 설정할 수 있으며, 어떤 기준을 사용하느냐에 따라 우회 난이도도 달라집니다.
주의할 점
IP 주소 기준으로만 요청을 제한하면 여러 IP를 바꿔가며 공격하는 분산형 공격에는 효과가 제한적일 수 있어, 단일 기법만으로는 충분하지 않은 경우가 많습니다.