πŸ“Š Java-Service-Tree-Framework-AI ν”„λ‘œμ νŠΈ 뢄석 리포트 1. ν”„λ‘œμ νŠΈ κ°œμš” 1.1 κΈ°λ³Έ 정보 ν”„λ‘œμ νŠΈλͺ…: Java-Service-Tree-Framework-AI κ·Έλ£Ή ID: 313devgrp 버전: 25.11.x (μžλ™ 증가) Java 버전: Java 21 Spring Boot: 3.4.4 λΉŒλ“œ 도ꡬ: Gradle 8.13 1.2 ν”„λ‘œμ νŠΈ λͺ©μ  Spring AI ν”„λ ˆμž„μ›Œν¬ 기반의 AI 톡합 μ„œλΉ„μŠ€λ‘œ, RAG(Retrieval-Augmented Generation) νŒ¨ν„΄μ„ ν™œμš©ν•œ λ¬Έμ„œ 기반 Q&A μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. 2. 기술 μŠ€νƒ 2.1 핡심 ν”„λ ˆμž„μ›Œν¬ - Spring Boot 3.4.4 (WebFlux - λ°˜μ‘ν˜•) - Spring AI 1.0.0-M6/M8 - Spring Cloud Config - Spring Actuator 2.2 AI/ML 라이브러리 βœ… Spring AI Ollama (둜컬 LLM) βœ… Vector Store (OpenSearch) βœ… Document Readers: - PDF (Apache PDFBox 기반) - Tika (λ‹€μ–‘ν•œ λ¬Έμ„œ ν˜•μ‹) - Markdown βœ… RAG Advisors (검색 증강 생성) 2.3 인프라 - Docker (μ»¨ν…Œμ΄λ„ˆν™”) - Nexus (Maven Repository) - Config Server (쀑앙 μ„€μ • 관리) 3. μ•„ν‚€ν…μ²˜ 뢄석 3.1 계측 ꡬ쑰 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API Layer (REST) β”‚ β”‚ - SampleController β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Service Layer β”‚ β”‚ - MyPagePdfDocumentReader β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ AI Integration Layer β”‚ β”‚ - ChatModel (Ollama) β”‚ β”‚ - VectorStore (OpenSearch) β”‚ β”‚ - Advisors (Logging, SafeGuard) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 3.2 μ£Όμš” μ»΄ν¬λ„ŒνŠΈ 3.2.1 SampleController javaμ—­ν• : AI μ±„νŒ… 및 λ¬Έμ„œ 처리 API 제곡 μ£Όμš” μ—”λ“œν¬μΈνŠΈ: - GET /ai/generateStream : 슀트리밍 μ±„νŒ… - GET /ai/test : 벑터 μœ μ‚¬λ„ 검색 - GET /ai/my-page-pdf-document-reader : PDF λ¬Έμ„œ λ‘œλ“œ - GET /ai/stopStream : 슀트림 쀑단 3.2.2 MyPagePdfDocumentReader javaμ—­ν• : λ‹€μ–‘ν•œ λ¬Έμ„œ ν˜•μ‹μ„ 읽어 Vector Store에 μ €μž₯ 지원 ν˜•μ‹: βœ… PDF (Tika, PagePdf, ParagraphPdf) βœ… Markdown 처리 흐름: 1. λ¬Έμ„œ 읽기 (DocumentReader) 2. 토큰 λΆ„ν•  (TokenTextSplitter) 3. 벑터 μ €μž₯ (VectorStore.write) 3.2.3 SimpleLogAdvisor javaμ—­ν• : μš”μ²­/응닡 λ‘œκΉ… κΈ°λŠ₯: - before(): μš”μ²­ μ „ λ‘œκΉ… - after(): 응닡 ν›„ λ‘œκΉ… - Order: 0 (μ΅œμš°μ„  μ‹€ν–‰) 3.2.4 SafeGuardAdvisor ⭐ javaμ—­ν• : κ°•λ ₯ν•œ λ³΄μ•ˆ 필터링 μ‹œμŠ€ν…œ μ£Όμš” κΈ°λŠ₯: 1. ν”„λ‘¬ν”„νŠΈ μΈμ μ…˜ λ°©μ–΄ 2. SQL Injection / XSS 탐지 3. 민감 정보 λ§ˆμŠ€ν‚Ή (이메일, μ „ν™”λ²ˆν˜Έ, 주민번호 λ“±) 4. μ‹€μ‹œκ°„ 슀트림 필터링 5. 심각도별 처리 (CRITICAL/HIGH/MEDIUM/LOW) 검증 ν•­λͺ©: - ν”„λ‘¬ν”„νŠΈ μΈμ μ…˜ - μ—­ν•  μ‘°μž‘ (Role Manipulation) - SQL Injection - XSS (Cross-Site Scripting) - 경둜 탐색 (Path Traversal) - λͺ…λ Ήμ–΄ μ‚½μž… (Command Injection) - JWT 토큰/μ‹ μš©μΉ΄λ“œ/주민번호 λ…ΈμΆœ ``` --- ## 4. RAG κ΅¬ν˜„ 뢄석 ### 4.1 RAG νŒŒμ΄ν”„λΌμΈ ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 1. λ¬Έμ„œ λ‘œλ“œ β”‚ ← PDF/Markdown 읽기 β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ 2. μ²­ν‚Ή β”‚ ← TokenTextSplitter β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ 3. μž„λ² λ”© β”‚ ← Vector Store μ €μž₯ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ 4. 검색 β”‚ ← μœ μ‚¬λ„ 검색 (threshold: 0.5) β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ 5. 증강 β”‚ ← Context + Query κ²°ν•© β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β” β”‚ 6. 생성 β”‚ ← LLM 응닡 생성 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 4.2 ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ ``` Context information is below. --------------------- {context} --------------------- Given the context information and no prior knowledge, answer the query. Rules: - μ£Όμ–΄μ§„ 정보λ₯Ό λ°”νƒ•μœΌλ‘œ λ‹΅λ³€ - κ·Έλ¦Ό/ν‘œ μ œμ™Έ - λ¬Έμž₯ 끝 κ°œν–‰ - λ‹΅λ³€ μ—†μœΌλ©΄ ν•œκ΅­μ–΄λ‘œ "λ‹΅λ³€ν•  수 μ—†μŠ΅λ‹ˆλ‹€" 응닡 Query: {query} Answer: 5. 배포 ꡬ쑰 5.1 Docker 이미지 λΉŒλ“œ gradle이미지λͺ…: 313.co.kr:5550/313devgrp/java-service-tree-framework-ai:25.11.x 베이슀 이미지: eclipse-temurin:21-jdk-jammy λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€: 1. bootJar 생성 2. Docker μ»¨ν…μŠ€νŠΈ μ€€λΉ„ (jar + entrypoint) 3. Docker 이미지 λΉŒλ“œ 4. Private Registry ν‘Έμ‹œ (313.co.kr:5550) 5.2 버전 관리 gradleμžλ™ 버전 증가: - majorVersion: 25 (μˆ˜λ™) - minorVersion: 11 (μˆ˜λ™) - patchVersion: Nexusμ—μ„œ μžλ™ 계산 (latest + 1) μ˜ˆμ‹œ: 25.11.0 β†’ 25.11.1 β†’ 25.11.2 ``` --- ## 6. λ³΄μ•ˆ 뢄석 (SafeGuardAdvisor) ### 6.1 λ³΄μ•ˆ λ“±κΈ‰ | λ“±κΈ‰ | μ„€λͺ… | 처리 | |------|------|------| | **CRITICAL** | ν”„λ‘¬ν”„νŠΈ μΈμ μ…˜, λͺ…λ Ήμ–΄ μ‚½μž… | 전체 차단 | | **HIGH** | SQL Injection, XSS | λΆ€λΆ„ 필터링 | | **MEDIUM** | SQL 주석, μ˜μ‹¬ ν‚€μ›Œλ“œ | λΆ€λΆ„ 필터링 | | **LOW** | κ²½λ―Έν•œ μœ„λ°˜ | 경고만 | ### 6.2 보호 κΈ°λŠ₯ ``` βœ… μš”μ²­ 검증 (before) - ν”„λ‘¬ν”„νŠΈ μΈμ μ…˜ 차단 - SQL Injection 탐지 - XSS νŒ¨ν„΄ 필터링 βœ… 응닡 필터링 (after) - 민감 정보 λ§ˆμŠ€ν‚Ή - μ•ˆμ „μ„± 점수 계산 βœ… 슀트림 λ³΄μ•ˆ (aroundStream) - μ‹€μ‹œκ°„ 청크 검증 - μœ„ν—˜ 청크 [BLOCKED] 6.3 톡계 μˆ˜μ§‘ javaSafeGuardStats { μ΄μš”μ²­: 1000 차단: 50 필터링: 30 μ°¨λ‹¨μœ¨: 5.0% μœ„λ°˜ν†΅κ³„: {PROMPT_INJECTION: 20, XSS: 15, ...} } 7. API λͺ…μ„Έ 7.1 슀트리밍 μ±„νŒ… httpGET /ai/generateStream?message={질문}&streamId={ID} Parameters: - message: μ‚¬μš©μž 질문 - streamId: 슀트림 μ‹λ³„μž Response: text/event-stream - μ‹€μ‹œκ°„ ν…μŠ€νŠΈ 슀트림 - SafeGuard 필터링 적용 - 쀑단 κ°€λŠ₯ (stopStream API) 7.2 λ¬Έμ„œ λ‘œλ“œ httpGET /ai/my-page-pdf-document-reader Response: List - PDF λ¬Έμ„œλ₯Ό 읽어 Vector Store에 μ €μž₯ - PMBOK 4th Edition (ν•œκΈ€νŒ) μ˜ˆμ‹œ 7.3 벑터 검색 httpGET /ai/test?message={검색어} Response: List - μœ μ‚¬λ„ 기반 λ¬Έμ„œ 검색 - OpenSearch Vector Store ν™œμš© 8. μ„€μ • 관리 8.1 Config Server 연동 yamlspring: cloud: config: uri: http://www.313.co.kr:33133 # Config Server watch: enabled: true initialDelay: 5000 delay: 5000 ``` ### 8.2 ν”„λ‘œνŒŒμΌ ``` - application.yml (κΈ°λ³Έ) - application-dev.yml (개발) - application-stg.yml (μŠ€ν…Œμ΄μ§•) - application-live.yml (운영) ``` --- ## 9. 강점 및 νŠΉμ§• ### βœ… 강점 1. **κ°•λ ₯ν•œ λ³΄μ•ˆ**: SafeGuardAdvisor의 λ‹€μΈ΅ λ³΄μ•ˆ 필터링 2. **RAG κ΅¬ν˜„**: λ¬Έμ„œ 기반 μ •ν™•ν•œ λ‹΅λ³€ 생성 3. **λ°˜μ‘ν˜• μ•„ν‚€ν…μ²˜**: WebFlux 기반 비동기 처리 4. **슀트리밍 지원**: μ‹€μ‹œκ°„ 응닡 슀트리밍 5. **λ‹€μ–‘ν•œ λ¬Έμ„œ ν˜•μ‹**: PDF, Markdown, Tika 6. **μžλ™ν™”λœ 배포**: Docker + Nexus + μžλ™ 버전 관리 ### πŸ“Œ νŠΉμ§• 1. **Advisor νŒ¨ν„΄**: λ‘œκΉ…, λ³΄μ•ˆ, RAGλ₯Ό Advisor둜 λͺ¨λ“ˆν™” 2. **민감정보 보호**: μžλ™ λ§ˆμŠ€ν‚Ή (이메일, μ „ν™”, μΉ΄λ“œλ²ˆν˜Έ λ“±) 3. **μœ μ—°ν•œ μ„€μ •**: Config Server 기반 쀑앙 관리 4. **톡계 μˆ˜μ§‘**: λ³΄μ•ˆ μœ„ν˜‘ 톡계 μ‹€μ‹œκ°„ 좔적 --- ## 10. κ°œμ„  μ œμ•ˆ ### πŸ”§ 기술적 κ°œμ„  1. **ν…ŒμŠ€νŠΈ μ½”λ“œ λΆ€μž¬** ``` μΆ”μ²œ: Spring AI Test, WebTestClient 기반 톡합 ν…ŒμŠ€νŠΈ ``` 2. **README λ¬Έμ„œ μ—†μŒ** ``` μΆ”μ²œ: μ„€μΉ˜/μ‹€ν–‰/API κ°€μ΄λ“œ μž‘μ„± ``` 3. **μ—λŸ¬ 핸듀링** ``` μΆ”μ²œ: @ControllerAdvice 기반 κΈ€λ‘œλ²Œ μ˜ˆμ™Έ 처리 ``` 4. **λͺ¨λ‹ˆν„°λ§** ``` μΆ”μ²œ: Prometheus + Grafana λ©”νŠΈλ¦­ μˆ˜μ§‘ ``` ### πŸ“š κΈ°λŠ₯적 κ°œμ„  1. **λ‹€κ΅­μ–΄ 지원** ``` ν˜„μž¬: ν•œκ΅­μ–΄ ν”„λ‘¬ν”„νŠΈ κ³ μ • κ°œμ„ : λ‹€κ΅­μ–΄ ν…œν”Œλ¦Ώ 지원 ``` 2. **벑터 DB 선택** ``` ν˜„μž¬: OpenSearch κ³ μ • κ°œμ„ : Chroma, Pinecone λ“± 선택 κ°€λŠ₯ ``` 3. **λ¬Έμ„œ μ—…λ°μ΄νŠΈ** ``` ν˜„μž¬: μˆ˜λ™ λ‘œλ“œ κ°œμ„ : μžλ™ 동기화 μŠ€μΌ€μ€„λŸ¬ 11. κ²°λ‘  μ’…ν•© 평가 이 ν”„λ‘œμ νŠΈλŠ” Spring AI 기반의 μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ RAG μ‹œμŠ€ν…œμœΌλ‘œ, 특히 SafeGuardAdvisor의 λ³΄μ•ˆ κΈ°λŠ₯이 맀우 μΈμƒμ μž…λ‹ˆλ‹€. 핡심 κ°€μΉ˜: βœ… ν”„λ‘œλ•μ…˜ 레벨의 λ³΄μ•ˆ 필터링 βœ… λ¬Έμ„œ 기반 μ •ν™•ν•œ AI 응닡 βœ… 슀트리밍 + λ°˜μ‘ν˜• μ•„ν‚€ν…μ²˜ βœ… λͺ¨λ“ˆν™”λœ Advisor νŒ¨ν„΄ μ ν•©ν•œ μ‚¬μš© 사둀: 사내 λ¬Έμ„œ Q&A μ‹œμŠ€ν…œ 고객 지원 챗봇 (RAG 기반) κ·œμ œκ°€ μžˆλŠ” μ‚°μ—…μ˜ AI μ„œλΉ„μŠ€ (금육, 의료 λ“±) λ‹€μŒ 단계 ꢌμž₯: ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± (컀버리지 80% 이상) API λ¬Έμ„œν™” (Swagger/OpenAPI) λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ ꡬ좕 μ„±λŠ₯ 벀치마크 (응닡 μ‹œκ°„, μ²˜λ¦¬λŸ‰)