ChatGPT를 사용하는 번역 기능에서 악의적인 요청과 과금 문제 해결 방법

0_jin·2025년 7월 6일
0

사이드 프로젝트를 운영하면서 사용자가 작성한 게시글이나 댓글을 자동으로 번역해주는 기능을 구현했습니다.

이 기능은 ChatGPT API를 사용하며, 사용자 경험 향상에 큰 도움이 되었습니다.

하지만 서비스를 운영하면서 몇 가지 보안 및 비용 이슈에 대한 우려가 생겼고, 이에 대한 대응이 필요했습니다.


문제 정의

✅ 1. 정상적인 사용

  • 로그인한 사용자가 직접 게시글이나 댓글을 작성
  • 번역 요청은 사용자의 실제 행위에 의해 발생

→ 이 경우 번역 기능을 제공하는 데 문제가 없습니다.

⚠️ 2. 문제 상황

두 가지 우려가 있었습니다:

  1. 악의적인 요청
    시스템을 의도적으로 과부하시키거나 비정상적인 방식으로 사용하는 경우

  2. 과도한 비용
    악성 요청이나 예상 외 트래픽으로 인해 OpenAI API 사용 비용이 급증하는 경우


대응 전략

🔐 1. 악의적인 요청을 정의하고 제한하기

✅ 케이스 1: 요청자가 Bot일 경우

  • Gatling, JMeter, curl, python-requests 과 같이 브라우저가 아닌 요청이거나, User-Agent가 의심스러운 경우 Bot으로 간주

→ 이러한 요청에 대해 번역 기능을 제공하지 않음

✅ 케이스 2: 짧은 시간 내 과도한 요청

  • IP 단위로 일정 시간 안에 너무 많은 요청이 들어올 경우 비정상적인 행동으로 판단
예시 조건:
- URL: /api/translate
- Method: POST
- 5분 동안 IP당 200건 이상 요청 시 자동 차단

🖥️ 서버 인스턴스가 1대인 경우
  • Nginxlimit_req 기능으로 IP당 요청 횟수 제한
☁️ 서버 인스턴스가 2대 이상인 경우
  • Application Load Balancer(ALB) 앞에 AWS WAF를 붙여 IP 기반 Rate Limit 적용

💸 2. 요금 과다 청구를 방지하기

✅ 사용자당 일일 번역 횟수 제한

  • 로그인한 사용자만 번역 기능 사용 가능 ( 기존 기획 )
  • Redis를 사용하여 여러 인스턴스에서 사용자 번역 횟수 공유
  • 하루 기준 요청 횟수를 초과하면 번역 기능 제공 X

📡 3. 악의적인 요청 추적 및 Slack 알림

단순히 차단만 하는 것이 아니라, 이벤트 발생 시 Slack으로 실시간 알림을 받아 운영 상태를 가시화합니다.

✅ 1. WAF 기반 악성 요청 알림

WAF Rate Limit 발생
 → CloudWatch Logs
 → Metric Filter: 차단 로그 감지
 → CloudWatch Alarm
 → SNS Topic 발행
 → Slack 알림 전송

✅ 2. 사용자 기반 번역 제한 알림

Redis로 사용자 번역 횟수를 추적 후
→ 일일 한도 초과 시 Slack Webhook으로 알림

profile
가독성 좋은 코드, 성능 개선, 좋은 dx 경험, 자동화 를 생각합니다.

0개의 댓글