🔧 핵심 문제 상황
자동으로 스레드가 생성 → 사용자 요청 증가 또는 크롤링/스크래핑 등 자동 처리
API 요청이 많아짐 → 외부 API 또는 내부 서비스에 과도한 요청
Rate Limit에 걸림 → 429 Too Many Requests 또는 throttling 발생
---
✅ 해결 전략 5가지
---
1. 요청 큐(Queue) 및 작업 스케줄링 도입
API 호출을 **비동기 큐(job queue)**로 넣고, 일정 속도로 소비하게 하여 과도한 호출을 방지
예: RabbitMQ, Redis Queue(RQ), Sidekiq, Celery 등 활용
# 예시: Celery task로 분산 API 요청
@celery.task(rate_limit='10/m') # 분당 10회 제한
def call_external_api(...):
...
---
2. Rate Limit-aware 로직 구현
외부 API의 Rate Limit 헤더 (예: X-RateLimit-Remaining) 를 보고 호출 빈도 제어
리미트에 가까워지면 호출을 지연시키거나 중단
예: exponential backoff + jitter 전략 적용
---
3. 토큰 버킷(Token Bucket) 또는 리키 버킷(Leaky Bucket) 알고리즘
서버 내부적으로 요청 허용량을 제한하는 알고리즘을 적용
요청이 일정 속도 이상으로 들어오면 거부하거나 대기
# 예시: Redis로 구현한 간단한 토큰 버킷
GET token_count FROM redis
IF token_count > 0:
DECREMENT token_count
PROCESS request
ELSE:
RETURN 429
---
4. 캐싱 (Caching) 활용
동일한 요청이 반복된다면 결과를 캐싱하여 API 호출 자체를 줄임
Redis, Memcached 등을 활용한 short-term 캐싱 (TTL 짧게 설정)
---
5. Batching 및 API 콜 합치기
가능한 경우, 여러 요청을 하나로 묶어서(batch) 보내거나
특정 기준으로 묶어 한번에 처리 (예: 10개의 사용자 → 1번 요청)
---
💡 추가 전략
서킷 브레이커(Circuit Breaker) 패턴: 일정 오류율 이상일 때 자동으로 API 호출 중단
API Gateway에 Rate Limiting 설정: Nginx, Kong, AWS API Gateway 등에서 글로벌 제어 가능
Retry 정책 설계: 지수 백오프 기반으로 재시도, 단 무한 루프 주의
---
🔚 결론
자동 스레드 생성으로 인해 대량 요청이 발생할 수 있다면,
> **"비동기 큐 + 호출 속도 제어 + 캐싱 + Rate Limit 대응 로직"**을 조합해
요청의 타이밍과 양을 조절하는 구조적 해결이 핵심입니다.
'Spring & Backend' 카테고리의 다른 글
| 문득, 롬복의 등장과 함께 많이 사라진 @Autowired (2) | 2025.07.27 |
|---|---|
| DB에서 list와 hash map으로 받기 (6) | 2025.07.27 |
| 항해플러스 백엔드 Lite 1기 솔직 후기[2025년7월27일 기준] (19) | 2025.07.26 |
| TCP 3-way-handshake와 4-way-handshake (6) | 2025.07.25 |
| 멀티 쓰레딩에 대해서 설명해 주세요 (10) | 2025.07.25 |
