Skip to content

Conversation

@Dimo-2562
Copy link
Contributor

❤️ 기능 설명

외부 LLM API 호출의 안정성과 처리 성능을 대폭 개선하기 위해 Resilience4j 설정을 최적화하고, 각 API의 실제 제한에 맞춰 Rate Limiter를 분리했습니다.

주요 변경사항

1. Circuit Breaker 예외 처리 개선 (f138de3)

파일: src/main/java/com/techfork/global/llm/exception/*, application.yml

  • 문제: 일시적인 네트워크 오류나 Rate Limit 초과 시에도 Circuit이 열려 정상 요청까지 차단
  • 해결:
    • 커스텀 예외 계층 도입 (LlmException, LlmNetworkException, LlmRateLimitException)
    • Circuit Breaker는 LlmException만 기록, 네트워크/Rate Limit 예외는 무시
    • Retry는 네트워크/Rate Limit 예외만 재시도

Before:

record-exceptions:
  - java.net.ConnectException
  - java.net.SocketTimeoutException
  # 일시적 문제로도 Circuit 열림

After:

record-exceptions:
  - com.techfork.global.llm.exception.LlmException
ignore-exceptions:
  - com.techfork.global.llm.exception.LlmNetworkException
  - com.techfork.global.llm.exception.LlmRateLimitException
# 일시적 문제는 Circuit 영향 없음

2. Rate Limiter 분리 (5c0bd38)

파일: src/main/java/com/techfork/global/llm/impl/*, application.yml

  • 문제: gpt-4o-mini(500 RPM)와 text-embedding-3-large(3k RPM)가 동일한 15 req/min 제한 사용
  • 해결:
    • llmSummary: 37 req/min (gpt-4o-mini용, 안전 마진 20%)
    • llmEmbedding: 590 req/min (text-embedding-3-large용, 안전 마진 20%)
API 실제 제한 이론값 설정값 (80%) 기존 대비
gpt-4o-mini 500 RPM, 200k TPM ~46 req/min 37 req/min 2.5배
text-embedding-3-large 3k RPM, 1M TPM ~740 req/min 590 req/min 39배
  1. TaskExecutor 확장 (34020d7)

파일: src/main/java/com/techfork/domain/source/config/RssCrawlingJobConfig.java:172

  • Embedding Rate Limit 증가에 따라 스레드 풀 확장:
    • CorePoolSize: 3 → 10 (3.3배)
    • MaxPoolSize: 5 → 20 (4배)
    • QueueCapacity: 20 → 50 (2.5배)

성능 개선 효과

100개 게시글 처리 시나리오:

  • 기존: 15 req/min 제한 → 약 13.3분 소요
  • 개선:
    • Summary: 37 req/min → 약 2.7분
    • Embedding: 590 req/min → 약 10초
    • 총 약 3분 소요 (77% 단축)

안정성 향상:

  • 일시적 네트워크 장애 시 Circuit 열리지 않음
  • Rate Limit 초과 시 재시도로 처리 (Circuit 영향 없음)
  • 실제 API 오류만 Circuit 상태에 영향

연결된 issue

연결된 issue를 자동으로 닫기 위해 아래 {이슈넘버}를 입력해주세요.

close #147



✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 테스트 결과 사진을 넣었는가?
  • 이슈넘버를 적었는가?

@Dimo-2562 Dimo-2562 requested a review from Joon9750 January 7, 2026 12:12
@Dimo-2562 Dimo-2562 self-assigned this Jan 7, 2026
@Dimo-2562 Dimo-2562 added ✨ IMPROVE 기존 기능 변경 🏢 domain:source 테크블로그 출처 labels Jan 7, 2026
@Dimo-2562 Dimo-2562 merged commit c0e6d63 into develop Jan 7, 2026
1 check passed
@Dimo-2562 Dimo-2562 deleted the improve/#147 branch January 7, 2026 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🏢 domain:source 테크블로그 출처 ✨ IMPROVE 기존 기능 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[IMPROVE] Resilience4j 설정 최적화 및 Rate Limiter 분리

2 participants