레이트 리미팅 (Rate Limiting)
쉽게 풀면
놀이공원 인기 놀이기구에서 "1인당 한 시간에 3번까지만 탈 수 있습니다"라는 규칙을 정한다고 해봅시다. 이렇게 해야 한 사람이 계속 줄을 서서 독차지하는 일 없이, 모두가 골고루 이용할 수 있고 대기줄도 감당할 수 있는 수준으로 유지됩니다. 레이트 리미팅도 같은 원리로, 서버가 "이 사용자(또는 이 IP, 이 API 키)는 1분에 요청을 100번까지만 받아준다"처럼 상한선을 정해둡니다. 정해진 횟수를 넘어서면 서버는 추가 요청을 거절하거나 잠시 기다리게 합니다. 이렇게 하면 특정 사용자가 실수로, 혹은 악의적으로 요청을 폭주시키더라도 서버 전체가 느려지거나 멈추는 것을 막을 수 있습니다.
왜 중요한가
레이트 리미팅은 시스템의 가용성과 공정성을 동시에 지키는 기본 방어 수단이기 때문에, 분산시스템·클라우드 인프라·보안 연구에서 빠지지 않고 다뤄집니다. 서비스 거부 공격 방어뿐 아니라 여러 사용자가 유한한 서버 자원을 나눠 쓰는 멀티테넌트 환경에서 자원을 공평하게 배분하는 기법으로도 연구되며, API 경제가 커지면서 과금 정책과 결합된 레이트 리미팅 설계도 활발히 논의되는 주제입니다.
논문에서는 이렇게 쓰입니다
이 문장은 사용자마다 초당 보낼 수 있는 요청 수에 상한을 두는 방식으로, 트래픽이 갑자기 몰려도 서버가 견딜 수 있게 설계했다는 뜻입니다.
멀티테넌트 클라우드 환경에서 자원을 공평하게 나누기 위한 격리 수단으로 레이트 리미팅을 사용했다는 뜻입니다.
클라이언트 쪽에서 서버의 레이트 리미팅에 대응해 요청 재시도 방식을 어떻게 설계했는지 설명할 때 쓰이는 표현입니다.
조금 더 깊게 보면
레이트 리미팅을 구현하는 대표적인 알고리즘으로는 토큰 버킷(token bucket), 리키 버킷(leaky bucket), 고정 윈도우(fixed window), 슬라이딩 윈도우(sliding window) 방식 등이 있으며, 각각 순간적인 트래픽 폭주(버스트)를 얼마나 허용하는지, 제한을 얼마나 매끄럽게 적용하는지에서 차이가 있습니다. 분산 환경에서는 여러 서버 인스턴스가 요청 카운트를 공유해야 하므로, 이를 위해 별도의 저장소나 조정 메커니즘을 두는 것이 일반적입니다.
주의할 점
레이트 리미팅은 대량의 요청을 보내 서버를 마비시키는 분산서비스거부공격을 막는 데도 쓰이지만, 정상적인 사용자의 요청까지 지나치게 자주 막으면 서비스 이용에 불편을 줄 수 있습니다. 그래서 실제 서비스에서는 사용자 등급이나 상황에 따라 제한 기준을 다르게 두는 경우가 많으며, 여러 서버로 요청을 고르게 분배하는 로드밸런싱과는 목적이 다르다는 점(트래픽 분산 vs. 요청량 자체를 제한)을 구분해야 합니다.