내 잡다한 노트
Throttling과 API Throttling 본문
**Throttling(쓰로틀링)**은 시스템, 네트워크, 애플리케이션 또는 API에서 과도한 요청이나 작업을 제한하여 성능을 유지하고 리소스 사용을 최적화하는 기술 또는 메커니즘을 말합니다.
또는 PC, 노트북의 CPU, GPU 등이 지나치게 과열될 때 기기의 손상을 막고자 클럭과 전압을 강제적으로 낮추거나 강제로 전원을 꺼서 발열을 줄이는 기능으로 불리기도 한다.
API Throttling은 주로 API를 사용하는 환경에서 적용되며, 클라이언트가 일정 시간 동안 보낼 수 있는 요청 수를 제한하여 API 서버가 과부하에 걸리지 않도록 보호합니다.
1. Throttling의 일반 개념
- 목적
- 리소스 보호: 서버, 네트워크, 데이터베이스 등의 과부하를 방지.
- 공정한 리소스 분배: 여러 사용자 간에 리소스를 공평하게 사용하도록 제어.
- 비용 절감: 과도한 리소스 사용으로 인한 추가 비용을 방지.
- 서비스 안정성: 과도한 트래픽 상황에서도 안정적인 서비스 제공.
- 동작 방식
- Rate Limiting(속도 제한): 특정 기간 동안 허용되는 최대 요청 수를 제한.
- Queueing(큐잉): 요청이 과도할 경우 큐에 쌓아두고 처리.
- Reject or Delay: 초과된 요청을 거부하거나 지연시킴.
2. API Throttling
- 정의
- API 서버가 특정 클라이언트 또는 모든 클라이언트에 대해 일정 시간 동안 허용하는 요청 수를 제한하는 메커니즘.
- 주요 목적
- API 서버 보호: 초당 많은 요청이 서버에 도달하면 성능 저하가 발생할 수 있으므로 이를 방지.
- QoS(서비스 품질 보장): 모든 사용자가 공평하게 서비스를 이용할 수 있도록 보장.
- 비용 관리: 서버의 리소스 소모를 제한하여 추가 비용 발생 방지.
3. API Throttling 주요 구성 요소
- Rate Limits(속도 제한)
- API에 대해 설정된 시간당, 분당, 또는 초당 요청 횟수 제한.
- 예: "100 requests per second" 또는 "10,000 requests per day".
- Burst Handling
- 갑작스러운 요청 급증(버스트)에 대응하여 짧은 시간 동안 추가 요청을 허용.
- 일정량을 초과하면 요청을 제한하거나 대기열로 전환.
- Quota(할당량)
- 특정 기간 동안 각 클라이언트가 사용할 수 있는 API 요청의 총량.
- 예: "하루에 5,000개의 요청".
- Throttling Policy
- 사용자, 애플리케이션, API 키별로 다른 제한 정책 적용 가능.
- VIP 사용자에게 높은 한도를 제공하거나 일반 사용자에게 낮은 한도를 적용.
- HTTP 상태 코드
- 요청이 제한되었을 경우 서버는 보통 다음 상태 코드를 반환:
- 429 Too Many Requests: 요청 제한 초과.
- 503 Service Unavailable: 서버 과부하.
- 요청이 제한되었을 경우 서버는 보통 다음 상태 코드를 반환:
4. Throttling 구현 방식
- Token Bucket Algorithm(토큰 버킷 알고리즘)
- 미리 설정된 속도에 따라 "토큰"을 추가하고, 요청 시 토큰을 소모.
- 토큰이 없는 경우 요청이 거부되거나 지연됨.
- Leaky Bucket Algorithm(누수 버킷 알고리즘)
- 요청을 버킷에 저장하고, 일정한 속도로 처리.
- 버킷이 가득 차면 초과 요청은 거부.
- Fixed Window Counter(고정 윈도우 카운터)
- 일정 시간 동안 요청 횟수를 카운팅.
- 한도를 초과하면 추가 요청을 거부.
- Sliding Window Log(슬라이딩 윈도우 로그)
- 요청 타임스탬프를 기록하고 일정 시간 동안의 요청만 카운팅.
5. Throttling 사례
- 클라우드 서비스
- AWS API Gateway: API 호출에 대해 초당 호출 수 및 초당 데이터 전송량 제한.
- Azure: API 요청량과 데이터 처리 속도 제한을 설정 가능.
- 소셜 미디어 API
- Twitter API: 개발자가 15분 단위로 사용할 수 있는 요청 수 제한.
- Instagram API: 사용자당 시간당 요청 제한.
- 웹 애플리케이션
- 로그인 시스템: 반복적인 로그인 시도를 제한하여 보안 강화.
6. Throttling의 장점과 단점
- 장점
- 서비스 안정성 유지.
- 시스템 과부하 방지.
- 악의적인 사용(DoS 공격 등) 방지.
- 공정한 리소스 분배.
- 단점
- Legitimate(정당한) 요청도 제한될 수 있음.
- 높은 트래픽이 예상되는 경우 사용자 경험 저하.
- 잘못된 설정 시 성능 저하 또는 서비스 중단.
7. Throttling 최적화
- 클라이언트별 적합한 한도 설정.
- 실시간 모니터링을 통한 적응형 Throttling 구현.
- 중요한 요청 우선 처리 (예: 인증 요청).
- 요청 대기열 관리로 사용자 경험 개선.