📝 리팩토링 대상
목적
OpenAI API 비용 최적화
서버 리소스 낭비 방지 및 악의적 요청 차단
지속적인 HTTP 연결 문제 해결
사용자 경험(UX) 유지 (연속 타이핑 가능)
현재 구조 요약
프론트엔드: 1초 디바운싱 + 타이핑 시 API 요청
백엔드: @Throttle AOP 기반 Redis SETNX로 요청 제한
문제점:
연속 입력이 차단되어 UX 저하
요청에 대한 HTTP 연결이 불필요하게 유지됨(큐에 적재 시)
OpenAI API 호출 과잉 가능성 있음
개선 방향: Polling + 큐 + 쓰레드 풀
-
구조 요약
사용자 입력 시: 즉시 처리하지 않고 서버에 큐 적재
OpenAI 호출은 쓰레드 풀(예: 5개)로 제한하여 순차 처리
프론트는 결과를 polling으로 확인
-
기술 포인트
Scheduled task로 queue 소비
ThreadPoolExecutor로 병렬 처리 제한 (max 5)
사용자별 요청 병합/중복 제거 가능 (Map<userId, prompt> 방식)
기대효과
사용자 연속 입력 흐름 유지 → UX 개선
OpenAI API 호출 횟수 감소 → 비용 절감
HTTP 연결 유지 최소화 → 서버 리소스 절약
동시 처리량 제한 → 서버 과부하 방지 및 안정성 향상
악의적 반복 요청 방지 → 시스템 보호
📝 리팩토링 대상
목적
OpenAI API 비용 최적화
서버 리소스 낭비 방지 및 악의적 요청 차단
지속적인 HTTP 연결 문제 해결
사용자 경험(UX) 유지 (연속 타이핑 가능)
현재 구조 요약
프론트엔드: 1초 디바운싱 + 타이핑 시 API 요청
백엔드: @Throttle AOP 기반 Redis SETNX로 요청 제한
문제점:
연속 입력이 차단되어 UX 저하
요청에 대한 HTTP 연결이 불필요하게 유지됨(큐에 적재 시)
OpenAI API 호출 과잉 가능성 있음
개선 방향: Polling + 큐 + 쓰레드 풀
구조 요약
사용자 입력 시: 즉시 처리하지 않고 서버에 큐 적재
OpenAI 호출은 쓰레드 풀(예: 5개)로 제한하여 순차 처리
프론트는 결과를 polling으로 확인
기술 포인트
Scheduled task로 queue 소비
ThreadPoolExecutor로 병렬 처리 제한 (max 5)
사용자별 요청 병합/중복 제거 가능 (Map<userId, prompt> 방식)
기대효과
사용자 연속 입력 흐름 유지 → UX 개선
OpenAI API 호출 횟수 감소 → 비용 절감
HTTP 연결 유지 최소화 → 서버 리소스 절약
동시 처리량 제한 → 서버 과부하 방지 및 안정성 향상
악의적 반복 요청 방지 → 시스템 보호