사이드 프로젝트를 운영하면서 사용자가 작성한 게시글이나 댓글을 자동으로 번역해주는 기능을 구현했습니다.
이 기능은 ChatGPT API를 사용하며, 사용자 경험 향상에 큰 도움이 되었습니다.
하지만 서비스를 운영하면서 몇 가지 보안 및 비용 이슈에 대한 우려가 생겼고, 이에 대한 대응이 필요했습니다.
→ 이 경우 번역 기능을 제공하는 데 문제가 없습니다.
두 가지 우려가 있었습니다:
악의적인 요청
시스템을 의도적으로 과부하시키거나 비정상적인 방식으로 사용하는 경우
과도한 비용
악성 요청이나 예상 외 트래픽으로 인해 OpenAI API 사용 비용이 급증하는 경우
Gatling
, JMeter
, curl
, python-requests
과 같이 브라우저가 아닌 요청이거나, User-Agent가 의심스러운 경우 Bot으로 간주→ 이러한 요청에 대해 번역 기능을 제공하지 않음
예시 조건:
- URL: /api/translate
- Method: POST
- 5분 동안 IP당 200건 이상 요청 시 자동 차단
→
Nginx
의 limit_req
기능으로 IP당 요청 횟수 제한Application Load Balancer(ALB)
앞에 AWS WAF
를 붙여 IP 기반 Rate Limit 적용단순히 차단만 하는 것이 아니라, 이벤트 발생 시 Slack으로 실시간 알림을 받아 운영 상태를 가시화합니다.
✅ 1. WAF 기반 악성 요청 알림
WAF Rate Limit 발생
→ CloudWatch Logs
→ Metric Filter: 차단 로그 감지
→ CloudWatch Alarm
→ SNS Topic 발행
→ Slack 알림 전송
✅ 2. 사용자 기반 번역 제한 알림
Redis로 사용자 번역 횟수를 추적 후
→ 일일 한도 초과 시 Slack Webhook으로 알림