🌳 고급 API
Rate Limiting은 왜 하나요?
쉽게 이해하기
음식점에서 한 테이블이 계속 주문을 하면 주방이 마비되겠죠? 그래서 '테이블당 동시 주문 3개까지'처럼 제한을 둡니다. API도 마찬가지예요. 한 사용자가 1초에 1000번 요청하면 서버가 다운될 수 있으니, '1분에 100번까지'처럼 제한을 거는 겁니다.
핵심 정리
API 요청 횟수를 제한해서 서버를 보호하는 방법입니다.
자세히 알아보기
Rate Limiting은 일정 시간 동안 허용할 요청 횟수를 제한하는 기술입니다. 예를 들어 '1분에 60번', '시간당 1000번'처럼 설정하죠. 이걸 왜 해야 할까요? 첫째, DDoS 공격을 막기 위해서입니다. 악의적인 사용자가 무한정 요청을 보내면 서버가 죽을 수 있으니까요.
둘째, 공정한 자원 분배를 위해서입니다. 한 사용자가 API를 독점하면 다른 사용자들이 서비스를 못 쓰게 됩니다. 특히 무료 API를 제공하는 서비스는 남용을 막기 위해 필수로 도입하죠. 셋째, 비용 관리를 위해서입니다. 클라우드 환경에서는 트래픽에 따라 비용이 증가하니, 과도한 요청을 막아야 예산을 통제할 수 있습니다.
구현 방식은 여러 가지가 있습니다. Token Bucket 방식은 토큰을 일정 속도로 채워주고, 요청할 때마다 토큰을 소비하는 방식이에요. Fixed Window 방식은 1분 단위로 카운터를 리셋하는 방식이고요. Sliding Window 방식은 시간 윈도우를 움직이면서 더 정교하게 제한합니다.
실무에서는 Redis를 많이 씁니다. 각 사용자의 요청 횟수를 Redis에 저장하고, TTL로 자동 삭제되게 설정하죠. API Gateway에서 제공하는 Rate Limiting 기능을 쓰기도 합니다. 제한에 걸리면 HTTP 429 상태 코드를 반환하고, 헤더에 '남은 요청 횟수'와 '리셋 시간'을 알려주는 게 관례입니다.