Skip to content

AI 관련 리팩터링#44

Merged
haeun9634 merged 14 commits into
devfrom
ai/refactor
Apr 14, 2026
Merged

AI 관련 리팩터링#44
haeun9634 merged 14 commits into
devfrom
ai/refactor

Conversation

@Jaehyeon-Han

@Jaehyeon-Han Jaehyeon-Han commented Apr 11, 2026

Copy link
Copy Markdown
Contributor

병렬 호출

  • CompletableFuture를 사용하여 파이프라인 실행 구조를 병렬로 수정
  • 분석 시간이 기존 15초 정도에서 8초 정도로 감소

동시 요청 제한

  • 스레드풀 구조 → 동시 요청 수 자동 제한: 현재 최대 30개 (5-6개 분석)까지 동시 요청 가능
  • 메시지 번역과 OCR은 포함 x

추후 개선

  • 분기 필요 시 그래프 기반 구조로의 변경 고려

장애 시 알림

  • LLM API 예외 발생 누적 시 장애 상태로 변경
  • 장애 → 정상, 정상 → 장애 시에 알림 전송
  • 서버 재시작 시에는 알림 재전송 가능

설정값

  • application.properties 속성 지정 필요
  • 아래 값은 기본값
llmtracker.window-size=5
llmtracker.recovery-threshold=4
llmtracker.failure-threshold=3
  • llmtracker.window-size : 최근 N번의 요청 결과 추적
  • llmtracker.recovery-threshold=4 : 4번 이상 성공하면 정상
  • llmtracker.failure-threshold=3 : 3번 이상 실패하면 실패

그외

  • .envDISCORD_WEBHOOK_URL 지정 필요
  • .env.example에 해당 항목 추가

로깅 로직 변경

  • 로깅 비동기는 AI 응답 속도에 비해 성능 개선이 적다고 생각되어 제거
  • JSON 로그 출력 시 MDC ignore 미적용 사항 수정
  • JSON 로그 출력 시 request_id 함께 출력: 엄밀히는 DB 메타데이터를 통해 확인 가능하나, 로그 분석 편의를 위해 추가

기타

  • 관리자 페이지 Swagger 숨김 처리
  • 패키지 정리
  • 파이프라인 클래스 책임 분리
  • 프롬프트 관리 API 동시성 문제 해결 및 테스트 코드 추가

@github-actions

Copy link
Copy Markdown

🤖 GPT PR Review

결론: request-changes

요약: 파싱 실패

주요 지적

지적 없음

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

AI 도메인 전반의 구조를 정리하면서 문서 분석 파이프라인을 CompletableFuture 기반 병렬 실행으로 리팩터링하고, LLM 장애 감지/알림 및 로깅/프롬프트 관리 동시성 개선을 추가합니다.

Changes:

  • 문서 분석 파이프라인 모듈 실행을 병렬화하고 실행 책임을 PipelineExecutor로 분리
  • LLM 상태 슬라이딩 윈도우 추적(LlmHealthTracker) 및 Discord 웹훅 알림 추가
  • 프롬프트/AI 관련 패키지(entity|model.vodomain.entity|domain.vo) 정리 및 동시성 제약(유니크 인덱스) 추가, 로깅 라우팅 조정

Reviewed changes

Copilot reviewed 57 out of 57 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/test/java/com/example/konnect_backend/domain/ai/service/prompt/PromptTemplateResolverTest.java PromptTemplate 패키지 이동에 따른 import 갱신
src/test/java/com/example/konnect_backend/domain/ai/service/prompt/management/PromptManagementServiceTest.java 프롬프트 버전 생성 검증 테스트 추가
src/test/java/com/example/konnect_backend/domain/ai/infra/LlmHealthTrackerTest.java LLM 상태 전환(UP/DOWN) 테스트 추가
src/test/java/com/example/konnect_backend/domain/ai/infra/GeminiServiceTest.java Gemini 실패/성공 시 health tracker 기록 테스트 추가
src/main/resources/logback-spring.xml JSON 로그 설정 및 분석 JSON 로거 라우팅 변경
src/main/resources/db/migration/V24__add_unique_on_active_prompt.sql ACTIVE 프롬프트 1개 보장용 유니크 인덱스 추가
src/main/resources/application.properties Discord 웹훅/LLM tracker 설정 추가
src/main/java/com/example/konnect_backend/global/config/AsyncConfig.java 프롬프트 실행용 스레드풀 및 MDC 전파 데코레이터 추가
src/main/java/com/example/konnect_backend/domain/ai/service/textextractor/TextExtractorFacade.java 텍스트 추출 API를 context 기반으로 변경
src/main/java/com/example/konnect_backend/domain/ai/service/textextractor/TextExtractor.java VO 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/textextractor/PdfTextExtractor.java VO 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/textextractor/ImageTextExtractor.java VO 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/prompt/PromptTemplateResolver.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/prompt/management/PromptManagementService.java 활성화/버전생성 검증 로직 및 동시성 관련 주석 보강
src/main/java/com/example/konnect_backend/domain/ai/service/prompt/management/PromptLoader.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/pipeline/PipelineExecutor.java 병렬 모듈 실행 책임 분리(신규)
src/main/java/com/example/konnect_backend/domain/ai/service/pipeline/DocumentAnalysisPipeline.java 파이프라인 오케스트레이션 단순화 및 로그 저장 서비스 분리 연동
src/main/java/com/example/konnect_backend/domain/ai/service/module/UnifiedExtractorModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/TranslatorModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/SummarizerModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/PromptModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/KoreanSimplifierModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/DocumentClassifierModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/module/DifficultExpressionExtractorModule.java 모듈 패키지 경로 변경 및 VO/엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/service/log/GeminiLogService.java 비동기 로깅 제거 및 request id 필드 추가
src/main/java/com/example/konnect_backend/domain/ai/service/log/AnalysisLogService.java 분석 요청/JSON 로그 및 DB 로그 저장 책임 분리(신규)
src/main/java/com/example/konnect_backend/domain/ai/service/history/AnalysisHistoryService.java 서비스 패키지 경로 변경 및 VO 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/repository/PromptTemplateRepository.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/repository/LlmCallMetadataRepository.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/repository/AnalysisRequestLogRepository.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/repository/AnalysisHistoryRepository.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/repository/AiModelRepository.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/model/vo/ExtractedText.java VO 패키지 정리로 인한 삭제
src/main/java/com/example/konnect_backend/domain/ai/infra/LlmHealthTracker.java LLM 상태 슬라이딩 윈도우 추적기 추가(신규)
src/main/java/com/example/konnect_backend/domain/ai/infra/GeminiService.java 호출 성공/실패 기록 및 상태변화 알림 연동 추가
src/main/java/com/example/konnect_backend/domain/ai/infra/DiscordWebhookService.java Discord 웹훅 알림 서비스 추가(신규)
src/main/java/com/example/konnect_backend/domain/ai/dto/response/PromptResponse.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/dto/response/ModelResponse.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/dto/response/AnalysisHistoryResponse.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/dto/internal/PromptTemplateWithModelName.java 엔티티 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/dto/internal/GeminiCallResult.java VO 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/domain/vo/UploadFile.java VO 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/vo/TokenUsage.java VO 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/vo/TextExtractionResult.java VO 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/vo/PipelineContext.java PipelineContext를 domain.vo로 이동 및 file 보관 방식 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/vo/ExtractedText.java VO 재배치(신규)
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/PromptTemplate.java 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/PromptSlot.java 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/log/LlmCallMetadata.java 로그 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/log/CreatedAtBaseEntity.java 로그 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/log/AnalysisRequestLog.java 로그 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/log/AnalysisHistory.java 로그 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/domain/entity/AiModel.java 엔티티 패키지 경로 변경
src/main/java/com/example/konnect_backend/domain/ai/controller/PromptManagementController.java Swagger 숨김 처리 및 TextExtractorFacade 시그니처 변경 반영
src/main/java/com/example/konnect_backend/domain/ai/controller/AIController.java UploadFile/AnalysisHistoryService 패키지 이동 반영
src/main/java/com/example/konnect_backend/domain/ai/aop/LlmLoggingAspect.java 모듈 패키지 변경 반영 및 비동기 로깅 주석 갱신
.env.example Discord 웹훅 환경변수 예시 추가

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main/resources/logback-spring.xml
Comment thread src/main/resources/logback-spring.xml
Comment thread src/main/resources/application.properties
- includeMdc 인코더 하위로 이동 (기존에도 동작)
- ThreadPoolExecutor reject되지 않도록 CallerRunsPolicy 추가
- 로거 이름 일치하도록 수정
- DISCORD_WEBHOOK_URL blank 체크 추가
- import 최적화
- addLog 메소드 synchronized로 동시성 제어
@github-actions

Copy link
Copy Markdown

🤖 GPT PR Review

결론: request-changes

요약: 파싱 실패

주요 지적

지적 없음

@haeun9634 haeun9634 merged commit 18ec96c into dev Apr 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants