🌿 중급 백엔드
API Rate Limiting이란?
쉽게 이해하기
Rate Limiting은 뷔페에서 '1인당 접시 3개까지'라고 제한하는 것과 비슷해요. 모두에게 공평하게 음식을 나눠주려면 한 사람이 독차지하지 못하게 막아야 하잖아요. API도 마찬가지로 한 사용자가 너무 많은 요청을 보내면 서버가 느려지니까, 시간당 요청 횟수를 제한하는 거예요.
핵심 정리
API를 너무 자주 호출하지 못하도록 횟수를 제한하는 기능이에요.
자세히 알아보기
Rate Limiting은 특정 사용자나 IP가 일정 시간 동안 보낼 수 있는 API 요청 횟수를 제한하는 기능이에요. 예를 들어 '1분에 최대 60번', '1시간에 최대 1000번' 같은 식으로 설정하죠. 제한을 초과하면 서버는 '429 Too Many Requests' 에러를 반환하고, 클라이언트는 잠시 기다렸다가 다시 요청해야 해요.
왜 필요할까요? 첫째, 서버 보호를 위해서예요. 악의적인 사용자가 초당 수천 번 요청을 보내면 서버가 다운될 수 있어요(DDoS 공격). Rate Limiting으로 이런 공격을 막을 수 있죠. 둘째, 공정한 자원 분배를 위해서예요. 무료 API는 모든 사용자가 공평하게 쓸 수 있도록 제한을 두고, 더 많이 쓰고 싶으면 유료 요금제로 업그레이드하게 만들어요.
Rate Limiting 정보는 응답 헤더에 포함돼요. 'X-RateLimit-Limit: 1000'은 전체 한도, 'X-RateLimit-Remaining: 950'은 남은 횟수, 'X-RateLimit-Reset: 1643723400'은 제한이 리셋되는 시간을 나타내요. 트위터, GitHub, Google Maps API 같은 대부분의 유명 API가 이런 헤더를 제공해요.
실무에서는 API를 사용할 때 Rate Limiting을 고려해서 코드를 작성해야 해요. 만약 제한에 걸리면 자동으로 재시도하거나, 요청 간격을 조절하는 로직을 추가하죠. 백엔드를 개발할 때는 Redis 같은 인메모리 데이터베이스를 활용해서 Rate Limiting을 구현해요. Express.js라면 'express-rate-limit' 같은 라이브러리로 쉽게 적용할 수 있어요.