Skip to content

[REFACTOR] Polling 기반 유량제어 및 LLM 처리 구조 개선 #40

Description

@betgws

📝 리팩토링 대상

목적
OpenAI API 비용 최적화
서버 리소스 낭비 방지 및 악의적 요청 차단
지속적인 HTTP 연결 문제 해결
사용자 경험(UX) 유지 (연속 타이핑 가능)

현재 구조 요약
프론트엔드: 1초 디바운싱 + 타이핑 시 API 요청
백엔드: @Throttle AOP 기반 Redis SETNX로 요청 제한
문제점:
연속 입력이 차단되어 UX 저하
요청에 대한 HTTP 연결이 불필요하게 유지됨(큐에 적재 시)
OpenAI API 호출 과잉 가능성 있음

개선 방향: Polling + 큐 + 쓰레드 풀

  1. 구조 요약
    사용자 입력 시: 즉시 처리하지 않고 서버에 큐 적재
    OpenAI 호출은 쓰레드 풀(예: 5개)로 제한하여 순차 처리
    프론트는 결과를 polling으로 확인

  2. 기술 포인트
    Scheduled task로 queue 소비
    ThreadPoolExecutor로 병렬 처리 제한 (max 5)
    사용자별 요청 병합/중복 제거 가능 (Map<userId, prompt> 방식)

기대효과

사용자 연속 입력 흐름 유지 → UX 개선
OpenAI API 호출 횟수 감소 → 비용 절감
HTTP 연결 유지 최소화 → 서버 리소스 절약
동시 처리량 제한 → 서버 과부하 방지 및 안정성 향상
악의적 반복 요청 방지 → 시스템 보호

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions