<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DEV.DY</title>
    <link>https://dytis.tistory.com/</link>
    <description>인공지능의 서비스화와 현실화에 관심이 많은 엔지니어입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 1 Aug 2026 06:06:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>pfldy2850</managingEditor>
    <image>
      <title>DEV.DY</title>
      <url>https://tistory1.daumcdn.net/tistory/2307979/attach/1fde71af2b0f43cd9ef7c5fff0b63028</url>
      <link>https://dytis.tistory.com</link>
    </image>
    <item>
      <title>오픈소스 릴리즈 요약 (26.01.18~26.01.25)</title>
      <link>https://dytis.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기간&lt;/b&gt;: 2026년 1월 18일 ~ 2026년 1월 25일&lt;br /&gt;&lt;b&gt;작성일&lt;/b&gt;: 2026년 1월 25일&lt;br /&gt;&lt;b&gt;대상 독자&lt;/b&gt;: ML/AI 개발자&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 리포트는 추적 중인 주요 오픈소스 프로젝트들의 2026년 1월 18일부터 1월 25일까지의 릴리즈 변경사항을 기술적 관점에서 요약합니다. 총 &lt;b&gt;62개의 릴리즈&lt;/b&gt;가 이 기간 동안 발행되었으며, 각 저장소 그룹별로 주요 업데이트와 기술적 개선사항을 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 하이라이트&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama v0.15.0&lt;/b&gt;: 새로운 &lt;code&gt;ollama launch&lt;/code&gt; 명령어 추가로 Claude Code, Codex, OpenCode, Droid 통합 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl v0.27.1&lt;/b&gt;: v0.27.0의 버그 수정 및 vLLM 호환성 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;llama.cpp&lt;/b&gt;: 매우 활발한 개발 (48개 릴리즈), 지속적인 성능 최적화 및 버그 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vllm-project/vllm v0.14.1&lt;/b&gt;: 보안 및 메모리 누수 수정 패치 릴리즈&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LangChain 1.2.7&lt;/b&gt;: 동적 도구 등록 및 미들웨어 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LlamaIndex v0.14.13&lt;/b&gt;: Ray 기반 분산 데이터 수집 파이프라인 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MTEB 2.7.3~2.7.9&lt;/b&gt;: 지속적인 버그 수정 및 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Milvus v2.5.26&lt;/b&gt;: 새로운 패치 릴리즈&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;저장소 그룹별 요약&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. LLM Frameworks&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;langchain-ai/langchain&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: langchain==1.2.7 (2026-01-23)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동적 도구 등록을 위한 미들웨어 지원 추가&lt;/li&gt;
&lt;li&gt;요약 프롬프트 개선 (trailing whitespace 제거, 문법 개선)&lt;/li&gt;
&lt;li&gt;버전 일관성 검사 pre-commit 훅 추가&lt;/li&gt;
&lt;li&gt;의존성 업데이트 (uv 그룹)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;동적 도구 등록&lt;/b&gt;: 미들웨어를 통한 런타임 도구 등록 기능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SummarizationMiddleware 개선&lt;/b&gt;: 시스템 프롬프트 문법 개선 및 trailing whitespace 제거&lt;/li&gt;
&lt;li&gt;&lt;b&gt;버전 관리&lt;/b&gt;: langchain-core와 langchain 간 버전 일관성 검사 자동화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존성 관리&lt;/b&gt;: uv를 사용한 의존성 그룹 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;run-llama/llama_index&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v0.14.13 (2026-01-21)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ray 기반 분산 데이터 수집 파이프라인 통합&lt;/li&gt;
&lt;li&gt;Agent 워크플로우에 early_stopping_method 파라미터 추가&lt;/li&gt;
&lt;li&gt;CodeSplitter에 토큰 기반 코드 분할 지원 추가&lt;/li&gt;
&lt;li&gt;다중 모달 Condensed Conversation &amp;amp; Context 추가&lt;/li&gt;
&lt;li&gt;ChatMemoryBuffer를 Memory로 교체&lt;/li&gt;
&lt;li&gt;다양한 벡터 스토어 통합 개선 (Milvus, Qdrant, Vertex AI 등)&lt;/li&gt;
&lt;li&gt;새로운 LLM 통합 추가 (Apertis)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;RayIngestionPipeline&lt;/b&gt;: 분산 데이터 수집을 위한 Ray 통합&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Early Stopping&lt;/b&gt;: Agent 워크플로우에서 조기 종료 메서드 설정 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;토큰 기반 코드 분할&lt;/b&gt;: CodeSplitter에서 토큰 단위 분할 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 모달 지원&lt;/b&gt;: Condensed Conversation &amp;amp; Context의 다중 모달 버전&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리 관리&lt;/b&gt;: ChatMemoryBuffer를 더 범용적인 Memory 인터페이스로 교체&lt;/li&gt;
&lt;li&gt;&lt;b&gt;벡터 스토어 개선&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Milvus: 파티션 이름 지원&lt;/li&gt;
&lt;li&gt;Qdrant: 검색 파라미터 지원&lt;/li&gt;
&lt;li&gt;Vertex AI: 하이브리드 검색 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 통합&lt;/b&gt;: Apertis LLM, HuggingFace datasets reader, Parallel Web System tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Models &amp;amp; Training&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/trl&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v0.27.1 (2026-01-24)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v0.27.0의 버그 수정 및 안정성 개선&lt;/li&gt;
&lt;li&gt;vLLM 서빙 모드에서 logprob drift 문제 수정&lt;/li&gt;
&lt;li&gt;DeepSeek OPSM에서 vLLM logprobs 전달 수정&lt;/li&gt;
&lt;li&gt;SFT 학습에서 prompt-completion 타입 및 Transformers v5 호환성 수정&lt;/li&gt;
&lt;li&gt;RewardTrainer의 재현성 문제 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Logprob 정확도&lt;/b&gt;: vLLM 서빙 모드와 colocate 모드 간 logprob drift 문제 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DeepSeek 지원&lt;/b&gt;: DeepSeek OPSM에서 vLLM logprobs 올바르게 전달&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transformers v5 호환성&lt;/b&gt;: SFT 학습에서 Transformers v5와의 호환성 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;재현성&lt;/b&gt;: RewardTrainer에서 결과 재현성 보장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gradient Accumulation&lt;/b&gt;: undefined &lt;code&gt;current_gradient_accumulation_steps&lt;/code&gt; 문제 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Inference &amp;amp; Serving&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ollama/ollama&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 2개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v0.15.0 (2026-01-21) - &lt;b&gt;메이저 업그레이드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;v0.15.1 (2026-01-24) - 패치 릴리즈&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 &lt;code&gt;ollama launch&lt;/code&gt; 명령어&lt;/b&gt;: Claude Code, Codex, OpenCode, Droid와의 통합 지원&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ollama run&lt;/code&gt;에서 다중 라인 문자열 (&lt;code&gt;&quot;&quot;&quot;&lt;/code&gt;) 지원 개선&lt;/li&gt;
&lt;li&gt;키보드 단축키 개선: Ctrl+J 및 Shift+Enter로 새 줄 입력 지원&lt;/li&gt;
&lt;li&gt;GLM-4.7-Flash 모델의 메모리 사용량 감소&lt;/li&gt;
&lt;li&gt;CGO 플래그에 -O3 최적화 추가 (v0.15.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ollama launch&lt;/b&gt;: 외부 도구와의 통합을 위한 새로운 명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Claude Code, Codex, OpenCode, Droid와 별도 설정 없이 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 라인 입력&lt;/b&gt;: &lt;code&gt;&quot;&quot;&quot;&lt;/code&gt;를 사용한 다중 라인 문자열 생성 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키보드 단축키&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ctrl+J: 새 줄 삽입&lt;/li&gt;
&lt;li&gt;Shift+Enter: 새 줄 삽입&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리 최적화&lt;/b&gt;: GLM-4.7-Flash 모델의 메모리 사용량 감소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컴파일 최적화&lt;/b&gt;: CGO 플래그에 -O3 최적화 레벨 추가로 성능 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ggerganov/llama.cpp&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 48개 (매우 활발한 개발)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: b7765 ~ b7825 (2026-01-18 ~ 2026-01-24)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지속적인 성능 최적화 및 버그 수정&lt;/li&gt;
&lt;li&gt;Jinja 템플릿 엔진 개선 (none|string 지원)&lt;/li&gt;
&lt;li&gt;파일 I/O 개선 (fallback 확장, fileno 수정, mmap dio 파일 처리)&lt;/li&gt;
&lt;li&gt;llama-fit-params 개선 (--ctx-size 0 명시적 유지)&lt;/li&gt;
&lt;li&gt;다양한 플랫폼 바이너리 제공 지속&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Jinja 템플릿&lt;/b&gt;: none|string 타입 지원 추가, as_string() 메서드 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파일 I/O&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Fallback 메커니즘 확장&lt;/li&gt;
&lt;li&gt;fileno 처리 개선&lt;/li&gt;
&lt;li&gt;mmap에서 dio 파일 사용 케이스 제외&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파라미터 피팅&lt;/b&gt;: llama-fit-params에서 --ctx-size 0 명시적 유지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;플랫폼 지원&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;macOS (Apple Silicon, Intel), iOS&lt;/li&gt;
&lt;li&gt;Linux (Ubuntu x64, s390x)&lt;/li&gt;
&lt;li&gt;Windows (x64, arm64, CUDA 12/13, Vulkan, SYCL, HIP)&lt;/li&gt;
&lt;li&gt;openEuler (x86, aarch64, 310p, 910b, ACL Graph)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;vllm-project/vllm&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v0.14.1 (2026-01-24)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안 및 메모리 누수 수정 패치 릴리즈&lt;/li&gt;
&lt;li&gt;v0.14.0 기반 안정성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;보안 패치&lt;/b&gt;: 보안 취약점 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리 누수&lt;/b&gt;: 메모리 누수 문제 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;안정성&lt;/b&gt;: v0.14.0의 안정성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Distributed Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기간 동안 새로운 릴리즈가 없었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. Vector Search &amp;amp; Embeddings&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;embeddings-benchmark/mteb&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 7개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2.7.3 (2026-01-19)&lt;/li&gt;
&lt;li&gt;2.7.4 (2026-01-19)&lt;/li&gt;
&lt;li&gt;2.7.5 (2026-01-19)&lt;/li&gt;
&lt;li&gt;2.7.6 (2026-01-20)&lt;/li&gt;
&lt;li&gt;2.7.7 (2026-01-20)&lt;/li&gt;
&lt;li&gt;2.7.8 (2026-01-20)&lt;/li&gt;
&lt;li&gt;2.7.9 (2026-01-24)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지속적인 버그 수정 및 개선&lt;/li&gt;
&lt;li&gt;집계 작업 저장 문제 수정 (2.7.6)&lt;/li&gt;
&lt;li&gt;PubChem 데이터 로드에 kwargs 추가 (2.7.9)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 저장&lt;/b&gt;: 집계 작업 저장 로직 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 로딩&lt;/b&gt;: PubChem 데이터 로드 함수에 kwargs 파라미터 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;안정성&lt;/b&gt;: 지속적인 버그 수정 및 안정성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;milvus-io/milvus&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v2.5.26 (2026-01-23)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 패치 릴리즈 (릴리즈 노트 준비 중)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;릴리즈 노트가 곧 제공될 예정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상세 릴리즈 목록&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LLM Frameworks&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;langchain-ai/langchain&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.7&lt;/b&gt; (2026-01-23)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.7&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동적 도구 등록을 위한 미들웨어 지원&lt;/li&gt;
&lt;li&gt;요약 프롬프트 개선 (trailing whitespace 제거, 문법 개선)&lt;/li&gt;
&lt;li&gt;버전 일관성 검사 pre-commit 훅 추가&lt;/li&gt;
&lt;li&gt;의존성 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;run-llama/llama_index&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.13&lt;/b&gt; (2026-01-21)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/run-llama/llama_index/releases/tag/v0.14.13&quot;&gt;https://github.com/run-llama/llama_index/releases/tag/v0.14.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ray 기반 분산 데이터 수집 파이프라인 통합&lt;/li&gt;
&lt;li&gt;Agent 워크플로우 개선&lt;/li&gt;
&lt;li&gt;다양한 벡터 스토어 통합 개선&lt;/li&gt;
&lt;li&gt;새로운 LLM 통합 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Models &amp;amp; Training&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/trl&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.27.1&lt;/b&gt; (2026-01-24)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/trl/releases/tag/v0.27.1&quot;&gt;https://github.com/huggingface/trl/releases/tag/v0.27.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: qgallouedec&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vLLM 서빙 모드에서 logprob drift 문제 수정&lt;/li&gt;
&lt;li&gt;DeepSeek OPSM에서 vLLM logprobs 전달 수정&lt;/li&gt;
&lt;li&gt;SFT 학습에서 Transformers v5 호환성 수정&lt;/li&gt;
&lt;li&gt;RewardTrainer의 재현성 문제 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Inference &amp;amp; Serving&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ollama/ollama&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.15.0&lt;/b&gt; (2026-01-21)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.15.0&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.15.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 &lt;code&gt;ollama launch&lt;/code&gt; 명령어 추가&lt;/li&gt;
&lt;li&gt;다중 라인 문자열 지원 개선&lt;/li&gt;
&lt;li&gt;키보드 단축키 개선&lt;/li&gt;
&lt;li&gt;GLM-4.7-Flash 모델 메모리 사용량 감소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.15.1&lt;/b&gt; (2026-01-24)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.15.1&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.15.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CGO 플래그에 -O3 최적화 추가&lt;/li&gt;
&lt;li&gt;README 업데이트 (Ruby gem 정보)&lt;/li&gt;
&lt;li&gt;문서화 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ggerganov/llama.cpp&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 릴리즈&lt;/b&gt; (2026-01-18 ~ 2026-01-24, 총 48개)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7765&lt;/b&gt; (2026-01-18 01:30 UTC) - 기간 시작&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7765&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7765&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;지속적인 성능 최적화 및 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7772&lt;/b&gt; (2026-01-18 17:28 UTC)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7772&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7772&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Fallback 확장, fileno 수정, mmap dio 파일 처리 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7798&lt;/b&gt; (2026-01-22 01:40 UTC)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7798&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7798&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Jinja 템플릿 엔진에 none|string 지원 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7825&lt;/b&gt; (2026-01-24 22:03 UTC) - 기간 종료&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7825&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7825&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: llama-fit-params에서 --ctx-size 0 명시적 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;vllm-project/vllm&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.1&lt;/b&gt; (2026-01-24)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/vllm-project/vllm/releases/tag/v0.14.1&quot;&gt;https://github.com/vllm-project/vllm/releases/tag/v0.14.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: khluu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보안 및 메모리 누수 수정 패치 릴리즈&lt;/li&gt;
&lt;li&gt;v0.14.0 기반 안정성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vector Search &amp;amp; Embeddings&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;embeddings-benchmark/mteb&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.7.3 ~ 2.7.9&lt;/b&gt; (2026-01-19 ~ 2026-01-24)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지속적인 버그 수정 및 개선&lt;/li&gt;
&lt;li&gt;집계 작업 저장 문제 수정 (2.7.6)&lt;/li&gt;
&lt;li&gt;PubChem 데이터 로드 개선 (2.7.9)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;milvus-io/milvus&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v2.5.26&lt;/b&gt; (2026-01-23)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/milvus-io/milvus/releases/tag/v2.5.26&quot;&gt;https://github.com/milvus-io/milvus/releases/tag/v2.5.26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: yanliang567&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: 릴리즈 노트 준비 중&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 기술 트렌드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 기간 동안 관찰된 주요 기술 트렌드:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;도구 통합 및 확장성&lt;/b&gt;: Ollama의 &lt;code&gt;ollama launch&lt;/code&gt; 명령어로 외부 도구와의 통합 용이성 향상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분산 처리 강화&lt;/b&gt;: LlamaIndex의 Ray 기반 분산 데이터 수집 파이프라인 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동적 기능 확장&lt;/b&gt;: LangChain의 미들웨어를 통한 동적 도구 등록 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 최적화 지속&lt;/b&gt;: llama.cpp의 지속적인 성능 최적화 및 버그 수정 (48개 릴리즈)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리 효율성&lt;/b&gt;: Ollama의 GLM-4.7-Flash 모델 메모리 사용량 감소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;템플릿 엔진 개선&lt;/b&gt;: llama.cpp의 Jinja 템플릿 엔진에 타입 지원 확대&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 및 안정성&lt;/b&gt;: vLLM의 보안 패치 및 메모리 누수 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;재현성 보장&lt;/b&gt;: TRL의 RewardTrainer 재현성 문제 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;벡터 스토어 통합 확대&lt;/b&gt;: LlamaIndex의 다양한 벡터 스토어 통합 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vLLM 호환성 개선&lt;/b&gt;: TRL의 vLLM 서빙 모드 logprob 정확도 개선&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;API 변경사항&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ollama/ollama v0.15.0&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 API&lt;/b&gt;: &lt;code&gt;ollama launch&lt;/code&gt; 명령어 추가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Claude Code, Codex, OpenCode, Droid와의 통합 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개선된 API&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;ollama run&lt;/code&gt;에서 다중 라인 문자열 (&lt;code&gt;&quot;&quot;&quot;&lt;/code&gt;) 지원 개선&lt;/li&gt;
&lt;li&gt;키보드 단축키: Ctrl+J 및 Shift+Enter로 새 줄 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: 기존 코드는 대부분 호환되며, 새로운 &lt;code&gt;ollama launch&lt;/code&gt; 기능 활용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;langchain-ai/langchain v1.2.7&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 기능&lt;/b&gt;: 미들웨어를 통한 동적 도구 등록&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개선된 기능&lt;/b&gt;: SummarizationMiddleware의 프롬프트 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: 기존 코드는 호환되며, 새로운 미들웨어 기능은 선택적 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;run-llama/llama_index v0.14.13&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 통합&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RayIngestionPipeline: 분산 데이터 수집&lt;/li&gt;
&lt;li&gt;Apertis LLM 통합&lt;/li&gt;
&lt;li&gt;HuggingFace datasets reader&lt;/li&gt;
&lt;li&gt;Parallel Web System tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개선된 기능&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Agent 워크플로우에 early_stopping_method 파라미터 추가&lt;/li&gt;
&lt;li&gt;CodeSplitter에 토큰 기반 분할 지원&lt;/li&gt;
&lt;li&gt;ChatMemoryBuffer를 Memory로 교체&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: ChatMemoryBuffer 사용자는 Memory 인터페이스로 마이그레이션 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/trl v0.27.1&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;버그 수정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vLLM 서빙 모드에서 logprob drift 문제 해결&lt;/li&gt;
&lt;li&gt;DeepSeek OPSM에서 logprobs 전달 수정&lt;/li&gt;
&lt;li&gt;SFT 학습에서 Transformers v5 호환성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: v0.27.0 사용자는 업그레이드 권장 (버그 수정 포함)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;성능 개선&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ollama/ollama v0.15.0&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: 메모리 사용량, 컴파일 최적화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GLM-4.7-Flash 모델의 메모리 사용량 감소&lt;/li&gt;
&lt;li&gt;CGO 플래그에 -O3 최적화 추가 (v0.15.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ggerganov/llama.cpp&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: 파일 I/O, 템플릿 엔진, 파라미터 피팅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Fallback 메커니즘 확장으로 I/O 안정성 향상&lt;/li&gt;
&lt;li&gt;Jinja 템플릿 엔진 개선으로 템플릿 처리 효율성 향상&lt;/li&gt;
&lt;li&gt;지속적인 성능 최적화 (48개 릴리즈)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/trl v0.27.1&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: Logprob 정확도, 재현성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vLLM 서빙 모드에서 logprob drift 문제 해결로 정확도 향상&lt;/li&gt;
&lt;li&gt;RewardTrainer의 재현성 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;새로운 모델/알고리즘&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ollama/ollama v0.15.0&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 기능&lt;/b&gt;: &lt;code&gt;ollama launch&lt;/code&gt; 명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Claude Code, Codex, OpenCode, Droid와의 통합 지원&lt;/li&gt;
&lt;li&gt;별도 설정 없이 외부 도구와 함께 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;run-llama/llama_index v0.14.13&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 통합&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Apertis LLM&lt;/b&gt;: 새로운 LLM 통합 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RayIngestionPipeline&lt;/b&gt;: 분산 데이터 수집 파이프라인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HuggingFace datasets reader&lt;/b&gt;: HuggingFace 데이터셋 읽기 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Parallel Web System tools&lt;/b&gt;: 병렬 웹 시스템 도구&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;보안 업데이트&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;vllm-project/vllm v0.14.1&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;보안 패치&lt;/b&gt;: 보안 취약점 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;영향도&lt;/b&gt;: 보안 패치이므로 즉시 업그레이드 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;통계 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;총 릴리즈 수&lt;/b&gt;: 62개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장소 그룹 수&lt;/b&gt;: 5개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활발한 저장소&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ggerganov/llama.cpp&lt;/b&gt;: 48개 (가장 활발, 일일 다중 릴리즈)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;embeddings-benchmark/mteb&lt;/b&gt;: 7개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama&lt;/b&gt;: 2개 (v0.15.0 메이저 업그레이드 포함)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;langchain-ai/langchain&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;run-llama/llama_index&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vllm-project/vllm&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;milvus-io/milvus&lt;/b&gt;: 1개&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전 업그레이드&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama&lt;/b&gt;: v0.14.3 &amp;rarr; v0.15.0 (메이저)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;embeddings-benchmark/mteb&lt;/b&gt;: 2.7.2 &amp;rarr; 2.7.9&lt;/li&gt;
&lt;li&gt;&lt;b&gt;langchain-ai/langchain&lt;/b&gt;: 1.2.6 &amp;rarr; 1.2.7&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl&lt;/b&gt;: v0.27.0 &amp;rarr; v0.27.1&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vllm-project/vllm&lt;/b&gt;: v0.14.0 &amp;rarr; v0.14.1&lt;/li&gt;
&lt;li&gt;&lt;b&gt;milvus-io/milvus&lt;/b&gt;: v2.5.25 &amp;rarr; v2.5.26&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;다음 단계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 기간의 변경사항을 바탕으로 권장되는 다음 단계:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Ollama v0.15.0 업그레이드&lt;/b&gt;: 새로운 &lt;code&gt;ollama launch&lt;/code&gt; 기능으로 외부 도구 통합 활용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vLLM v0.14.1 업데이트&lt;/b&gt;: 보안 패치 및 메모리 누수 수정 적용 (즉시 권장)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TRL v0.27.1 업데이트&lt;/b&gt;: vLLM 호환성 개선 및 재현성 문제 수정 적용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LangChain 1.2.7 업데이트&lt;/b&gt;: 동적 도구 등록 기능 및 요약 프롬프트 개선 활용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LlamaIndex v0.14.13 업데이트&lt;/b&gt;: Ray 기반 분산 데이터 수집 파이프라인 활용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;llama.cpp 최신 버전 모니터링&lt;/b&gt;: 매우 활발한 개발이므로 정기적 업데이트 권장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MTEB 2.7.9 업데이트&lt;/b&gt;: 최신 버그 수정 및 개선사항 적용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ollama launch 기능 실험&lt;/b&gt;: Claude Code, Codex 등 외부 도구와의 통합 테스트&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 자료&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../releases/&quot;&gt;전체 릴리즈 목록&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../releases/*/_metadata.json&quot;&gt;메타데이터&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI/오픈소스 릴리즈 노트</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/120</guid>
      <comments>https://dytis.tistory.com/120#entry120comment</comments>
      <pubDate>Sun, 25 Jan 2026 13:26:16 +0900</pubDate>
    </item>
    <item>
      <title>OSS 릴리즈 요약</title>
      <link>https://dytis.tistory.com/119</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기간&lt;/b&gt;: 2026년 1월 1일 ~ 2026년 1월 18일&lt;br /&gt;&lt;b&gt;작성일&lt;/b&gt;: 2026년 1월 18일&lt;br /&gt;&lt;b&gt;대상 독자&lt;/b&gt;: ML/AI 개발자&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 리포트는 추적 중인 주요 오픈소스 프로젝트들의 2026년 1월 1일부터 1월 18일까지의 릴리즈 변경사항을 기술적 관점에서 요약합니다. 총 &lt;b&gt;169개의 릴리즈&lt;/b&gt;가 이 기간 동안 발행되었으며, 각 저장소 그룹별로 주요 업데이트와 기술적 개선사항을 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 하이라이트&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;huggingface/transformers v5.0.0rc2&lt;/b&gt;: 메이저 버전 5.0의 첫 번째 릴리즈 후보&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl v0.27.0&lt;/b&gt;: 메이저 업그레이드로 VRAM 최적화 및 비동기 처리 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama v0.14.0~v0.14.2&lt;/b&gt;: 이미지 생성 모델 실험적 지원 및 TranslateGemma 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;llama.cpp&lt;/b&gt;: 매우 활발한 개발 (139개 릴리즈), AMD GPU 최적화 및 Flash Attention 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Chroma 1.4.1&lt;/b&gt;: 다중 리전 지원 및 인덱싱 상태 추적 기능 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LangChain 1.2.x 시리즈&lt;/b&gt;: 지속적인 개선 및 타입 안정성 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;저장소 그룹별 요약&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. LLM Frameworks&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;langchain-ai/langchain&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 10개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;langchain-core 1.2.6, 1.2.7, 0.3.82, 0.3.83&lt;/li&gt;
&lt;li&gt;langchain 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LangChain 1.2.x 시리즈 지속적인 개선&lt;/li&gt;
&lt;li&gt;Agent 프레임워크 개선 및 타입 안정성 향상&lt;/li&gt;
&lt;li&gt;SummarizationMiddleware 시그니처 불일치 수정&lt;/li&gt;
&lt;li&gt;Agent 이름 메타데이터 추가&lt;/li&gt;
&lt;li&gt;모델 ID 사용법 명확화&lt;/li&gt;
&lt;li&gt;UUID7 기반 run ID 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;UUID7 도입&lt;/b&gt;: run ID에 UUID7 사용으로 시간 기반 정렬 및 고유성 보장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;타입 안정성&lt;/b&gt;: Mypy 규칙 강화 (warn_return_any, warn-unreachable 활성화)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메시지 태깅&lt;/b&gt;: 요약에서 생성된 메시지 자동 태깅 시스템&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메타데이터 관리&lt;/b&gt;: Agent 이름 메타데이터 자동 추가 및 스트리밍 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ruff 업그레이드&lt;/b&gt;: 버전 0.14.11로 업그레이드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;요약 프롬프트&lt;/b&gt;: 요약 프롬프트 업데이트 및 메타데이터 구성 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Models &amp;amp; Training&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/transformers&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 3개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v5.0.0rc2 (2026-01-08) - &lt;b&gt;메이저 버전 5.0 첫 릴리즈 후보&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;v4.57.4, v4.57.5, v4.57.6 (패치 릴리즈)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Transformers 5.0.0rc2&lt;/b&gt;: 메이저 버전 5.0의 첫 번째 릴리즈 후보&lt;/li&gt;
&lt;li&gt;v4 시리즈의 마지막 패치 릴리즈 (v4.57.4~v4.57.6)&lt;/li&gt;
&lt;li&gt;Qwen2VL 및 Qwen2.5VL 모델 타입 로딩 문제 수정&lt;/li&gt;
&lt;li&gt;Grouped beam search 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;v5.0.0rc2&lt;/b&gt;: 메이저 버전 업그레이드의 첫 번째 릴리즈 후보 (프로덕션 사용 전 테스트 권장)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Qwen VL 모델 수정&lt;/b&gt;: config 저장 후 재로딩 시 model_type이 올바르게 유지되도록 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Grouped beam search&lt;/b&gt;: config 파라미터에서 grouped beam search 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오프라인 모드&lt;/b&gt;: Mistral base 체크를 조건부로 변경하여 오프라인 로딩 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vLLM 호환성&lt;/b&gt;: vLLM 관련 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/peft&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v0.18.1 (2026-01-09)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transformers v5 릴리즈를 위한 호환성 개선&lt;/li&gt;
&lt;li&gt;AMD ROCm 지원 수정&lt;/li&gt;
&lt;li&gt;Transformers 버전 요구사항 회귀 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Transformers v5와의 호환성을 위한 특수 케이스 수정&lt;/li&gt;
&lt;li&gt;AMD ROCm 환경에서 PEFT 실행 가능하도록 수정&lt;/li&gt;
&lt;li&gt;Transformers &amp;gt;= 4.52 요구사항 회귀 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/trl&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 1개 (메이저 업그레이드)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: v0.27.0 (2026-01-16)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;성능 최적화&lt;/b&gt;: Forward pass 중 VRAM 사용량 최대 50% 감소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비동기 처리&lt;/b&gt;: 보상 함수의 비동기 지원 및 병렬화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vLLM 통합&lt;/b&gt;: vLLM 0.12.0 지원 및 vllm_group_port 인자 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 알고리즘&lt;/b&gt;: GDPO (Group reward-Decoupled Normalization Policy Optimization) 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DeepSeek 지원&lt;/b&gt;: DeepSeek V3.2 Off-policy 시퀀스 마스킹 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;VRAM 최적화&lt;/b&gt;: &lt;code&gt;forward_masked_logits&lt;/code&gt; 함수로 forward pass 중 VRAM 사용량 대폭 감소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비동기 보상 함수&lt;/b&gt;: RLOO 및 일반 보상 함수에서 비동기 지원 및 병렬 호출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BFD Packing&lt;/b&gt;: 잘린 토큰 보존 기능 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gradient Checkpointing&lt;/b&gt;: 기본값을 &lt;code&gt;use_reentrant=False&lt;/code&gt;로 변경 (PyTorch 권장사항)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 보상 최적화&lt;/b&gt;: GDPO를 통한 다중 보상 함수 동시 최적화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GRPO 개선&lt;/b&gt;: 도구 호출 반복 횟수 제한 설정 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실험적 기능 정리&lt;/b&gt;: 여러 유틸리티를 &lt;code&gt;experimental.utils&lt;/code&gt;로 이동하여 API 구조화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 GPU 지원&lt;/b&gt;: 다중 GPU 사용 시 데이터셋 스트리밍 및 dtype 초기화 문제 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transformers 5.0 호환성&lt;/b&gt;: Transformers 5.0.0+ 호환성 개선 및 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Inference &amp;amp; Serving&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ollama/ollama&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 4개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v0.14.0 (2026-01-10)&lt;/li&gt;
&lt;li&gt;v0.14.1 (2026-01-14)&lt;/li&gt;
&lt;li&gt;v0.14.2 (2026-01-16)&lt;/li&gt;
&lt;li&gt;v0.14.3-rc1 (2026-01-16)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실험적 이미지 생성 모델 지원 (macOS, Linux CUDA)&lt;/li&gt;
&lt;li&gt;TranslateGemma 모델 추가 (55개 언어 번역 지원)&lt;/li&gt;
&lt;li&gt;macOS 자동 업데이트 서명 검증 문제 수정&lt;/li&gt;
&lt;li&gt;CLI 개선 (Shift+Enter로 새 줄 입력)&lt;/li&gt;
&lt;li&gt;OpenResponses 스펙 준수 개선&lt;/li&gt;
&lt;li&gt;Anthropic API 호환성 (&lt;code&gt;/v1/messages&lt;/code&gt; API 지원)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이미지 생성 모델&lt;/b&gt;: Z-Image-Turbo 실험적 지원 (macOS, Linux CUDA), MLX 기반&lt;/li&gt;
&lt;li&gt;&lt;b&gt;번역 모델&lt;/b&gt;: Gemma 3 기반 TranslateGemma로 55개 언어 간 번역 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실험적 CLI&lt;/b&gt;: &lt;code&gt;ollama run --experimental&lt;/code&gt;로 agent loop 및 bash 도구 포함 CLI 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;API 개선&lt;/b&gt;: &lt;code&gt;/v1/responses&lt;/code&gt; 엔드포인트가 OpenResponses 스펙에 더 잘 부합&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Anthropic 호환성&lt;/b&gt;: &lt;code&gt;/v1/messages&lt;/code&gt; API 지원으로 Anthropic API와 호환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VRAM 측정&lt;/b&gt;: AMD iGPU에서 더 정확한 VRAM 측정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Modelfile&lt;/b&gt;: &lt;code&gt;REQUIRES&lt;/code&gt; 명령으로 필요한 Ollama 버전 선언 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ggerganov/llama.cpp&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 139개 (매우 활발한 개발)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;: b7598 ~ b7770 (2026-01-01 ~ 2026-01-18)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AMD GPU 최적화: Vulkan Matmul 파라미터 최적화, RDNA4용 fattn-mma-f16 추가&lt;/li&gt;
&lt;li&gt;Flash Attention 최적화 및 CPU 지원&lt;/li&gt;
&lt;li&gt;Jinja 템플릿 엔진 개선 (attribute 지원)&lt;/li&gt;
&lt;li&gt;다양한 플랫폼 바이너리 제공 확대&lt;/li&gt;
&lt;li&gt;지속적인 성능 개선 및 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;AMD GPU 최적화&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vulkan에서 AMD GPU (Coopmat 지원)를 위한 큰 matmul 파라미터 조합 최적화&lt;/li&gt;
&lt;li&gt;RDNA4 아키텍처를 위한 fattn-mma-f16 커널 추가&lt;/li&gt;
&lt;li&gt;HIP 백엔드 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Flash Attention&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VQ mma, flash_attn_ext_f16_iter, KQ_rowsum 최적화&lt;/li&gt;
&lt;li&gt;CPU 사이드 지원 활성화&lt;/li&gt;
&lt;li&gt;커널 선택 로직 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Jinja 템플릿&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;join, map, sort에 attribute 지원 추가&lt;/li&gt;
&lt;li&gt;음수 배열 인덱스 및 기본값 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;플랫폼 지원&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;macOS (Apple Silicon, Intel), iOS&lt;/li&gt;
&lt;li&gt;Linux (Ubuntu x64, s390x)&lt;/li&gt;
&lt;li&gt;Windows (x64, arm64)&lt;/li&gt;
&lt;li&gt;openEuler (x86, aarch64, 310p, 910b, ACL Graph)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;백엔드 지원&lt;/b&gt;: CUDA 12/13, Vulkan, SYCL, HIP&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DeepSeek 모델&lt;/b&gt;: DeepSeek-R1-Distill-Qwen-1.5B 기본 튜닝&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Distributed Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기간 동안 새로운 릴리즈가 없었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. Vector Search &amp;amp; Embeddings&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;chroma-core/chroma&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 2개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CLI 1.3.1 (2026-01-13)&lt;/li&gt;
&lt;li&gt;Chroma 1.4.1 (2026-01-14)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Google Cloud Spanner 통합 강화&lt;/li&gt;
&lt;li&gt;인덱싱 상태 추적 기능 추가 (Python, TypeScript, Rust 클라이언트)&lt;/li&gt;
&lt;li&gt;다중 리전/다중 클라우드 구성 지원&lt;/li&gt;
&lt;li&gt;Eventual consistency 지원 (Query 노드 및 프론트엔드)&lt;/li&gt;
&lt;li&gt;WAL3 (Write-Ahead Log) 복제 인터페이스 추가&lt;/li&gt;
&lt;li&gt;Rust 클라이언트 0.12 업그레이드&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Spanner 통합&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SysDB 및 마이그레이션 서비스가 실제 Spanner에 연결&lt;/li&gt;
&lt;li&gt;Spanner 마이그레이션을 Rust로 재구현&lt;/li&gt;
&lt;li&gt;Rolling hash를 사용한 마이그레이션 관리&lt;/li&gt;
&lt;li&gt;Rust SysDB에서 e2e tenant 및 데이터베이스 작업 지원&lt;/li&gt;
&lt;li&gt;Spanner collection 및 segments 스키마 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱싱 상태&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python, TypeScript, Rust 클라이언트에 인덱싱 상태 API 추가&lt;/li&gt;
&lt;li&gt;프론트엔드 로직 및 메터링 지원&lt;/li&gt;
&lt;li&gt;인덱싱 상태 추적을 위한 스키마 및 로직 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 리전 지원&lt;/b&gt;: Multi-region, multi-cloud 구성 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Eventual consistency&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Query 노드에 eventual consistency 구현&lt;/li&gt;
&lt;li&gt;프론트엔드에 eventual consistency 지원 추가&lt;/li&gt;
&lt;li&gt;Read-level 테스트 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WAL3&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복제된 인터페이스 추가&lt;/li&gt;
&lt;li&gt;quorum_writer를 통한 병렬 future 조정&lt;/li&gt;
&lt;li&gt;FragmentConsumer trait로 fragment 읽기 캡슐화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 개선&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ordered blockfile writer에서 eager commit&lt;/li&gt;
&lt;li&gt;Block ref drop 최적화 (copy to end 시 drop)&lt;/li&gt;
&lt;li&gt;Cursor 정리 로직 개선 (재삽입 횟수 기반 purge)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Rust 클라이언트&lt;/b&gt;: 버전 0.11.x &amp;rarr; 0.12 업그레이드&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Collection affinity&lt;/b&gt;: Collection affinity 버그 수정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기타&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tonic 버전 0.14로 업그레이드&lt;/li&gt;
&lt;li&gt;Rust Log Service 스키마 추가&lt;/li&gt;
&lt;li&gt;Globalize dead letter queue in SysDB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;embeddings-benchmark/mteb&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;릴리즈 수&lt;/b&gt;: 10개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2.6.2 ~ 2.6.9 (2026-01-02 ~ 2026-01-12)&lt;/li&gt;
&lt;li&gt;2.7.0, 2.7.1, 2.7.2 (2026-01-13 ~ 2026-01-15)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;핵심 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;vLLM 지원 추가&lt;/b&gt; (2.7.0): vLLM을 사용한 임베딩 모델 벤치마킹 지원&lt;/li&gt;
&lt;li&gt;CI 시스템을 &lt;code&gt;uv&lt;/code&gt;로 마이그레이션 (2.6.2)&lt;/li&gt;
&lt;li&gt;ResultCache 직접 노출 (2.7.2)&lt;/li&gt;
&lt;li&gt;누락된 점수 계산 문제 수정 (2.7.2)&lt;/li&gt;
&lt;li&gt;새로운 모델 추가 (llama-embed-nemotron-8b, pixie_models, mixedbread-ai 모델, voyage-4 시리즈, nemotron rerank)&lt;/li&gt;
&lt;li&gt;새로운 데이터셋 추가 (EuroPIRQRetrieval, ChemRxivRetrieval)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술적 세부사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;vLLM 통합&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vLLM wrapper를 통한 고성능 임베딩 모델 벤치마킹 지원&lt;/li&gt;
&lt;li&gt;Rerank 모델 지원 포함&lt;/li&gt;
&lt;li&gt;Prompt 지원 추가&lt;/li&gt;
&lt;li&gt;벤치마크 예제 및 문서 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CI 개선&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;uv&lt;/code&gt;를 사용한 의존성 관리로 마이그레이션&lt;/li&gt;
&lt;li&gt;GitHub Actions에서 &lt;code&gt;uv sync&lt;/code&gt; 사용&lt;/li&gt;
&lt;li&gt;Makefile 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;API 개선&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;ResultCache&lt;/code&gt;를 &lt;code&gt;mteb.ResultCache&lt;/code&gt;로 직접 노출하여 접근성 향상&lt;/li&gt;
&lt;li&gt;누락된 점수가 있는 결과 계산 로직 수정 (0 &amp;rarr; NaN 처리)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 모델 지원&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;llama-embed-nemotron-8b&lt;/li&gt;
&lt;li&gt;pixie_models&lt;/li&gt;
&lt;li&gt;mixedbread-ai/mxbai-edge-colbert-v0-32m&lt;/li&gt;
&lt;li&gt;mixedbread-ai/mxbai-edge-colbert-v0-17m&lt;/li&gt;
&lt;li&gt;voyage-4, voyage-4-large, voyage-4-lite&lt;/li&gt;
&lt;li&gt;nemotron rerank&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 데이터셋&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EuroPIRQRetrieval&lt;/li&gt;
&lt;li&gt;ChemRxivRetrieval (ChemTEB v1.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;버그 수정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git LFS 콘텐츠 처리 개선&lt;/li&gt;
&lt;li&gt;Nemo retriever 버전 업데이트로 크래시 문제 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문서화&lt;/b&gt;: vLLM 링크 수정 및 문서 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상세 릴리즈 목록&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LLM Frameworks&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;langchain-ai/langchain&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain-core==1.2.6&lt;/b&gt; (2026-01-02)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D1.2.6&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D1.2.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.1&lt;/b&gt; (2026-01-07)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.1&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.2&lt;/b&gt; (2026-01-07)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.2&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.3&lt;/b&gt; (2026-01-08)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.3&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain-core==1.2.7&lt;/b&gt; (2026-01-09)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D1.2.7&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D1.2.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain-core==0.3.82&lt;/b&gt; (2026-01-09)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D0.3.82&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D0.3.82&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain-core==0.3.83&lt;/b&gt; (2026-01-13)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D0.3.83&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain-core%3D%3D0.3.83&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: UUID7 기반 run ID 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.4&lt;/b&gt; (2026-01-14)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.4&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Agent 이름 메타데이터 추가, 타입 안정성 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.5&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.5&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: 요약 프롬프트 업데이트, 메타데이터 구성 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;langchain==1.2.6&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.6&quot;&gt;https://github.com/langchain-ai/langchain/releases/tag/langchain%3D%3D1.2.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: SummarizationMiddleware 시그니처 불일치 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Models &amp;amp; Training&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/transformers&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v5.0.0rc2&lt;/b&gt; (2026-01-08)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/transformers/releases/tag/v5.0.0rc2&quot;&gt;https://github.com/huggingface/transformers/releases/tag/v5.0.0rc2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: (확인 필요)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;메이저 버전 5.0의 첫 번째 릴리즈 후보&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;프로덕션 사용 전 테스트 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v4.57.4&lt;/b&gt; (2026-01-13)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/transformers/releases/tag/v4.57.4&quot;&gt;https://github.com/huggingface/transformers/releases/tag/v4.57.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: vasqu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: v4 시리즈의 마지막 패치 릴리즈&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v4.57.5&lt;/b&gt; (2026-01-13)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/transformers/releases/tag/v4.57.5&quot;&gt;https://github.com/huggingface/transformers/releases/tag/v4.57.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: vasqu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: QwenVL 모델 타입 로딩 문제 수정 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v4.57.6&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/transformers/releases/tag/v4.57.6&quot;&gt;https://github.com/huggingface/transformers/releases/tag/v4.57.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: vasqu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Qwen2VL 및 Qwen2.5VL 모델의 config 저장/로드 시 model_type 불일치 문제 완전 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/peft&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.18.1&lt;/b&gt; (2026-01-09)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/peft/releases/tag/v0.18.1&quot;&gt;https://github.com/huggingface/peft/releases/tag/v0.18.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: (확인 필요)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: PEFT 라이브러리 업데이트&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;huggingface/trl&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.27.0&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/huggingface/trl/releases/tag/v0.27.0&quot;&gt;https://github.com/huggingface/trl/releases/tag/v0.27.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: qgallouedec&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: 메이저 업그레이드 - VRAM 최적화, 비동기 처리, GDPO 추가 등&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Inference &amp;amp; Serving&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ollama/ollama&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.0&lt;/b&gt; (2026-01-10)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.14.0&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.14.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: 실험적 이미지 생성 모델 지원, Anthropic API 호환성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.1&lt;/b&gt; (2026-01-14)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.14.1&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.14.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Z-Image-Turbo 모델 사용 가능, macOS 자동 업데이트 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.2&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.14.2&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.14.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: TranslateGemma 모델 추가, CLI 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v0.14.3-rc1&lt;/b&gt; (2026-01-16)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ollama/ollama/releases/tag/v0.14.3-rc1&quot;&gt;https://github.com/ollama/ollama/releases/tag/v0.14.3-rc1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: macOS 시스템 종료 중 앱 종료 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ggerganov/llama.cpp&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 릴리즈&lt;/b&gt; (2026-01-01 ~ 2026-01-18, 총 139개)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7598&lt;/b&gt; (2026-01-01 00:30 UTC) - 기간 시작&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7598&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7598&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: (상세 정보 확인 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7707&lt;/b&gt; (2026-01-11 20:03 UTC)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7707&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7707&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Vulkan에서 AMD GPU 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7723&lt;/b&gt; (2026-01-13 19:31 UTC)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7723&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7723&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: RDNA4용 fattn-mma-f16 추가, Flash Attention 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7768&lt;/b&gt; (2026-01-18 04:10 UTC)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases/tag/b7768&quot;&gt;https://github.com/ggml-org/llama.cpp/releases/tag/b7768&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Jinja 템플릿 개선, openEuler ACL Graph 바이너리 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;b7770&lt;/b&gt; (2026-01-18 07:56 UTC) - 기간 종료&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 릴리즈로 지속적인 성능 최적화 및 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vector Search &amp;amp; Embeddings&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;chroma-core/chroma&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;v2.5.25&lt;/b&gt; (2026-01-08)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/chroma-core/chroma/releases/tag/v2.5.25&quot;&gt;https://github.com/chroma-core/chroma/releases/tag/v2.5.25&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: (확인 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CLI 1.3.1&lt;/b&gt; (2026-01-13)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/chroma-core/chroma/releases/tag/cli-1.3.1&quot;&gt;https://github.com/chroma-core/chroma/releases/tag/cli-1.3.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.4.1&lt;/b&gt; (2026-01-14)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/chroma-core/chroma/releases/tag/1.4.1&quot;&gt;https://github.com/chroma-core/chroma/releases/tag/1.4.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: github-actions[bot]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;: Spanner 통합, 인덱싱 상태 추적, 다중 리전 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;embeddings-benchmark/mteb&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.6.2 ~ 2.6.9&lt;/b&gt; (2026-01-02 ~ 2026-01-12)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지속적인 버그 수정 및 모델 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.7.0&lt;/b&gt; (2026-01-13)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.0&quot;&gt;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: KennethEnevoldsen&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;vLLM 지원 추가&lt;/b&gt;: vLLM을 사용한 임베딩 모델 벤치마킹 지원&lt;/li&gt;
&lt;li&gt;voyage-4-large, voyage-4-lite 모델 추가&lt;/li&gt;
&lt;li&gt;문서 링크 문제 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.7.1&lt;/b&gt; (2026-01-14)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.1&quot;&gt;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: KennethEnevoldsen&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;voyage-4 모델 추가&lt;/li&gt;
&lt;li&gt;nemotron rerank 추가&lt;/li&gt;
&lt;li&gt;EuroPIRQRetrieval 데이터셋 추가&lt;/li&gt;
&lt;li&gt;ChemRxivRetrieval 데이터셋 추가 (ChemTEB v1.1)&lt;/li&gt;
&lt;li&gt;로깅 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.7.2&lt;/b&gt; (2026-01-15)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.2&quot;&gt;https://github.com/embeddings-benchmark/mteb/releases/tag/2.7.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작성자&lt;/b&gt;: KennethEnevoldsen&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 변경사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ResultCache 직접 노출&lt;/li&gt;
&lt;li&gt;누락된 점수 계산 문제 수정&lt;/li&gt;
&lt;li&gt;pixie_models, mixedbread-ai 모델 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 기술 트렌드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 기간 동안 관찰된 주요 기술 트렌드:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;비동기 처리 및 병렬화&lt;/b&gt;: TRL에서 보상 함수의 비동기 지원 및 병렬화로 학습 속도 향상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VRAM 최적화&lt;/b&gt;: TRL의 forward_masked_logits로 최대 50% VRAM 사용량 감소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 보상 최적화&lt;/b&gt;: GDPO를 통한 다중 보상 함수 동시 최적화 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AMD GPU 지원 강화&lt;/b&gt;: llama.cpp에서 RDNA4 아키텍처 최적화 및 HIP 백엔드 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이미지 생성 모델 확산&lt;/b&gt;: Ollama에서 실험적 이미지 생성 모델 지원 시작&lt;/li&gt;
&lt;li&gt;&lt;b&gt;타입 안정성 강화&lt;/b&gt;: LangChain에서 mypy 규칙 강화 및 타입 체크 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 리전/클라우드 지원&lt;/b&gt;: Chroma에서 다중 리전 및 다중 클라우드 구성 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Eventual Consistency&lt;/b&gt;: Chroma에서 eventual consistency 지원으로 확장성 향상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메이저 버전 업그레이드&lt;/b&gt;: Transformers 5.0.0rc2 릴리즈로 메이저 버전 전환 시작&lt;/li&gt;
&lt;li&gt;&lt;b&gt;vLLM 통합 확대&lt;/b&gt;: MTEB에서 vLLM 지원 추가로 고성능 임베딩 벤치마킹 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;API 변경사항&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/transformers v5.0.0rc2&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변경된 API&lt;/b&gt;: 메이저 버전 업그레이드로 인한 API 변경 가능성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;릴리즈 후보 단계이므로 프로덕션 사용 전 충분한 테스트 권장&lt;/li&gt;
&lt;li&gt;v4에서 v5로의 마이그레이션 가이드 확인 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/trl v0.27.0&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변경된 API&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;AutoModelForCausalLMWithValueHead&lt;/code&gt; 및 &lt;code&gt;AutoModelForSeq2SeqLMWithValueHead&lt;/code&gt;가 &lt;code&gt;experimental&lt;/code&gt;로 이동&lt;/li&gt;
&lt;li&gt;여러 유틸리티 함수가 &lt;code&gt;experimental.utils&lt;/code&gt;로 이동&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DbrxForCausalLM&lt;/code&gt; 지원 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실험적 기능 사용 시 import 경로 변경 필요&lt;/li&gt;
&lt;li&gt;Deprecated 함수 및 파라미터 제거됨 (코드 업데이트 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ollama/ollama&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변경된 API&lt;/b&gt;: &lt;code&gt;/v1/responses&lt;/code&gt; 엔드포인트가 OpenResponses 스펙에 더 잘 부합하도록 개선&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 API&lt;/b&gt;: &lt;code&gt;/v1/messages&lt;/code&gt; API 추가 (Anthropic API 호환)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: 기존 코드는 대부분 호환되지만, OpenResponses 스펙 준수도 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;chroma-core/chroma&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 API&lt;/b&gt;: 인덱싱 상태 추적 API 추가 (Python, TypeScript, Rust 클라이언트)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: 인덱싱 상태를 확인하려면 최신 클라이언트 버전 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;embeddings-benchmark/mteb&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 API&lt;/b&gt;: vLLM wrapper를 통한 임베딩 모델 벤치마킹 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이그레이션 가이드&lt;/b&gt;: vLLM을 사용한 벤치마킹을 위해 vLLM wrapper 사용법 확인 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;성능 개선&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/trl v0.27.0&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: Forward pass 중 VRAM 사용량&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;: 최대 50% VRAM 사용량 감소 (&lt;code&gt;forward_masked_logits&lt;/code&gt; 함수 사용 시)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 개선&lt;/b&gt;: 비동기 보상 함수로 학습 속도 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ggerganov/llama.cpp&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: Flash Attention 성능, AMD GPU 최적화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RDNA4 아키텍처에서 fattn-mma-f16 커널로 성능 향상&lt;/li&gt;
&lt;li&gt;Vulkan에서 AMD GPU (Coopmat 지원)를 위한 matmul 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;chroma-core/chroma&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개선 영역&lt;/b&gt;: 쓰기 성능, 다중 리전 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ordered blockfile writer에서 eager commit&lt;/li&gt;
&lt;li&gt;WAL3 복제 인터페이스로 쓰기 성능 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;새로운 모델/알고리즘&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ollama/ollama&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 모델&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Z-Image-Turbo&lt;/b&gt;: 실험적 이미지 생성 모델 (macOS, Linux CUDA)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TranslateGemma&lt;/b&gt;: Gemma 3 기반 번역 모델 (55개 언어 지원)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지 생성은 실험적 단계 (macOS, Linux CUDA만 지원)&lt;/li&gt;
&lt;li&gt;번역 모델은 프로덕션 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;huggingface/trl&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 알고리즘&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;GDPO&lt;/b&gt;: Group reward-Decoupled Normalization Policy Optimization (다중 보상 RL 최적화)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DeepSeek V3.2 Off-policy 시퀀스 마스킹&lt;/b&gt;: DeepSeek 모델을 위한 특화된 마스킹 전략&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실험적 기능 정리&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;AutoModelForCausalLMWithValueHead&lt;/code&gt;, &lt;code&gt;AutoModelForSeq2SeqLMWithValueHead&lt;/code&gt;를 &lt;code&gt;experimental&lt;/code&gt;로 이동&lt;/li&gt;
&lt;li&gt;여러 유틸리티 함수를 &lt;code&gt;experimental.utils&lt;/code&gt;로 이동하여 API 구조화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제거된 기능&lt;/b&gt;: &lt;code&gt;DbrxForCausalLM&lt;/code&gt; 지원 제거&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 GPU 지원&lt;/b&gt;: 다중 GPU 사용 시 데이터셋 스트리밍 및 dtype 초기화 문제 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transformers 5.0 호환성&lt;/b&gt;: Transformers 5.0.0+ 호환성 개선 및 버그 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;embeddings-benchmark/mteb&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새로운 모델 지원&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;llama-embed-nemotron-8b&lt;/li&gt;
&lt;li&gt;pixie_models&lt;/li&gt;
&lt;li&gt;mixedbread-ai/mxbai-edge-colbert-v0-32m&lt;/li&gt;
&lt;li&gt;mixedbread-ai/mxbai-edge-colbert-v0-17m&lt;/li&gt;
&lt;li&gt;voyage-4, voyage-4-large, voyage-4-lite&lt;/li&gt;
&lt;li&gt;nemotron rerank&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 데이터셋&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EuroPIRQRetrieval&lt;/li&gt;
&lt;li&gt;ChemRxivRetrieval (ChemTEB v1.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;보안 업데이트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기간 동안 특별한 보안 패치 릴리즈는 없었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;통계 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;총 릴리즈 수&lt;/b&gt;: 169개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저장소 그룹 수&lt;/b&gt;: 5개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;활발한 저장소&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ggerganov/llama.cpp&lt;/b&gt;: 139개 (가장 활발, 일일 다중 릴리즈)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;embeddings-benchmark/mteb&lt;/b&gt;: 10개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;langchain-ai/langchain&lt;/b&gt;: 10개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;chroma-core/chroma&lt;/b&gt;: 2개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama&lt;/b&gt;: 4개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/transformers&lt;/b&gt;: 3개 (v5.0.0rc2 포함)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/peft&lt;/b&gt;: 1개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl&lt;/b&gt;: 1개 (메이저 업그레이드)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 버전 업그레이드&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;huggingface/transformers&lt;/b&gt;: v4.57.x &amp;rarr; v5.0.0rc2 (메이저)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;huggingface/trl&lt;/b&gt;: v0.26.0 &amp;rarr; v0.27.0 (메이저)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ollama/ollama&lt;/b&gt;: v0.13.x &amp;rarr; v0.14.2&lt;/li&gt;
&lt;li&gt;&lt;b&gt;embeddings-benchmark/mteb&lt;/b&gt;: 2.6.x &amp;rarr; 2.7.2&lt;/li&gt;
&lt;li&gt;&lt;b&gt;chroma-core/chroma&lt;/b&gt;: 2.5.x &amp;rarr; 1.4.1&lt;/li&gt;
&lt;li&gt;&lt;b&gt;langchain-ai/langchain&lt;/b&gt;: 1.2.0 &amp;rarr; 1.2.6&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;다음 단계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 기간의 변경사항을 바탕으로 권장되는 다음 단계:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Transformers 5.0.0rc2 테스트&lt;/b&gt;: 메이저 버전 업그레이드이므로 프로덕션 사용 전 충분한 테스트 권장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TRL v0.27.0 업그레이드 고려&lt;/b&gt;: VRAM 최적화 및 비동기 처리로 학습 효율성 향상 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ollama 이미지 생성 모델 실험&lt;/b&gt;: 실험적 단계이지만 이미지 생성 기능 테스트 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LangChain 1.2.6 업데이트&lt;/b&gt;: 타입 안정성 개선 및 버그 수정 적용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transformers 4.57.6 업데이트&lt;/b&gt;: Qwen VL 모델 사용 시 필수 업데이트&lt;/li&gt;
&lt;li&gt;&lt;b&gt;llama.cpp 최신 버전 모니터링&lt;/b&gt;: 매우 활발한 개발이므로 정기적 업데이트 권장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Chroma 1.4.1 업데이트&lt;/b&gt;: 다중 리전 지원 및 인덱싱 상태 추적 기능 활용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MTEB 2.7.2 업데이트&lt;/b&gt;: vLLM 지원 및 새로운 임베딩 모델 평가 기능 활용&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 자료&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;../releases/&quot;&gt;전체 릴리즈 목록&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;../releases/*/_metadata.json&quot;&gt;메타데이터&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI/오픈소스 릴리즈 노트</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/119</guid>
      <comments>https://dytis.tistory.com/119#entry119comment</comments>
      <pubDate>Sun, 18 Jan 2026 18:13:37 +0900</pubDate>
    </item>
    <item>
      <title>A2A 프로토콜이란?</title>
      <link>https://dytis.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;인공지능(AI) 기술이 발전하면서, 각기 다른 역할을 수행하는 &lt;b&gt;AI 에이전트&lt;/b&gt;들이 하나의 복잡한 목표를 달성하기 위해 협력하는 &lt;b&gt;멀티 에이전트 시스템&lt;/b&gt;의 중요성이 커지고 있습니다. 하지만 서로 다른 플랫폼, 프레임워크, 개발사에서 만들어진 이질적인 에이전트들이 원활하게 &quot;대화&quot;하고 협력하는 것은 큰 도전이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;2&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 문제를 해결하기 위해 등장한 것이 바로 &lt;b&gt;A2A(Agent-to-Agent) 프로토콜&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;2&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜이란 무엇인가?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜은 AI 에이전트 간의 &lt;b&gt;원활한 통신 및 협업&lt;/b&gt;을 가능하게 하는 &lt;b&gt;오픈 표준(Open Standard)&lt;/b&gt; 프로토콜입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 프로토콜은 서로 다른 프레임워크로 구축되고, 다른 조직에 의해 소유 및 배포된 에이전트들이 &lt;b&gt;사일로(Silos)를 허물고 하나의 연합된 시스템&lt;/b&gt;처럼 함께 작동하도록 공통 언어와 표준화된 데이터 구조를 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A가 해결하는 문제: '도구'가 아닌 '에이전트'로 소통하기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존의 에이전트 협업 환경에서는 다음과 같은 핵심적인 문제들이 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;에이전트 노출의 한계 (Agent Exposure):&lt;/b&gt; 개발자들은 종종 에이전트의 기능을 다른 에이전트에게 노출하기 위해 에이전트를 단순한 &lt;b&gt;도구(Tool)&lt;/b&gt;로 래핑(Wrapping)하는 방식을 사용했습니다. 이는 &lt;b&gt;모델 컨텍스트 프로토콜(MCP, Model Context Protocol)&lt;/b&gt;과 같은 도구 노출 방식과 유사하지만, 에이전트가 본질적으로 가진 &lt;b&gt;협상, 추론, 계획, 위임&lt;/b&gt;과 같은 자율적인 능력을 제한합니다. &lt;span style=&quot;background-color: #f3c000;&quot;&gt;A2A는 에이전트를 있는 그대로 노출&lt;/span&gt;하여 그들의 전체 기능을 활용할 수 있도록 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;커스텀 통합의 비효율성 (Custom Integrations):&lt;/b&gt; 표준이 없는 환경에서는 에이전트 간의 모든 상호작용에 대해 &lt;b&gt;맞춤형(Point-to-Point) 통합 솔루션&lt;/b&gt;이 필요해집니다. 이는 막대한 엔지니어링 오버헤드를 발생시키고, 시스템의 확장성과 유지보수를 어렵게 하며 혁신 속도를 늦춥니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;상호 운용성 부족 (Interoperability Challenge):&lt;/b&gt; 다양하게 개발된 에이전트들은 서로의 기능을 쉽게 발견하거나, 안정적이고 안전하게 협업할 수 있는 표준화된 방법을 찾을 수 없어 개별적으로 고립됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;A2A는 이 모든 문제를 해결하고, &lt;span style=&quot;background-color: #f3c000;&quot;&gt;에이전트가 단순한 '도구'가 아닌, 복잡한 다자간 상호작용(Multi-turn interaction)을 수행할 수 있는 자율적인 '개체(Autonomous Entity)'로서 소통할 수 있도록 지원&lt;/span&gt;합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜 예시 시나리오: 복잡한 여행 계획&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 사용자 요청과 협업의 필요성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 AI 어시스턴트에게 &quot;국제 여행을 계획해 줘.&quot;와 같은 복잡한 요청을 보냅니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 어시스턴트는 이 요청을 처리하기 위해 혼자서 모든 것을 할 수 없다는 것을 인지하고, 다음의 여러 전문 에이전트들과의 &lt;b&gt;협업&lt;/b&gt;이 필요함을 판단합니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;✈️ 항공편 예약 에이전트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  호텔 예약 에이전트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  환전 에이전트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;  현지 투어 추천 에이전트&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbr2eF/dJMb99Y818Z/2ggFzXdccUB3njAWTS6vG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbr2eF/dJMb99Y818Z/2ggFzXdccUB3njAWTS6vG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbr2eF/dJMb99Y818Z/2ggFzXdccUB3njAWTS6vG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbr2eF%2FdJMb99Y818Z%2F2ggFzXdccUB3njAWTS6vG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;559&quot; height=&quot;495&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. A2A가 없을 때의 문제: 상호 운용성 문제&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜이 표준화되어 있지 않다면, 위에서 언급된 각 에이전트는 서로 다른 개발사, 프레임워크, 배포 환경에서 구축되었기 때문에 다음과 같은 문제가 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;고립된 에이전트:&lt;/b&gt; 각 에이전트는 서로의 &lt;b&gt;기능을 발견&lt;/b&gt;하거나 &lt;b&gt;직접적인 소통&lt;/b&gt;을 할 수 있는 표준화된 방법이 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;커스텀 통합:&lt;/b&gt; AI 어시스턴트(오케스트레이터)가 이들을 연결하려면 에이전트마다 &lt;b&gt;별도의 맞춤형(Custom)&lt;/b&gt; 연결 코드를 작성해야 하며, 이는 확장성을 저해합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;제한된 상호작용:&lt;/b&gt; 에이전트를 단순한 '도구'로만 사용하게 되어, 에이전트 본연의 &lt;b&gt;자율적인 추론, 협상, 다자간 소통(Multi-turn)&lt;/b&gt; 능력이 제한됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. A2A를 통한 해결책: 상호 연결된 시스템&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜을 사용하면 이 모든 문제가 해결되고, 에이전트들은 마치 하나의 상호 연결된 팀처럼 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;에이전트 검색 및 위임:&lt;/b&gt; AI 어시스턴트(클라이언트 에이전트)는 &lt;b&gt;표준화된 A2A 프로토콜&lt;/b&gt;을 사용하여 주변 환경의 모든 전문 에이전트들의 &lt;b&gt;기능(Agent Card)&lt;/b&gt;을 검색하고 적절한 에이전트를 식별합니다. 이후 항공편 예약 에이전트에게 항공편 탐색 작업을 &lt;b&gt;위임(Delegate)&lt;/b&gt;합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;원활한 통신:&lt;/b&gt; 항공편 에이전트가 최적의 항공편을 찾은 후, 그 정보를 다시 A2A를 통해 AI 어시스턴트에게 &lt;b&gt;표준화된 데이터 구조&lt;/b&gt;로 전달합니다. AI 어시스턴트는 이 정보를 기반으로 호텔 예약 에이전트에게 필요한 날짜와 목적지를 전달하는 등 다음 단계로 작업을 &lt;b&gt;연속적으로 위임&lt;/b&gt;합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;결과 통합 및 응답:&lt;/b&gt; 최종적으로 AI 어시스턴트는 모든 전문 에이전트(&lt;b&gt;항공편, 호텔, 환전, 투어&lt;/b&gt;)로부터 받은 정보를 &lt;b&gt;통합&lt;/b&gt;하고, 이를 사용자에게 &lt;b&gt;하나의 완성된 매끄러운 여행 계획&lt;/b&gt;으로 제시합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;핵심 설계 원칙 및 기능&lt;/span&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜은 넓은 채택과 엔터프라이즈급 기능을 위해 다음과 같은 주요 원칙을 기반으로 설계되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table id=&quot;2bbb770d-78e9-80cb-95e7-c742e1dc5fc9&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2bbb770d-78e9-807f-91fb-d49697dbf463&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;원칙&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8075-aeef-dd6c9e3d6e88&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;단순성 (Simplicity)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;기존 표준(HTTP, &lt;b&gt;JSON-RPC 2.0&lt;/b&gt;, SSE)을 활용하여 개발자 채택을 가속화합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8031-a9ef-edd354abaf8c&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;엔터프라이즈 준비 완료 (Enterprise Readiness)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;강력한 인증(Authentication), 권한 부여(Authorization), 보안, 추적, 모니터링 등 엔터프라이즈 환경에 필수적인 요구 사항을 충족합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8040-b7fe-ede4863e49cc&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;비동기 지원 (Asynchronous)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;&lt;b&gt;장기 실행 작업(LRO)&lt;/b&gt;을 기본적으로 지원하며, &lt;b&gt;서버 발신 이벤트(SSE)&lt;/b&gt; 및 푸시 알림 메커니즘을 통해 에이전트나 사용자가 지속적으로 연결되어 있지 않은 시나리오도 효과적으로 처리합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8084-a405-f693ab855d8a&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;모달리티 독립성 (Modality Independent)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;일반 텍스트를 넘어 파일, 구조화된 데이터, 오디오, 비디오 스트리밍 등 다양한 유형의 콘텐츠를 통한 소통을 지원합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8051-9257-f0e600e67338&quot;&gt;
&lt;td id=&quot;CVL}&quot;&gt;&lt;b&gt;불투명한 실행 (Opaque Execution)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~Xsm&quot;&gt;에이전트들은 자신의 내부 로직, 메모리, 또는 독점적인 도구를 노출하지 않고도 협력할 수 있습니다. 이는 지적 재산권을 보호하고 보안을 강화합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 에이전트 스택 이해하기: A2A, MCP, 프레임워크 및 모델&lt;/span&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜은 AI 에이전트 생태계 전체를 아우르는 더 넓은 &lt;b&gt;에이전트 스택(Agent Stack)&lt;/b&gt; 내에서 매우 중요한 위치를 차지합니다. 에이전트 스택은 에이전트의 기초가 되는 모델부터, 개발 도구, 그리고 외부 자원 및 다른 에이전트와의 소통 표준까지 모든 계층을 포함합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A의 위치와 역할&lt;/span&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트 스택은 일반적으로 다음과 같은 네 가지 계층으로 구성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;모델 (Models):&lt;/b&gt; 에이전트의 추론(Reasoning) 및 의사 결정의 근간이 되는 기초 엔진입니다. 일반적으로 &lt;b&gt;대규모 언어 모델(LLM)&lt;/b&gt; 등이 여기에 해당하며, 에이전트의 '뇌' 역할을 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;프레임워크 (Frameworks) 및 ADK:&lt;/b&gt; 에이전트를 실제로 구축하고 배포하기 위한 도구 키트입니다. LangChain, LangGraph, Crew AI, 그리고 Google의 &lt;b&gt;ADK(Agent Development Kit)&lt;/b&gt; 등이 여기에 속합니다. A2A는 에이전트를 &lt;b&gt;어떤 프레임워크로 만들었는지에 관계없이&lt;/b&gt; 통신을 가능하게 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;MCP (Model Context Protocol):&lt;/b&gt; 에이전트가 자신의 추론을 수행하는 과정에서 &lt;b&gt;외부 도구, API, 데이터 소스&lt;/b&gt;와 연결하여 필요한 정보를 얻고 행동을 실행할 수 있도록 돕는 표준입니다. MCP는 &lt;b&gt;모델과 외부 자원 간의 연결&lt;/b&gt;을 담당합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;A2A (Agent-to-Agent Protocol):&lt;/b&gt; 서로 다른 조직에서, 다른 프레임워크로 구축되고 배포된 &lt;b&gt;AI 에이전트 '개체'들이 서로를 호출하고, 복잡한 작업을 위임하며, 다자간 소통을 할 수 있도록&lt;/b&gt; 표준화합니다. A2A는 &lt;b&gt;에이전트 간의 수평적 협력&lt;/b&gt;을 가능하게 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A와 MCP: 보완적인 관계의 이해&lt;/span&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A와 MCP는 서로 경쟁하는 관계가 아니라, AI 에이전트의 역량을 극대화하기 위해 &lt;b&gt;상호 보완적&lt;/b&gt;으로 작동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;MCP의 역할:&lt;/b&gt; 에이전트가 계산기, 데이터베이스 쿼리 등 &lt;b&gt;정의된 기능을 수행하는 정적인 외부 도구&lt;/b&gt;를 활용하여 데이터와 연결될 때의 복잡성을 줄이는 데 초점을 맞춥니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;A2A의 역할:&lt;/b&gt; 에이전트가 단순히 도구를 사용하는 것을 넘어, &lt;b&gt;다른 에이전트에게 복잡한 작업을 위임&lt;/b&gt;하고, 추론을 바탕으로 &lt;b&gt;협상 및 다중 턴(Multi-turn)&lt;/b&gt; 상호작용을 수행할 수 있도록 표준화합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p4RVM/dJMcaiBJJcS/opN2spzXnkfmRKvICOzPhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p4RVM/dJMcaiBJJcS/opN2spzXnkfmRKvICOzPhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p4RVM/dJMcaiBJJcS/opN2spzXnkfmRKvICOzPhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp4RVM%2FdJMcaiBJJcS%2FopN2spzXnkfmRKvICOzPhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;358&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;즉, A2A는 에이전트가 다른 에이전트를 '도구'가 아닌 '협력적인 동료'로 대우할 수 있도록 하여, AI 에이전트 생태계의 복잡성과 깊이를 한층 더 높여줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BK2a2/dJMcahCR8WH/9wHwmTnq2EhT0AKYSQ7nz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BK2a2/dJMcahCR8WH/9wHwmTnq2EhT0AKYSQ7nz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BK2a2/dJMcahCR8WH/9wHwmTnq2EhT0AKYSQ7nz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBK2a2%2FdJMcahCR8WH%2F9wHwmTnq2EhT0AKYSQ7nz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1524&quot; height=&quot;864&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;A2A&amp;nbsp;상호작용의&amp;nbsp;핵심&amp;nbsp;주체&amp;nbsp;(Core&amp;nbsp;Actors&amp;nbsp;in&amp;nbsp;A2A&amp;nbsp;Interactions)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜 기반의 상호작용은 크게 세 가지 핵심 주체(Actor)를 중심으로 이루어지며, 이들이 정의된 역할을 수행함으로써 복잡한 멀티 에이전트 워크플로우를 완성합니다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 사용자 (User)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;역할:&lt;/b&gt; 최종 사용자(End User)로서, 사람이 될 수도 있고 자동화된 서비스가 될 수도 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능:&lt;/b&gt; 작업을 &lt;b&gt;시작&lt;/b&gt;하고, 하나 이상의 AI 에이전트의 도움이 필요한 &lt;b&gt;목표(Goal)&lt;/b&gt;를 정의합니다. 사용자의 요청은 A2A 생태계 전체를 움직이는 출발점이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. A2A 클라이언트 (Client Agent)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;7&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;역할:&lt;/b&gt; &lt;b&gt;사용자(인간 또는 서비스)를 대리&lt;/b&gt;하여 행동하는 애플리케이션, 서비스, 또는 또 다른 AI 에이전트입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능:&lt;/b&gt; A2A 프로토콜을 사용하여 &lt;b&gt;통신을 개시&lt;/b&gt;하는 주체입니다. 원격 에이전트의 기능을 검색하고, 인증을 거쳐, sendMessage 또는 sendMessageStream API를 호출하여 작업을 위임합니다. 여행 계획 시나리오에서는 최종 사용자에게 응답을 전달하는 오케스트레이터(Orchestrator) 역할을 수행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. A2A 서버 (Remote Agent)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;역할:&lt;/b&gt; AI 에이전트 또는 에이전트 시스템으로서, A2A 프로토콜을 구현한 &lt;b&gt;HTTP 엔드포인트를 외부에 노출&lt;/b&gt;합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능:&lt;/b&gt; 클라이언트 에이전트로부터 요청을 &lt;b&gt;수신&lt;/b&gt;하고, 실제 &lt;b&gt;작업(Task)&lt;/b&gt;을 처리하며, 그 결과나 상태 업데이트를 클라이언트에게 반환합니다. 클라이언트의 관점에서 원격 에이전트는 내부 작동 방식, 메모리, 또는 독점적인 도구가 노출되지 않는 &lt;b&gt;불투명한(Opaque, 블랙박스)&lt;/b&gt; 시스템으로 작동합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A의 기본 통신 요소 (Fundamental Communication Elements)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜은 에이전트 간의 통신과 협업을 구조화하고 표준화하기 위해 다섯 가지 핵심 기본 요소를 사용합니다. 이 요소들은 에이전트가 안전하고 효율적으로 정보를 교환하고 작업을 추적할 수 있도록 돕습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table id=&quot;2bbb770d-78e9-8089-825b-c41aa91095c2&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2bbb770d-78e9-805b-83c1-f6dc07471812&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;요소&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;핵심 목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-80ee-b711-cb1e0b2b9aa9&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;에이전트 카드 (Agent Card)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트의 신원, 기능(Capabilities), 서비스 엔드포인트(URL), 필요 인증 정보를 JSON 형태로 기술한 메타데이터 문서입니다.&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트가 에이전트를 &lt;b&gt;발견&lt;/b&gt;하고, 안전하고 효과적으로 상호작용하는 방법을 &lt;b&gt;이해&lt;/b&gt;하도록 돕습니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-80db-90b9-dee37ec3ef50&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;작업 (Task)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트에 의해 시작되며, 고유한 ID와 정의된 수명 주기(Lifecycle)를 가진 &lt;b&gt;상태 유지(Stateful) 작업 단위&lt;/b&gt;입니다.&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;장기 실행 작업(LRO)&lt;/b&gt;을 추적하고, 여러 턴에 걸친 상호작용(Multi-turn interaction) 및 협업을 가능하게 합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-80f4-be11-db40d5a887d8&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;메시지 (Message)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트와 에이전트 간의 &lt;b&gt;단일 턴(Single turn)&lt;/b&gt; 커뮤니케이션입니다. 내용(Part)과 역할(&quot;user&quot; 또는 &quot;agent&quot;)을 포함합니다.&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;지침, 문맥, 질문, 답변, 상태 업데이트 등 공식적인 결과물(Artifact)이 아닌 &lt;b&gt;일반적인 소통&lt;/b&gt;을 전달합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-8025-ac89-d696ea6d6ecd&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;파트 (Part)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;메시지나 결과물(Artifact) 내에서 사용되는 &lt;b&gt;가장 기본적인 콘텐츠 컨테이너&lt;/b&gt;입니다. TextPart, FilePart, DataPart 등이 있습니다.&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트가 일반 텍스트를 넘어 파일, 구조화된 JSON 데이터 등 &lt;b&gt;다양한 콘텐츠 유형&lt;/b&gt;을 유연하게 교환하도록 지원합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2bbb770d-78e9-80cf-8c03-d22abf022555&quot;&gt;
&lt;td id=&quot;YPHL&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;결과물 (Artifact)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;IjkO&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작업(Task)을 수행하는 동안 에이전트가 생성하는 &lt;b&gt;실제 산출물&lt;/b&gt; 또는 &lt;b&gt;구체적인 결과&lt;/b&gt;입니다(예: 문서, 이미지, 구조화된 데이터).&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;bzue&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트 작업의 &lt;b&gt;구조화되고 검색 가능한 최종 결과&lt;/b&gt;를 전달합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 요청 라이프사이클 (A2A Request Lifecycle)&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-path-to-node=&quot;1&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A2A 프로토콜에서 클라이언트 에이전트와 원격 에이전트 간의 상호작용은 복잡한 작업을 안전하고 신뢰할 수 있게 처리하기 위해 표준화된 라이프사이클을 따릅니다. 이 과정은 크게&amp;nbsp;&lt;b&gt;에이전트 검색, 인증, 메시지 전송&lt;/b&gt;의 네 가지 주요 단계로 구성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;1100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tWXOu/dJMcaiBJJi4/Cyw47J8QGO1bZOh4kuK5xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tWXOu/dJMcaiBJJi4/Cyw47J8QGO1bZOh4kuK5xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tWXOu/dJMcaiBJJi4/Cyw47J8QGO1bZOh4kuK5xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtWXOu%2FdJMcaiBJJi4%2FCyw47J8QGO1bZOh4kuK5xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;727&quot; height=&quot;1100&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;1100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 에이전트 검색 (Agent Discovery)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;가장 먼저 클라이언트 에이전트는 협력하고자 하는 원격 에이전트의 존재와 기능을 파악해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;에이전트 카드(Agent Card) 요청:&lt;/b&gt; 클라이언트 에이전트는 원격 에이전트의 공개된 엔드포인트(예: /.well-known/agent-card)로 GET 요청을 보냅니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기능 확인:&lt;/b&gt; 원격 에이전트는 자신의 신원, 통신 엔드포인트, 제공하는 기능, 그리고 필요한 보안 메커니즘을 JSON 형식으로 정의한 &lt;b&gt;에이전트 카드&lt;/b&gt;를 반환합니다. 클라이언트 에이전트는 이 카드를 분석하여 작업을 위임할 적절한 에이전트인지 판단합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 인증 (Authentication)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에이전트 카드를 통해 보안 요구 사항을 파악한 후, 두 에이전트 간의 통신 보안을 확립합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;토큰 요청:&lt;/b&gt; 에이전트 카드에 명시된 securitySchemes(예: &lt;b&gt;OpenID Connect&lt;/b&gt;)를 기반으로 인증 서버(Auth Server)에 접근하여 JWT(JSON Web Token)와 같은 보안 토큰을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;JWT 획득:&lt;/b&gt; 인증 서버는 유효성 검사를 거쳐 보안 토큰을 발급하고, 클라이언트 에이전트는 이를 후속 요청에 사용합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 메시지 전송 (sendMessage API)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실제 작업 요청 및 처리가 시작되는 단계입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;요청 전송:&lt;/b&gt; 클라이언트 에이전트는 에이전트 카드에서 파악한 원격 에이전트의 URL로 보안 토큰(JWT)을 포함하여 POST /sendMessage API를 호출합니다. 이 요청에는 수행해야 할 작업의 상세 내용이 포함됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;작업 및 응답:&lt;/b&gt; 원격 에이전트는 메시지를 처리하고, 이 요청을 기반으로 작업(Task)을 생성합니다. 이후 클라이언트에게 &lt;b&gt;Task Response&lt;/b&gt;를 즉시 반환하여 요청이 성공적으로 접수되었음을 알립니다. 이 응답에는 작업 상태를 추적할 수 있는 정보가 포함됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 스트리밍 및 비동기 처리 (sendMessageStream API)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;13&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작업이 즉시 완료되지 않는 장기 실행 작업(LRO)이나 지속적인 업데이트가 필요한 경우에 사용되는 메커니즘입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;14&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;스트리밍 요청:&lt;/b&gt; 클라이언트 에이전트는 POST /sendMessageStream API를 호출합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;실시간 업데이트:&lt;/b&gt; 원격 에이전트는 &lt;b&gt;Server-Sent Events (SSE)&lt;/b&gt; 메커니즘을 사용하여 다음의 이벤트를 클라이언트에게 실시간으로 스트리밍합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;14,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Task (Submitted):&lt;/b&gt; 작업이 접수되었음을 알립니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;TaskStatusUpdateEvent (Working/Completed):&lt;/b&gt; 작업의 현재 진행 상태(처리 중, 완료됨 등)를 알려줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;TaskArtifactUpdateEvent:&lt;/b&gt; 작업 과정 중 생성된 중간 결과물이나 최종 결과물(예: 이미지, 보고서 등)을 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 라이프사이클은 A2A 프로토콜이 에이전트 간의 &lt;b&gt;신뢰할 수 있고 비동기적인 협업&lt;/b&gt;을 가능하게 하는 핵심 기반입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1764493154991&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;A2A Protocol&quot; data-og-description=&quot;Agent2Agent (A2A) Protocol What is A2A Protocol? Welcome to the official documentation for the Agent2Agent (A2A) Protocol, an open standard designed to enable seamless communication and collaboration between AI agents. Originally developed by Google and no&quot; data-og-host=&quot;a2a-protocol.org&quot; data-og-source-url=&quot;https://a2a-protocol.org/latest/&quot; data-og-url=&quot;https://a2a-protocol.org/latest/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5ebZ1/hyZOtV8I2c/tirp6Kv4nQlF1WYDkySeT0/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024,https://scrap.kakaocdn.net/dn/bLRMDA/hyZOqSGhy2/OCSXUCgQgYnfkwpG9MecX1/img.png?width=1008&amp;amp;height=752&amp;amp;face=0_0_1008_752,https://scrap.kakaocdn.net/dn/EazHE/hyZO5MSOsK/s2JrChhG2o3IVXv0Y5y2o0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://a2a-protocol.org/latest/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://a2a-protocol.org/latest/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5ebZ1/hyZOtV8I2c/tirp6Kv4nQlF1WYDkySeT0/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024,https://scrap.kakaocdn.net/dn/bLRMDA/hyZOqSGhy2/OCSXUCgQgYnfkwpG9MecX1/img.png?width=1008&amp;amp;height=752&amp;amp;face=0_0_1008_752,https://scrap.kakaocdn.net/dn/EazHE/hyZO5MSOsK/s2JrChhG2o3IVXv0Y5y2o0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;A2A Protocol&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Agent2Agent (A2A) Protocol What is A2A Protocol? Welcome to the official documentation for the Agent2Agent (A2A) Protocol, an open standard designed to enable seamless communication and collaboration between AI agents. Originally developed by Google and no&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;a2a-protocol.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/어플리케이션 개발</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/118</guid>
      <comments>https://dytis.tistory.com/118#entry118comment</comments>
      <pubDate>Sun, 30 Nov 2025 18:35:33 +0900</pubDate>
    </item>
    <item>
      <title>K8S 개발 환경 세팅</title>
      <link>https://dytis.tistory.com/117</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;kubectl 세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761182925003&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Install and Set Up kubectl on macOS&quot; data-og-description=&quot;Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.34 client can communicate with v1.33, v1.34, and v1.35 control planes. Using the latest compatible version of kubectl helps avoid&quot; data-og-host=&quot;kubernetes.io&quot; data-og-source-url=&quot;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&quot; data-og-url=&quot;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/R5uXb/hyZLejWg2L/izizEkfki8HAV5374qv9L1/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/R5uXb/hyZLejWg2L/izizEkfki8HAV5374qv9L1/img.png?width=1727&amp;amp;height=373&amp;amp;face=0_0_1727_373');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install and Set Up kubectl on macOS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.34 client can communicate with v1.33, v1.34, and v1.35 control planes. Using the latest compatible version of kubectl helps avoid&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kubernetes.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. kubectl 바이너리 다운로드&lt;/p&gt;
&lt;pre id=&quot;code_1761182944872&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -LO &quot;https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. kubectl 바이너리에 실행권한 부여&lt;/p&gt;
&lt;pre id=&quot;code_1761182982001&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x ./kubectl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 바이너리를 시스템 PATH 하위에 이동&lt;/p&gt;
&lt;pre id=&quot;code_1761183018821&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;podman 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://podman.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://podman.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761183195217&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Podman&quot; data-og-description=&quot;Have fun coloring and learn about Podman! A decentralized team of open source container tool superheroes comes to the rescue when an asteroid storm threatens the planet. Learn about each tool&amp;mdash;Podman, CRI-O, Buildah, Skopeo, and OpenShift&amp;mdash;as they redesi&quot; data-og-host=&quot;podman.io&quot; data-og-source-url=&quot;https://podman.io/&quot; data-og-url=&quot;https://podman.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/PwjAe/hyZK931xOV/SjZN0YwoKeDUApEgzUKCUK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=127_119_284_276,https://scrap.kakaocdn.net/dn/bilQgd/hyZLedaofj/Il8slIaluYfJdHEk92shA0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=71_161_175_275&quot;&gt;&lt;a href=&quot;https://podman.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://podman.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/PwjAe/hyZK931xOV/SjZN0YwoKeDUApEgzUKCUK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=127_119_284_276,https://scrap.kakaocdn.net/dn/bilQgd/hyZLedaofj/Il8slIaluYfJdHEk92shA0/img.jpg?width=400&amp;amp;height=400&amp;amp;face=71_161_175_275');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Podman&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Have fun coloring and learn about Podman! A decentralized team of open source container tool superheroes comes to the rescue when an asteroid storm threatens the planet. Learn about each tool&amp;mdash;Podman, CRI-O, Buildah, Skopeo, and OpenShift&amp;mdash;as they redesi&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;podman.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;minikube 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fhomebrew&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fhomebrew&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761183088247&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;minikube start&quot; data-og-description=&quot;minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you&amp;rsquo;ll&quot; data-og-host=&quot;minikube.sigs.k8s.io&quot; data-og-source-url=&quot;https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fhomebrew&quot; data-og-url=&quot;https://minikube.sigs.k8s.io/docs/start/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fhomebrew&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fhomebrew&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;minikube start&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you&amp;rsquo;ll&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;minikube.sigs.k8s.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. homebrew 이용해서 설치&lt;/p&gt;
&lt;pre id=&quot;code_1761183078251&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install minikube&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. minikube 실행&lt;/p&gt;
&lt;pre id=&quot;code_1761183119871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;minikube start&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/117</guid>
      <comments>https://dytis.tistory.com/117#entry117comment</comments>
      <pubDate>Thu, 23 Oct 2025 11:19:11 +0900</pubDate>
    </item>
    <item>
      <title>@lru_cache</title>
      <link>https://dytis.tistory.com/116</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;1140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biNVma/btsNXBZ9ZRH/23pCZNkZM5drHXjKw4YrEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biNVma/btsNXBZ9ZRH/23pCZNkZM5drHXjKw4YrEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biNVma/btsNXBZ9ZRH/23pCZNkZM5drHXjKw4YrEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiNVma%2FbtsNXBZ9ZRH%2F23pCZNkZM5drHXjKw4YrEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;566&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;1140&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 케이스에서는 당연하게 동작&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaxUpw/btsNYVi7Vn4/TFAC89bkfSXcJsA16KV9Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaxUpw/btsNYVi7Vn4/TFAC89bkfSXcJsA16KV9Y0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaxUpw/btsNYVi7Vn4/TFAC89bkfSXcJsA16KV9Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaxUpw%2FbtsNYVi7Vn4%2FTFAC89bkfSXcJsA16KV9Y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;630&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;1218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;max_size개 이상 mapping key가 들어오면 값을 갱신&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTt3Iw/btsNYY7TNgZ/MUFXZ1YzNxI50jCMt4aLv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTt3Iw/btsNYY7TNgZ/MUFXZ1YzNxI50jCMt4aLv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTt3Iw/btsNYY7TNgZ/MUFXZ1YzNxI50jCMt4aLv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTt3Iw%2FbtsNYY7TNgZ%2FMUFXZ1YzNxI50jCMt4aLv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;533&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;객체의 메소드에서도 잘 동작&lt;/p&gt;</description>
      <category>개발/Python</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/116</guid>
      <comments>https://dytis.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 15 May 2025 20:42:02 +0900</pubDate>
    </item>
    <item>
      <title>Milvus #1 - 아키텍처</title>
      <link>https://dytis.tistory.com/115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus는 컴퓨팅 노드에 대한 스토리지 및 컴퓨팅 분리와 수평적 확장성을 특징으로 하는 공유 스토리지 아키텍처를 채택합니다. Data Plane과 Control plane 분리 원칙에 따라 Milvus는 access layer, coordinator service, worker node, storage의 네 가지 계층으로 구성됩니다. 이러한 계층은 확장 또는 재해 복구와 관련하여 상호 독립적입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EtYgI/btsNrXaUC0M/ur4CHqIQhdJmZgiAIjTLEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EtYgI/btsNrXaUC0M/ur4CHqIQhdJmZgiAIjTLEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EtYgI/btsNrXaUC0M/ur4CHqIQhdJmZgiAIjTLEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEtYgI%2FbtsNrXaUC0M%2Fur4CHqIQhdJmZgiAIjTLEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;718&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;figure에 따라서 인터페이스는 다음과 같은 카테고리로 분류할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DDL / DCL&lt;/b&gt;: createCollection / createPartition / dropCollection / dropPartition / hasCollection / hasPartition&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DML / Produce&lt;/b&gt;: insert / delete / upsert&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DQL&lt;/b&gt;:&amp;nbsp;search&amp;nbsp;/&amp;nbsp;query&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Access Layer&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stateless Proxy의 그룹으로 구성된 access layer는 시스템의 최전방 계층이자 사용자 엔드포인트입니다. 클라이언트 요청의 유효성을 검사하고 반환되는 결과를 줄입니다. 프록시는 그 자체로 상태 비저장(Stateless)입니다. Nginx, Kubernetes Ingress, NodePort, LVS와 같은 부하 분산 구성 요소를 사용하여 통합 서비스 주소를 제공합니다. Milvus는&amp;nbsp;대규모&amp;nbsp;병렬&amp;nbsp;처리(MPP)&amp;nbsp;아키텍처를&amp;nbsp;사용하므로&amp;nbsp;프록시는&amp;nbsp;최종&amp;nbsp;결과를&amp;nbsp;클라이언트로&amp;nbsp;반환하기&amp;nbsp;전에&amp;nbsp;중간&amp;nbsp;결과를&amp;nbsp;집계하고&amp;nbsp;사후&amp;nbsp;처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Coordinator service&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; Coordinator Service는 Worker nodes에 작업을 할당하고 시스템의 핵심 역할을 합니다. Coordinator Service가 수행하는 작업에는 클러스터 토폴로지 관리, 로드 밸런싱, 타임스탬프 생성, 데이터 선언 및 데이터 관리가 포함됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코디네이터&amp;nbsp;유형에는&amp;nbsp;루트&amp;nbsp;코디네이터(루트&amp;nbsp;좌표),&amp;nbsp;데이터&amp;nbsp;코디네이터(데이터&amp;nbsp;좌표),&amp;nbsp;쿼리&amp;nbsp;코디네이터(쿼리&amp;nbsp;좌표)의&amp;nbsp;세&amp;nbsp;가지가&amp;nbsp;있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Root coordinator (root coord)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Root coordinator는 컬렉션, 파티션 또는 인덱스를 생성하거나 삭제하는 것과 같은 DDL 및 DCL 요청을 처리하고 TSO(타임스탬프 Oracle) 및 타임 티커 발급을 관리합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Query coordinator (query coord)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query coordinator는 쿼리 노드의 토폴로지와 부하 분산을 관리하고, growing 세그먼트에서 sealed 세그먼트로 핸드오프를 처리합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Data coordinator (data coord)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data coordinator는 데이터 노드와 인덱스 노드의 토폴로지를 관리하고, 메타데이터를 유지 관리하며, flush, compact, 인덱스 구축 및 기타 백그라운드 데이터 작업을 트리거합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Worker nodes&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Worker nodes는 Coordinator service의 지시를 따르고 프록시에서 DML 명령을 실행하는 단순 실행자입니다. Worker nodes는&amp;nbsp;스토리지와&amp;nbsp;컴퓨팅이&amp;nbsp;분리되어&amp;nbsp;있어&amp;nbsp;상태&amp;nbsp;비저장(stateless)이&amp;nbsp;가능하며,&amp;nbsp;쿠버네티스에&amp;nbsp;배포하면&amp;nbsp;시스템&amp;nbsp;확장&amp;nbsp;및&amp;nbsp;재해&amp;nbsp;복구를&amp;nbsp;용이하게&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;워커&amp;nbsp;노드에는&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;유형이&amp;nbsp;있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Query node&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Query node는 증분 로그 데이터를 검색하고 로그 브로커를 구독하여 이를 growing 세그먼트로 전환하고, Object Storage에서 과거 데이터를 로드하고, 벡터와 스칼라 데이터 간에 하이브리드 검색을 실행합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Data node&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data node는 로그 브로커를 구독하여 증분 로그 데이터를 검색하고, 변형 요청을 처리하고, 로그 데이터를 로그 스냅샷으로 패킹하여 Object Storage에 저장합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Index node&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Index&amp;nbsp;node는 인덱스를 생성합니다. 인덱스 노드는 메모리에 상주할 필요가 없으며, 서버리스 프레임워크를 사용하여 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Storage&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스토리지는&amp;nbsp;시스템의&amp;nbsp;핵심으로,&amp;nbsp;데이터&amp;nbsp;지속성을&amp;nbsp;담당합니다.&amp;nbsp;메타&amp;nbsp;스토리지,&amp;nbsp;로그&amp;nbsp;브로커,&amp;nbsp;객체&amp;nbsp;스토리지로&amp;nbsp;구성됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Meta&amp;nbsp;storage&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Meta storage는 컬렉션 스키마, 메시지 소비 체크포인트와 같은 메타데이터의 스냅샷을 저장합니다. 메타데이터&amp;nbsp;저장에는&amp;nbsp;매우&amp;nbsp;높은&amp;nbsp;가용성,&amp;nbsp;강력한&amp;nbsp;일관성,&amp;nbsp;그리고&amp;nbsp;트랜잭션&amp;nbsp;지원이&amp;nbsp;요구되므로&amp;nbsp;Milvus는&amp;nbsp;메타&amp;nbsp;저장소로&amp;nbsp;etcd를&amp;nbsp;선택했습니다.&amp;nbsp;Milvus는&amp;nbsp;서비스&amp;nbsp;등록&amp;nbsp;및&amp;nbsp;상태&amp;nbsp;점검에도&amp;nbsp;etcd를&amp;nbsp;사용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Object&amp;nbsp;storage&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Object storage는 로그의 스냅샷 파일, 스칼라 및 벡터 데이터의 인덱스 파일, 중간 쿼리 결과를 저장합니다. Milvus는 MinIO를 Object storage로 사용 합니다. 하지만&amp;nbsp;객체&amp;nbsp;스토리지는&amp;nbsp;액세스&amp;nbsp;지연&amp;nbsp;시간이&amp;nbsp;길고&amp;nbsp;쿼리&amp;nbsp;수에&amp;nbsp;따라&amp;nbsp;요금이&amp;nbsp;부과되기 때문에 Milvus는&amp;nbsp;성능&amp;nbsp;향상&amp;nbsp;및&amp;nbsp;비용&amp;nbsp;절감을&amp;nbsp;위해&amp;nbsp;메모리&amp;nbsp;또는&amp;nbsp;SSD&amp;nbsp;기반&amp;nbsp;캐시&amp;nbsp;풀에&amp;nbsp;콜드-핫&amp;nbsp;데이터&amp;nbsp;분리를&amp;nbsp;구현할&amp;nbsp;계획입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Log&amp;nbsp;broker&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Log&amp;nbsp;broker는 playback을 지원하는 Pub-Sub 시스템입니다. 또한 Worker nodes가 시스템 장애에서 복구될 때 증분 데이터의 무결성을 보장합니다. Milvus 클러스터는 Pulsar를 로그 브로커로 사용하고, Milvus 단독형은 RocksDB를 Log broker로 사용합니다. 또한, Log&amp;nbsp;broker는 Kafka와 같은 스트리밍 데이터 스토리지 플랫폼으로 쉽게 대체될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus는 Log&amp;nbsp;broker를 중심으로 구축되었으며 &quot;log as data&quot; 원칙을 따릅니다. 즉, Milvus는 물리적 테이블을 유지하지 않고 로깅 지속성 및 스냅샷 로그를 통해 데이터 안정성을 보장합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rndZ9/btsNqpLIYwB/KbUI8dn11vKoiUo0sRrvu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rndZ9/btsNqpLIYwB/KbUI8dn11vKoiUo0sRrvu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rndZ9/btsNqpLIYwB/KbUI8dn11vKoiUo0sRrvu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrndZ9%2FbtsNqpLIYwB%2FKbUI8dn11vKoiUo0sRrvu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;426&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Log&amp;nbsp;broker는 Milvus의 핵심입니다. 고유한 Pub-Sub 메커니즘을 통해 데이터 지속성과 읽기-쓰기 분리를 담당합니다. 위의 그림은 메커니즘을 단순화하여 나타낸 것으로, 시스템은 로그 시퀀스를 유지 관리하는 Log broker와 Log subscriber의 두 가지 역할로 나뉩니다. 전자는 컬렉션 상태를 변경하는 모든 작업을 기록하고, 후자는 로그 시퀀스를 구독하여 로컬 데이터를 업데이트하고 읽기 전용 복사본 형태로 서비스를 제공합니다. Pub-Sub&amp;nbsp;메커니즘은&amp;nbsp;변경&amp;nbsp;데이터&amp;nbsp;캡처(CDC)&amp;nbsp;및&amp;nbsp;글로벌&amp;nbsp;분산&amp;nbsp;배포&amp;nbsp;측면에서&amp;nbsp;시스템&amp;nbsp;확장성을&amp;nbsp;위한&amp;nbsp;여지도&amp;nbsp;제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q2KDR/btsNro1awdX/uZK2IuUEnhC25m7sdj47KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q2KDR/btsNro1awdX/uZK2IuUEnhC25m7sdj47KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q2KDR/btsNro1awdX/uZK2IuUEnhC25m7sdj47KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ2KDR%2FbtsNro1awdX%2FuZK2IuUEnhC25m7sdj47KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;654&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Data Processing&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Data Insertion&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus에서는 각 컬렉션에 대해 여러 개의 샤드를 지정할 수 있으며, 각 샤드는 가상 채널(vchannel)에 해당합니다. 다음&amp;nbsp;그림에서&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있듯이&amp;nbsp;Milvus는&amp;nbsp;로그&amp;nbsp;브로커의&amp;nbsp;각&amp;nbsp;vchannel에&amp;nbsp;물리적&amp;nbsp;채널(pchannel)을&amp;nbsp;할당합니다.&amp;nbsp;들어오는&amp;nbsp;모든&amp;nbsp;삽입/삭제&amp;nbsp;요청은&amp;nbsp;기본&amp;nbsp;키의&amp;nbsp;해시&amp;nbsp;값을&amp;nbsp;기반으로&amp;nbsp;샤드로&amp;nbsp;라우팅됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vRcR8/btsNrWQB6jx/Nysqa1IWrMQ1gFi7OTPSD1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vRcR8/btsNrWQB6jx/Nysqa1IWrMQ1gFi7OTPSD1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vRcR8/btsNrWQB6jx/Nysqa1IWrMQ1gFi7OTPSD1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvRcR8%2FbtsNrWQB6jx%2FNysqa1IWrMQ1gFi7OTPSD1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;604&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus에는 복잡한  transaction이 없기 때문에 DML 요청의 검증은 프록시로 진행됩니다. 프록시는 루트 코디네이터와 함께 배치되는 타이밍 모듈인 TSO(타임스탬프 오라클)에서 각 삽입/삭제 요청에 대한 타임스탬프를 요청합니다. 이전 타임스탬프가 새 타임스탬프로 덮어쓰여지면서 타임스탬프는 처리되는 데이터 요청의 순서를 결정하는 데 사용됩니다. 프록시는 Data coord에서 일괄적으로 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;entity 세그먼트와 primary key를 포함한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;정보를 검색하여 전반적인 처리량을 높이고 중앙 노드에 과도한 부담을 주지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DML(데이터&amp;nbsp;조작&amp;nbsp;언어)&amp;nbsp;작업과&amp;nbsp;DDL(데이터&amp;nbsp;정의&amp;nbsp;언어)&amp;nbsp;작업&amp;nbsp;모두&amp;nbsp;로그&amp;nbsp;시퀀스에&amp;nbsp;기록되지만,&amp;nbsp;DDL&amp;nbsp;작업은&amp;nbsp;발생&amp;nbsp;빈도가&amp;nbsp;낮기&amp;nbsp;때문에&amp;nbsp;하나의&amp;nbsp;채널만&amp;nbsp;할당됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pQZ6f/btsNsmHMA6Z/evK1uW5ktIMwm3VmsTlVk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pQZ6f/btsNsmHMA6Z/evK1uW5ktIMwm3VmsTlVk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pQZ6f/btsNsmHMA6Z/evK1uW5ktIMwm3VmsTlVk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpQZ6f%2FbtsNsmHMA6Z%2FevK1uW5ktIMwm3VmsTlVk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;741&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;741&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vchannel은 기본 로그 브로커 노드에서 유지됩니다. 각 채널은 물리적으로 나눌 수 없으며, 어떤 노드에서든 접근 가능하지만 동시에 오직 하나의 노드에서만 사용할 수 있습니다. 데이터 ingestion 속도가 병목에 도달하면 두 가지 사항을 고려하세요. 로그 브로커 노드가 과부하되어 확장이 필요한지 여부와 각 노드의 부하 균형을 보장할 만큼 충분한 샤드가 있는지 여부입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Juzbn/btsNpwLqkPV/wBzaNMDjOKPN83OL2pKqYK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Juzbn/btsNpwLqkPV/wBzaNMDjOKPN83OL2pKqYK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Juzbn/btsNpwLqkPV/wBzaNMDjOKPN83OL2pKqYK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJuzbn%2FbtsNpwLqkPV%2FwBzaNMDjOKPN83OL2pKqYK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;468&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 다이어그램은 로그 시퀀스를 작성하는 프로세스에 관련된 네 가지 구성 요소, 즉 프록시, 로그 브로커, 데이터 노드, 개체 스토리지를 요약한 것입니다. 이 프로세스에는 DML 요청 검증, 로그 시퀀스의 Pub-Sub, 스트리밍 로그에서 로그 스냅샷으로의 변환, 로그 스냅샷의 &lt;span style=&quot;background-color: #ffffff; color: #252525; text-align: start;&quot;&gt;persistence&lt;/span&gt;의 4가지 작업이 포함됩니다. 4가지 작업은 서로 분리되어 각 작업이 해당 노드 유형에서 처리되도록 합니다. 동일한&amp;nbsp;유형의&amp;nbsp;노드는&amp;nbsp;동일하게&amp;nbsp;만들어지고&amp;nbsp;다양한&amp;nbsp;데이터&amp;nbsp;부하,&amp;nbsp;특히&amp;nbsp;대규모이고&amp;nbsp;변동성이&amp;nbsp;큰&amp;nbsp;스트리밍&amp;nbsp;데이터를&amp;nbsp;수용하기&amp;nbsp;위해&amp;nbsp;탄력적이고&amp;nbsp;독립적으로&amp;nbsp;확장될&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Index building&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스&amp;nbsp;구축은&amp;nbsp;인덱스&amp;nbsp;노드를&amp;nbsp;통해&amp;nbsp;수행됩니다.&amp;nbsp;데이터&amp;nbsp;업데이트를&amp;nbsp;위한&amp;nbsp;빈번한&amp;nbsp;인덱스&amp;nbsp;구축을&amp;nbsp;피하기&amp;nbsp;위해&amp;nbsp;Milvus에서는&amp;nbsp;컬렉션을&amp;nbsp;세그먼트로&amp;nbsp;세분화하고&amp;nbsp;각&amp;nbsp;세그먼트에&amp;nbsp;고유한&amp;nbsp;인덱스를&amp;nbsp;부여합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;871&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zXDjQ/btsNr8bn80T/QYh8rPGc3hizrENc2Pksp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zXDjQ/btsNr8bn80T/QYh8rPGc3hizrENc2Pksp0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zXDjQ/btsNr8bn80T/QYh8rPGc3hizrENc2Pksp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzXDjQ%2FbtsNr8bn80T%2FQYh8rPGc3hizrENc2Pksp0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;871&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;871&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus는&amp;nbsp;각&amp;nbsp;벡터&amp;nbsp;필드,&amp;nbsp;스칼라&amp;nbsp;필드,&amp;nbsp;그리고&amp;nbsp;프라이머리&amp;nbsp;필드에&amp;nbsp;대해&amp;nbsp;인덱스를&amp;nbsp;생성하는&amp;nbsp;것을&amp;nbsp;지원합니다.&amp;nbsp;인덱스를&amp;nbsp;생성하는&amp;nbsp;과정에서&amp;nbsp;입력과&amp;nbsp;출력&amp;nbsp;모두&amp;nbsp;오브젝트&amp;nbsp;스토리지를&amp;nbsp;사용합니다:&amp;nbsp;인덱스&amp;nbsp;노드는&amp;nbsp;세그먼트(오브젝트&amp;nbsp;스토리지에&amp;nbsp;있음)로부터&amp;nbsp;인덱싱할&amp;nbsp;로그&amp;nbsp;스냅샷을&amp;nbsp;메모리로&amp;nbsp;로드하고,&amp;nbsp;관련된&amp;nbsp;데이터와&amp;nbsp;메타데이터를&amp;nbsp;역직렬화하여&amp;nbsp;인덱스를&amp;nbsp;생성한&amp;nbsp;후,&amp;nbsp;인덱스&amp;nbsp;생성이&amp;nbsp;완료되면&amp;nbsp;이를&amp;nbsp;직렬화하여&amp;nbsp;다시&amp;nbsp;오브젝트&amp;nbsp;스토리지에&amp;nbsp;저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스&amp;nbsp;구축은&amp;nbsp;주로&amp;nbsp;벡터&amp;nbsp;및&amp;nbsp;행렬&amp;nbsp;연산을&amp;nbsp;포함하므로&amp;nbsp;연산량과&amp;nbsp;메모리&amp;nbsp;사용량이&amp;nbsp;많은&amp;nbsp;작업입니다.&amp;nbsp;벡터는&amp;nbsp;고차원&amp;nbsp;특성&amp;nbsp;때문에&amp;nbsp;전통적인&amp;nbsp;트리&amp;nbsp;기반&amp;nbsp;인덱스로는&amp;nbsp;효율적으로&amp;nbsp;인덱싱할&amp;nbsp;수&amp;nbsp;없지만,&amp;nbsp;클러스터&amp;nbsp;기반&amp;nbsp;또는&amp;nbsp;그래프&amp;nbsp;기반&amp;nbsp;인덱스와&amp;nbsp;같은&amp;nbsp;이&amp;nbsp;분야에서&amp;nbsp;보다&amp;nbsp;성숙한&amp;nbsp;기술을&amp;nbsp;통해&amp;nbsp;인덱싱할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;인덱스의&amp;nbsp;유형과&amp;nbsp;관계없이,&amp;nbsp;인덱스&amp;nbsp;구축은&amp;nbsp;K-means나&amp;nbsp;그래프&amp;nbsp;탐색과&amp;nbsp;같은&amp;nbsp;대규모&amp;nbsp;벡터에&amp;nbsp;대한&amp;nbsp;반복적인&amp;nbsp;계산을&amp;nbsp;대량으로&amp;nbsp;수행해야&amp;nbsp;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스칼라&amp;nbsp;데이터의&amp;nbsp;인덱싱과는&amp;nbsp;달리,&amp;nbsp;벡터&amp;nbsp;인덱스를&amp;nbsp;구축할&amp;nbsp;때는&amp;nbsp;SIMD(single&amp;nbsp;instruction,&amp;nbsp;multiple&amp;nbsp;data)&amp;nbsp;가속을&amp;nbsp;최대한&amp;nbsp;활용해야&amp;nbsp;합니다.&amp;nbsp;Milvus는&amp;nbsp;SSE,&amp;nbsp;AVX2,&amp;nbsp;AVX512와&amp;nbsp;같은&amp;nbsp;SIMD&amp;nbsp;명령어&amp;nbsp;세트를&amp;nbsp;기본적으로&amp;nbsp;지원합니다.&amp;nbsp;벡터&amp;nbsp;인덱스&amp;nbsp;구축은&amp;nbsp;&quot;중단(hiccup)&quot;&amp;nbsp;현상과&amp;nbsp;자원&amp;nbsp;집약적인&amp;nbsp;특성을&amp;nbsp;가지기&amp;nbsp;때문에,&amp;nbsp;Milvus에서는&amp;nbsp;경제적인&amp;nbsp;관점에서&amp;nbsp;탄력성(elasticity)이&amp;nbsp;매우&amp;nbsp;중요합니다.&amp;nbsp;향후&amp;nbsp;Milvus&amp;nbsp;릴리스에서는&amp;nbsp;관련&amp;nbsp;비용을&amp;nbsp;줄이기&amp;nbsp;위해&amp;nbsp;이기종&amp;nbsp;컴퓨팅(heterogeneous&amp;nbsp;computing)&amp;nbsp;및&amp;nbsp;서버리스&amp;nbsp;컴퓨팅(serverless&amp;nbsp;computation)에&amp;nbsp;대한&amp;nbsp;탐구가&amp;nbsp;계속될&amp;nbsp;예정입니다.&lt;br /&gt;&lt;br /&gt;또한&amp;nbsp;Milvus는&amp;nbsp;스칼라&amp;nbsp;필터링(scalar&amp;nbsp;filtering)과&amp;nbsp;기본&amp;nbsp;필드(primary&amp;nbsp;field)&amp;nbsp;질의도&amp;nbsp;지원합니다.&amp;nbsp;Milvus에는&amp;nbsp;Bloom&amp;nbsp;필터&amp;nbsp;인덱스,&amp;nbsp;해시&amp;nbsp;인덱스,&amp;nbsp;트리&amp;nbsp;기반&amp;nbsp;인덱스,&amp;nbsp;역색인(inverted&amp;nbsp;index)&amp;nbsp;등&amp;nbsp;쿼리&amp;nbsp;효율을&amp;nbsp;향상시키기&amp;nbsp;위한&amp;nbsp;내장&amp;nbsp;인덱스가&amp;nbsp;있으며,&amp;nbsp;향후에는&amp;nbsp;비트맵&amp;nbsp;인덱스(bitmap&amp;nbsp;indexes)나&amp;nbsp;러프&amp;nbsp;인덱스(rough&amp;nbsp;indexes)와&amp;nbsp;같은&amp;nbsp;외부&amp;nbsp;인덱스도&amp;nbsp;도입할&amp;nbsp;계획입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Data query&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터&amp;nbsp;쿼리란,&amp;nbsp;지정된&amp;nbsp;컬렉션에서&amp;nbsp;대상&amp;nbsp;벡터와&amp;nbsp;가장&amp;nbsp;가까운&amp;nbsp;k개의&amp;nbsp;벡터를&amp;nbsp;검색하거나,&amp;nbsp;대상&amp;nbsp;벡터로부터&amp;nbsp;지정된&amp;nbsp;거리&amp;nbsp;범위&amp;nbsp;내에&amp;nbsp;있는&amp;nbsp;모든&amp;nbsp;벡터를&amp;nbsp;검색하는&amp;nbsp;과정을&amp;nbsp;말합니다.&amp;nbsp;벡터는&amp;nbsp;해당하는&amp;nbsp;기본&amp;nbsp;키(primary&amp;nbsp;key)&amp;nbsp;및&amp;nbsp;필드&amp;nbsp;정보와&amp;nbsp;함께&amp;nbsp;반환됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b00azE/btsNt4gzOUs/PajkEocbRssOwc9ff6Wwbk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b00azE/btsNt4gzOUs/PajkEocbRssOwc9ff6Wwbk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b00azE/btsNt4gzOUs/PajkEocbRssOwc9ff6Wwbk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb00azE%2FbtsNt4gzOUs%2FPajkEocbRssOwc9ff6Wwbk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;586&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Milvus에서 하나의 컬렉션은 여러 개의 세그먼트(segment)로 분할되며, 쿼리 노드(query node)는 세그먼트 단위로 인덱스를 로드합니다. 검색 요청이 도착하면, 해당 요청은 모든 쿼리 노드에 브로드캐스트되어 병렬 검색이 수행됩니다. 각 노드는 로컬 세그먼트를 필터링하고, 조건에 부합하는 벡터를 검색한 후, 결과를 취합하여 반환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 쿼리 과정에서 쿼리 노드들은 서로 독립적으로 작동합니다. 각 노드는 오직 두 가지 작업만 담당합니다: 쿼리 코디네이터(query coord)의 명령에 따라 세그먼트를 로드하거나 해제하는 일, 그리고 로컬 세그먼트 내에서 검색을 수행하는 일입니다. 프록시(proxy)는 각 쿼리 노드로부터 반환된 검색 결과를 취합하여 최종 결과를 클라이언트에게 전달합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NpRBN/btsNu3ncHwg/3AjBxEiIi5p5rS5kl6EcSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NpRBN/btsNu3ncHwg/3AjBxEiIi5p5rS5kl6EcSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NpRBN/btsNu3ncHwg/3AjBxEiIi5p5rS5kl6EcSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNpRBN%2FbtsNu3ncHwg%2F3AjBxEiIi5p5rS5kl6EcSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;666&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세그먼트는 두 가지 유형이 있습니다: 증분 데이터(incremental data)를 위한 growing 세그먼트와, 이력을 보존하는 sealed 세그먼트입니다. 쿼리 노드는 vchannel을 구독하여 최근 업데이트된 증분 데이터를 growing 세그먼트로 수신합니다. growing 세그먼트가 사전 정의된 임계값에 도달하면, data coord가 이를 sealed 상태로 전환하고 인덱스 구축이 시작됩니다. 이후, query coord가 주도하는 handoff 작업을 통해 증분 데이터가 이력 데이터로 전환됩니다. query coord는 메모리 사용량, CPU 부하, 세그먼트 수 등을 기준으로 sealed 세그먼트를 모든 쿼리 노드에 균등하게 분산시킵니다.&lt;/p&gt;</description>
      <category>AI/검색 시스템</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/115</guid>
      <comments>https://dytis.tistory.com/115#entry115comment</comments>
      <pubDate>Tue, 22 Apr 2025 11:32:05 +0900</pubDate>
    </item>
    <item>
      <title>Cursor에서 MCP (Model Context Protocol) 사용하기</title>
      <link>https://dytis.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor는 개발자들이 생산적으로 코드를 작성하고 협업할 수 있도록 돕는 강력한 AI 기반 코드 편집기입니다. 최근 Cursor가 MCP(Model Context Protocol)를 지원하면서, 사용자는 더욱 향상된 코드 작성 환경을 경험할 수 있게 되었습니다. 이번 글에서는 Cursor에서 MCP를 어떻게 설정하고 활용하는지 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP와 관련된 내용은 지난 블로그 글에서 다루었으니, 참고하시기 바랍니다!&lt;/p&gt;
&lt;figure id=&quot;og_1743609214125&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MCP(Model Context Protocol)이 뭐길래?&quot; data-og-description=&quot;인공지능(AI) 기술의 발전과 함께, AI 시스템이 외부 데이터와 효과적으로 연동되는 것이 점점 더 중요한 이슈로 떠오르고 있습니다. 기존에는 AI 모델이 내부적으로 훈련된 데이터만을 기반으로 &quot; data-og-host=&quot;dytis.tistory.com&quot; data-og-source-url=&quot;https://dytis.tistory.com/112&quot; data-og-url=&quot;https://dytis.tistory.com/112&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cb2601/hyYyUf0OQj/KfSduiyMBPvIVbitkwPruk/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/cYPvHa/hyYyUG4Las/kziNnxAntPEKs5IKkcp971/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/XX4mQ/hyYyHVhul6/jNKt0Lbp4h7cKLF9yc9MDK/img.png?width=1179&amp;amp;height=697&amp;amp;face=0_0_1179_697&quot;&gt;&lt;a href=&quot;https://dytis.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dytis.tistory.com/112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cb2601/hyYyUf0OQj/KfSduiyMBPvIVbitkwPruk/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/cYPvHa/hyYyUG4Las/kziNnxAntPEKs5IKkcp971/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/XX4mQ/hyYyHVhul6/jNKt0Lbp4h7cKLF9yc9MDK/img.png?width=1179&amp;amp;height=697&amp;amp;face=0_0_1179_697');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MCP(Model Context Protocol)이 뭐길래?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;인공지능(AI) 기술의 발전과 함께, AI 시스템이 외부 데이터와 효과적으로 연동되는 것이 점점 더 중요한 이슈로 떠오르고 있습니다. 기존에는 AI 모델이 내부적으로 훈련된 데이터만을 기반으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dytis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1743609220829&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MCP(Model Context Protocol)이 뭐길래? 실습편&quot; data-og-description=&quot;지난 포스트에서는 MCP(Model Context Protocol)이 무엇인지, 그리고 MCP가 최근 화제가 되는 이유에 대해서 다뤘습니다.해당 내용에 대해서 관심 있으신 분들은 지난 포스트 글을 참고해주시기 바랍니&quot; data-og-host=&quot;dytis.tistory.com&quot; data-og-source-url=&quot;https://dytis.tistory.com/113&quot; data-og-url=&quot;https://dytis.tistory.com/113&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/doago5/hyYA76i5wr/KPlnuixKeBvDX5EZ5xWW6K/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/w2RUy/hyYBcfu4AM/KHMwHUh8NtIrG4bQrPE7Jk/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/yS3B7/hyYBifHO0X/9vFmlRGICucjaCXU9hPaY0/img.png?width=1836&amp;amp;height=1752&amp;amp;face=0_0_1836_1752&quot;&gt;&lt;a href=&quot;https://dytis.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dytis.tistory.com/113&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/doago5/hyYA76i5wr/KPlnuixKeBvDX5EZ5xWW6K/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/w2RUy/hyYBcfu4AM/KHMwHUh8NtIrG4bQrPE7Jk/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/yS3B7/hyYBifHO0X/9vFmlRGICucjaCXU9hPaY0/img.png?width=1836&amp;amp;height=1752&amp;amp;face=0_0_1836_1752');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MCP(Model Context Protocol)이 뭐길래? 실습편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 포스트에서는 MCP(Model Context Protocol)이 무엇인지, 그리고 MCP가 최근 화제가 되는 이유에 대해서 다뤘습니다.해당 내용에 대해서 관심 있으신 분들은 지난 포스트 글을 참고해주시기 바랍니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dytis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Cursor에서&amp;nbsp;MCP&amp;nbsp;설정하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP를 사용하면 Cursor를 외부 시스템 및 데이터 소스에 연결할 수 있습니다. 즉, Cursor에게 여러분들의 프로젝트에서 코드 외의 프로젝트 구조를 알려줄 필요 없이 기존 도구 및 인프라와 통합할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MCP Server 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Desktop과 마찬가지로 Cursor도 mcpServers에 대한 configuration을 작성합니다. 이에 대한 인터페이스는 MCP에 의해 규격화되어서 모든 호스트 어플리케이션에서 동일한 내용으로 사용할 수 있습니다. 실행할 수 있는 MCP 서버도 Node.js나 python 스크립트를 실행하거나, SSE 서버에 연동하는 등의 다양한 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CLI Server - Node.js&lt;/p&gt;
&lt;pre id=&quot;code_1743609488558&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;server-name&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;mcp-server&quot;],
      &quot;env&quot;: {
        &quot;API_KEY&quot;: &quot;value&quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CLI Server - Python&lt;/p&gt;
&lt;pre id=&quot;code_1743609500178&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;server-name&quot;: {
      &quot;command&quot;: &quot;python&quot;,
      &quot;args&quot;: [&quot;mcp-server.py&quot;],
      &quot;env&quot;: {
        &quot;API_KEY&quot;: &quot;value&quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;SSE Server&lt;/p&gt;
&lt;pre id=&quot;code_1743609514810&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;server-name&quot;: {
      &quot;url&quot;: &quot;http://localhost:3000/sse&quot;,
      &quot;env&quot;: {
        &quot;API_KEY&quot;: &quot;value&quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor에서는 이러한 설정파일을 프로젝트별 / 전역의 두가지로 설정할 수 있도록 제공합니다. 프로젝트별 configuration은 프로젝트 폴더 내의 .cursor/mcp.json에 작성할 수 있습니다. 전역 설정은 \~/.cursor/mcp.json 파일에 작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습: MCP 서버 적용하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Naver OpenAPI&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 실습에 이어서 Cursor에도 Naver OpenAPI MCP를 적용해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/pfldy2850/py-mcp-naver&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1743609751528&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - pfldy2850/py-mcp-naver: python MCP NAVER&quot; data-og-description=&quot;python MCP NAVER. Contribute to pfldy2850/py-mcp-naver development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; data-og-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dusDvh/hyYxKEXdOb/EHvtaHjlJoLLLPTzOkLxw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/DlxCF/hyYyQxSGjv/WhgqBSK9Ae4YKnzHJsJd4K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dusDvh/hyYxKEXdOb/EHvtaHjlJoLLLPTzOkLxw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/DlxCF/hyYyQxSGjv/WhgqBSK9Ae4YKnzHJsJd4K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - pfldy2850/py-mcp-naver: python MCP NAVER&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;python MCP NAVER. Contribute to pfldy2850/py-mcp-naver development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 발급을 위한 사전작업은 지난 블로그글을 참고해주세요.&lt;/p&gt;
&lt;figure id=&quot;og_1743609784021&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MCP(Model Context Protocol)이 뭐길래? 실습편&quot; data-og-description=&quot;지난 포스트에서는 MCP(Model Context Protocol)이 무엇인지, 그리고 MCP가 최근 화제가 되는 이유에 대해서 다뤘습니다.해당 내용에 대해서 관심 있으신 분들은 지난 포스트 글을 참고해주시기 바랍니&quot; data-og-host=&quot;dytis.tistory.com&quot; data-og-source-url=&quot;https://dytis.tistory.com/113&quot; data-og-url=&quot;https://dytis.tistory.com/113&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/doago5/hyYA76i5wr/KPlnuixKeBvDX5EZ5xWW6K/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/w2RUy/hyYBcfu4AM/KHMwHUh8NtIrG4bQrPE7Jk/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/yS3B7/hyYBifHO0X/9vFmlRGICucjaCXU9hPaY0/img.png?width=1836&amp;amp;height=1752&amp;amp;face=0_0_1836_1752&quot;&gt;&lt;a href=&quot;https://dytis.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dytis.tistory.com/113&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/doago5/hyYA76i5wr/KPlnuixKeBvDX5EZ5xWW6K/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/w2RUy/hyYBcfu4AM/KHMwHUh8NtIrG4bQrPE7Jk/img.png?width=800&amp;amp;height=557&amp;amp;face=0_0_800_557,https://scrap.kakaocdn.net/dn/yS3B7/hyYBifHO0X/9vFmlRGICucjaCXU9hPaY0/img.png?width=1836&amp;amp;height=1752&amp;amp;face=0_0_1836_1752');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MCP(Model Context Protocol)이 뭐길래? 실습편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 포스트에서는 MCP(Model Context Protocol)이 무엇인지, 그리고 MCP가 최근 화제가 되는 이유에 대해서 다뤘습니다.해당 내용에 대해서 관심 있으신 분들은 지난 포스트 글을 참고해주시기 바랍니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dytis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작하기에 앞서, Cursor에 들어가 Cursor Settings를 열어봅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFhaEv/btsM5rKquOY/kKHVfxuYfSM5VB7bJsO7n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFhaEv/btsM5rKquOY/kKHVfxuYfSM5VB7bJsO7n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFhaEv/btsM5rKquOY/kKHVfxuYfSM5VB7bJsO7n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFhaEv%2FbtsM5rKquOY%2FkKHVfxuYfSM5VB7bJsO7n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 MCP Servers에 아무것도 등록이 되지 않은 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트에 작업이 많이 되어, PyPi로 쉽게 설치하여 사용할 수 있게 되었습니다. 먼저 mcp-naver를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1743609862028&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uv pip install mcp-naver&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지가 정상적으로 설치되었다면, mcp-naver 에서 제공하는 스크립트를 활용하여 cursor에 해당 mcp 서버를 등록합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1743609915758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uv run python -m mcp-naver.hosts.claude_desktop \
  -e NAVER_CLIENT_ID=&amp;lt;YOUR NAVER CLIENT ID&amp;gt; \
  -e NAVER_CLIENT_SECRET=&amp;lt;YOUR NAVER CLIENT SECRET&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 설치되었다면, 아래처럼 Cursor Settings에 Naver OpenAPI MCP 서버가 등록된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhQrxd/btsM6YfMnsP/Z9UFV2z6RtqGuz0ZkLahz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhQrxd/btsM6YfMnsP/Z9UFV2z6RtqGuz0ZkLahz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhQrxd/btsM6YfMnsP/Z9UFV2z6RtqGuz0ZkLahz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhQrxd%2FbtsM6YfMnsP%2FZ9UFV2z6RtqGuz0ZkLahz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1257&quot; height=&quot;904&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP Server에서 개별 MCP 서버에서 사용할 수 있는 Tools나 서버를 실행하기 위한 command를 확인할 수 있습니다. 우측 상단에서는 해당 MCP 서버를 사용하지 않도록 설정할 수 있고, 내용을 편집 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\~/.cursor/mcp.json 파일을 들어가보면, 위에서 소개해드린 mcpServers에 Naver OpenAPI라는 MCP 서버가 설정된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc3JY4/btsM5Zmohzo/2YoINkBWrubQtXt2dbIM8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc3JY4/btsM5Zmohzo/2YoINkBWrubQtXt2dbIM8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc3JY4/btsM5Zmohzo/2YoINkBWrubQtXt2dbIM8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc3JY4%2FbtsM5Zmohzo%2F2YoINkBWrubQtXt2dbIM8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제 Agent를 통해서 MCP를 실행해보겠습니다. 간단하게 오늘 날씨가 어떤지 물어보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmxb2/btsM6ghbYwG/0hxolzNvO8yWBEwSTvck9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmxb2/btsM6ghbYwG/0hxolzNvO8yWBEwSTvck9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmxb2/btsM6ghbYwG/0hxolzNvO8yWBEwSTvck9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frmxb2%2FbtsM6ghbYwG%2F0hxolzNvO8yWBEwSTvck9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Agent는 스크린샷처럼 오늘 날씨 어때? 라는 질문에 맞는 MCP 서버를 탐색하고, 직접 입력을 생성하여 전달하기 위한 준비를 합니다. Cursor에서는 command + enter를 눌러 Tool을 실행하도록 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IK0Qr/btsM43iHqEe/0NZZ7Ak3kkP7QyU3NS1ImK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IK0Qr/btsM43iHqEe/0NZZ7Ak3kkP7QyU3NS1ImK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IK0Qr/btsM43iHqEe/0NZZ7Ak3kkP7QyU3NS1ImK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIK0Qr%2FbtsM43iHqEe%2F0NZZ7Ak3kkP7QyU3NS1ImK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 질문에서는 Agent 스스로 네이버 블로그와 네이버 뉴스에 오늘 날씨와 관련된 내용을 검색해서 정보를 찾아왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾은 정보를 토대로 질문에 맞는 답변을 잘 생성한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZm3Id/btsM5svRdb0/3gO96F4hte6hqtsWkKQv40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZm3Id/btsM5svRdb0/3gO96F4hte6hqtsWkKQv40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZm3Id/btsM5svRdb0/3gO96F4hte6hqtsWkKQv40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZm3Id%2FbtsM5svRdb0%2F3gO96F4hte6hqtsWkKQv40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Yolo Mode&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yolo 모드를 활성화하면 Agent가 승인 없이도 MCP 도구를 자동으로 실행할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIjvDA/btsM5UZF4cm/rCKLosdOBtn4Br7ipY2U6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIjvDA/btsM5UZF4cm/rCKLosdOBtn4Br7ipY2U6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIjvDA/btsM5UZF4cm/rCKLosdOBtn4Br7ipY2U6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIjvDA%2FbtsM5UZF4cm%2FrCKLosdOBtn4Br7ipY2U6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에서는 Yolo Mode라고 되어 있는데, 제 Cursor 앱에서는 Enable auto-run mode로 설정되어 있습니다. 도구 호출에 대한 승인 없이 자동으로 호출하게 하려면 해당 설정을 On 하면 됩니다. 설정을 활성화하고 실행하면 아래처럼 도구가 바로 수행됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/egkVbb/btsM5A8etwY/g07QIzLEbTUQkGnOJxjrr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/egkVbb/btsM5A8etwY/g07QIzLEbTUQkGnOJxjrr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/egkVbb/btsM5A8etwY/g07QIzLEbTUQkGnOJxjrr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FegkVbb%2FbtsM5A8etwY%2Fg07QIzLEbTUQkGnOJxjrr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;948&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Cursor MCP의 한계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Tool Quantity&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 MCP 서버 또는 여러 MCP 서버를 활성화한 사용자는 Cursor가 사용할 수 있는 도구가 많을 수 있습니다. 현재는 Cursor가 첫 40개의 도구 목록만 Agent에 전달합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Remote Development&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; Cursor는 stdio를 통해 직접 또는 sse를 사용한 네트워크를 통해 로컬 머신에서 MCP 서버와 직접 통신합니다. 따라서 MCP 서버는 SSH 또는 다른 개발 환경을 통해 Cursor에 액세스할 때 제대로 작동하지 않을 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MCP Resources&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP 서버는 도구와 리소스라는 두 가지 주요 기능을 제공합니다.  Tools는 현재 Cursor에서 사용할 수 있지만 Cursor에서는 아직 Resources가 지원되지 않습니다. 향후 릴리스에서 리소스 지원을 추가하기를 바라고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;맺음 말&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 인기있는 AI 기반 코드 편집기인 Cursor에 MCP 서버를 설치하여 사용하는 법에 대해서 정리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP 자체가 규격을 말하는 것이기 때문에 mcpServers와 같은 공통 설정에 대한 약속이 있어서, Claude Desktop이나 Cursor와 같은 여러 호스트 어플리케이션에 MCP를 손쉽게 적용해볼 수 있는 것이 개인적으로 굉장히 좋았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 MCP에 대한 관심과 함께 관련 생태계가 점점 커지고 있습니다. 뿐만 아니라 PulseMCP 등의 여러 MCP를 탐색하여 활용하고자 하는 관심사도 많아지고 있는 것 같습니다. 앞으로 더 다양한 MCP 서버들이 개발되어 보다 풍부하고 강력한 에이전트 경험을 할 수 있는 시대가 오기를 기대합니다.&lt;/p&gt;</description>
      <category>AI/어플리케이션 개발</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/114</guid>
      <comments>https://dytis.tistory.com/114#entry114comment</comments>
      <pubDate>Thu, 3 Apr 2025 01:17:06 +0900</pubDate>
    </item>
    <item>
      <title>MCP(Model Context Protocol)이 뭐길래? 실습편</title>
      <link>https://dytis.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 포스트에서는 MCP(Model Context Protocol)이 무엇인지, 그리고 MCP가 최근 화제가 되는 이유에 대해서 다뤘습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용에 대해서 관심 있으신 분들은 지난 포스트 글을 참고해주시기 바랍니다.&lt;/p&gt;
&lt;figure id=&quot;og_1742481751757&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;MCP(Model Context Protocol)이 뭐길래?&quot; data-og-description=&quot;인공지능(AI) 기술의 발전과 함께, AI 시스템이 외부 데이터와 효과적으로 연동되는 것이 점점 더 중요한 이슈로 떠오르고 있습니다. 기존에는 AI 모델이 내부적으로 훈련된 데이터만을 기반으로 &quot; data-og-host=&quot;dytis.tistory.com&quot; data-og-source-url=&quot;https://dytis.tistory.com/112&quot; data-og-url=&quot;https://dytis.tistory.com/112&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WRwCB/hyYugv2z3D/t6vYivdJoK4veGDDr5kmc0/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/y6uRf/hyYunvazkX/E529U0dzwxJk5KuyYgMnJk/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/bLxDqF/hyYvh85F01/XFoKVYOhKK4DfjkdCnIv71/img.png?width=1179&amp;amp;height=697&amp;amp;face=0_0_1179_697&quot;&gt;&lt;a href=&quot;https://dytis.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dytis.tistory.com/112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WRwCB/hyYugv2z3D/t6vYivdJoK4veGDDr5kmc0/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/y6uRf/hyYunvazkX/E529U0dzwxJk5KuyYgMnJk/img.png?width=800&amp;amp;height=472&amp;amp;face=0_0_800_472,https://scrap.kakaocdn.net/dn/bLxDqF/hyYvh85F01/XFoKVYOhKK4DfjkdCnIv71/img.png?width=1179&amp;amp;height=697&amp;amp;face=0_0_1179_697');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MCP(Model Context Protocol)이 뭐길래?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;인공지능(AI) 기술의 발전과 함께, AI 시스템이 외부 데이터와 효과적으로 연동되는 것이 점점 더 중요한 이슈로 떠오르고 있습니다. 기존에는 AI 모델이 내부적으로 훈련된 데이터만을 기반으로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dytis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 그럼 MCP는 어떻게 활용할 수 있는건데?를 위하여, 간단한 실습을 하고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude desktop에 Naver 검색 능력 입히기를 주제로 실습해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Claude desktop 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude 데스크톱은 Claude AI 챗봇의 기능을 사용자의 컴퓨터로 직접 제공하는 Windows 및 macOS 전용 애플리케이션으로, 워크플로와의 원활한 통합과 보다 빠르고 집중적인 상호작용을 가능하게 해줍니다. (아직은 베타로 제공중입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude 데스크톱은 아래 링크에서 다운받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://claude.ai/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://claude.ai/download&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742481936073&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Claude&quot; data-og-description=&quot;Download Claude for your desktop or mobile device.&quot; data-og-host=&quot;claude.ai&quot; data-og-source-url=&quot;https://claude.ai/download&quot; data-og-url=&quot;https://claude.ai/download&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MAhlW/hyYuj7gM4s/KQ7NPBW8ScAjkiC0COQS0k/img.png?width=1138&amp;amp;height=640&amp;amp;face=0_0_1138_640,https://scrap.kakaocdn.net/dn/MAhlW/hyYuj7gM4s/KQ7NPBW8ScAjkiC0COQS0k/img.png?width=1138&amp;amp;height=640&amp;amp;face=0_0_1138_640&quot;&gt;&lt;a href=&quot;https://claude.ai/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://claude.ai/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MAhlW/hyYuj7gM4s/KQ7NPBW8ScAjkiC0COQS0k/img.png?width=1138&amp;amp;height=640&amp;amp;face=0_0_1138_640,https://scrap.kakaocdn.net/dn/MAhlW/hyYuj7gM4s/KQ7NPBW8ScAjkiC0COQS0k/img.png?width=1138&amp;amp;height=640&amp;amp;face=0_0_1138_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download Claude&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Claude for your desktop or mobile device.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;claude.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱을 다운받은 후, 구글 계정 또는 본인의 계정을 사용해서 로그인을 하면, 아래처럼 Chat 인터페이스를 기본으로 하는 간단한 claude app을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Inb9h/btsMSor4y9T/OU4qakBHUUr8TYmlGbkI4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Inb9h/btsMSor4y9T/OU4qakBHUUr8TYmlGbkI4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Inb9h/btsMSor4y9T/OU4qakBHUUr8TYmlGbkI4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FInb9h%2FbtsMSor4y9T%2FOU4qakBHUUr8TYmlGbkI4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1237&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 여기서 기본적인 claude app의 성능을 테스트해보기 위하여, &lt;b&gt;Naver OpenAPI를 사용해서 영등포구청 맛집을 찾아줘&lt;/b&gt;라는 질문을 던져보면 다음과 같은 답변을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHByar/btsMSaOdSLF/89UekHCe6KHBpvqpuYaTZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHByar/btsMSaOdSLF/89UekHCe6KHBpvqpuYaTZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHByar/btsMSaOdSLF/89UekHCe6KHBpvqpuYaTZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHByar%2FbtsMSaOdSLF%2F89UekHCe6KHBpvqpuYaTZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1237&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;죄송합니다만, 저는 Naver OpenAPI에 직접 접근하거나 실시간으로 맛집 정보를 검색할 수 있는 기능이 없습니다. 제 지식은 2024년 10월까지의 정보로 제한되어 있으며, 현재 외부 API나 인터넷에 연결할 수 없습니다.&lt;br /&gt;&lt;br /&gt;영등포구청 주변 맛집을 찾으시려면 다음과 같은 방법을 이용해보시길 권장드립니다:&lt;br /&gt;&lt;br /&gt;1. 네이버 지도 앱이나 웹사이트에서 직접 &quot;영등포구청 맛집&quot; 검색&lt;br /&gt;2. 카카오맵, 구글맵 등의 지도 서비스 이용&lt;br /&gt;3. 망고플레이트, 다이닝코드와 같은 맛집 추천 앱 사용&lt;br /&gt;4. 네이버 블로그나 카페에서 최근 영등포구청 맛집 리뷰 검색 &lt;br /&gt;&lt;br /&gt;혹시 Naver OpenAPI를 직접 활용하는 방법에 대해 알고 싶으시다면, 제가 API 연동 방법이나 코드 예시를 안내해드릴 수 있습니다. 원하시는 정보가 있으면 말씀해주세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 여기서 이제 우리의 claude app에게 Naver 검색 기능을 주입해봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Develop MCP Server (FastMCP)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 포스트에서도 공유드렸듯이 python에서는 fastmcp라는 라이브러리를 통해서 MCP Server를 쉽게 구축할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/jlowin/fastmcp&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/jlowin/fastmcp&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742482334091&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &quot; data-og-description=&quot;The fast, Pythonic way to build Model Context Protocol servers   - GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jlowin/fastmcp&quot; data-og-url=&quot;https://github.com/jlowin/fastmcp&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/jlowin/fastmcp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jlowin/fastmcp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The fast, Pythonic way to build Model Context Protocol servers   - GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 FastMCP 서버를 초기화하고, 그 다음에는 필요한 엔티티에 데코레이터를 달아주는 방식으로 구현되어 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742482390519&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# demo.py

from fastmcp import FastMCP


mcp = FastMCP(&quot;Demo  &quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, 구현상에서의 MCP는 3가지의 주요한 구성요소가 있습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리소스 (Resource)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리소스는 AI 모델에게 필요한 정보와 컨텍스트를 제공합니다. REST&amp;nbsp;API의&amp;nbsp;GET&amp;nbsp;엔드포인트와&amp;nbsp;유사합니다.&amp;nbsp;데이터를&amp;nbsp;제공하지만&amp;nbsp;상당한&amp;nbsp;계산을&amp;nbsp;수행하거나&amp;nbsp;부작용이&amp;nbsp;있어서는&amp;nbsp;안&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) File contents, Database schemas, API responses, System&amp;nbsp;information&lt;/p&gt;
&lt;pre id=&quot;code_1742482545714&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@mcp.resource(&quot;config://app&quot;)
def get_config() -&amp;gt; str:
    &quot;&quot;&quot;Static configuration data&quot;&quot;&quot;
    return &quot;App configuration here&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적으로 인자 전달:&lt;/p&gt;
&lt;pre id=&quot;code_1742482554017&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@mcp.resource(&quot;users://{user_id}/profile&quot;)
def get_user_profile(user_id: str) -&amp;gt; str:
    &quot;&quot;&quot;Dynamic user data&quot;&quot;&quot;
    return f&quot;Profile data for user {user_id}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도구 (Tool)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도구는 AI 모델이 외부 시스템에서 작업을 수행할 수 있게 합니다. 리소스와 달리 도구는 계산을 수행하고  side effect가 있을 것으로 예상됩니다. REST API의 POST 엔드포인트와 유사합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742482594919&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@mcp.tool()
def calculate_bmi(weight_kg: float, height_m: float) -&amp;gt; float:
    &quot;&quot;&quot;Calculate BMI given weight in kg and height in meters&quot;&quot;&quot;
    return weight_kg / (height_m ** 2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http 요청 예시)&lt;/p&gt;
&lt;pre id=&quot;code_1742482656716&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import httpx

@mcp.tool()
async def fetch_weather(city: str) -&amp;gt; str:
    &quot;&quot;&quot;Fetch current weather for a city&quot;&quot;&quot;
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f&quot;https://api.weather.com/{city}&quot;
        )
        return response.text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 입력 처리 예시)&lt;/p&gt;
&lt;pre id=&quot;code_1742482672623&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from pydantic import BaseModel, Field
from typing import Annotated

class ShrimpTank(BaseModel):
    class Shrimp(BaseModel):
        name: Annotated[str, Field(max_length=10)]

    shrimp: list[Shrimp]

@mcp.tool()
def name_shrimp(
    tank: ShrimpTank,
    # You can use pydantic Field in function signatures for validation.
    extra_names: Annotated[list[str], Field(max_length=10)],
) -&amp;gt; list[str]:
    &quot;&quot;&quot;List all shrimp names in the tank&quot;&quot;&quot;
    return [shrimp.name for shrimp in tank.shrimp] + extra_names&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프롬프트 (Prompt)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트는 AI 모델이 리소스와 도구를 활용하여 일관되고 유용한 응답을 생성하도록 안내합니다. 프롬프트는 &lt;span style=&quot;background-color: #ffffff; color: #252525; text-align: start;&quot;&gt;재사용 가능한 템플릿이며, 이는 서버에 인코딩된 &quot;모범 사례&quot;와 같습니다. 프롬프트는 문자열만큼 간단할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1742482708534&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@mcp.prompt()
def review_code(code: str) -&amp;gt; str:
    return f&quot;Please review this code:\n\n{code}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1742482714924&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastmcp.prompts.base import UserMessage, AssistantMessage

@mcp.prompt()
def debug_error(error: str) -&amp;gt; list[Message]:
    return [
        UserMessage(&quot;I'm seeing this error:&quot;),
        UserMessage(error),
        AssistantMessage(&quot;I'll help debug that. What have you tried so far?&quot;)
    ]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FastMCP에서는 이미지나 Context에 대한 처리도 가능합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Image&lt;/h4&gt;
&lt;pre id=&quot;code_1742482753911&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastmcp import FastMCP, Image
from PIL import Image as PILImage

@mcp.tool()
def create_thumbnail(image_path: str) -&amp;gt; Image:
    &quot;&quot;&quot;Create a thumbnail from an image&quot;&quot;&quot;
    img = PILImage.open(image_path)
    img.thumbnail((100, 100))
    
    # FastMCP automatically handles conversion and MIME types
    return Image(data=img.tobytes(), format=&quot;png&quot;)

@mcp.tool()
def load_image(path: str) -&amp;gt; Image:
    &quot;&quot;&quot;Load an image from disk&quot;&quot;&quot;
    # FastMCP handles reading and format detection
    return Image(path=path)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Context&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #252525; text-align: start;&quot;&gt;Context 객체는 도구와 리소스에 MCP 기능에 대한 액세스를 제공합니다. 이를 사용하려면 fastmcp.Context로 주석이 달린 매개변수를 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1742482778357&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastmcp import FastMCP, Context

@mcp.tool()
async def long_task(files: list[str], ctx: Context) -&amp;gt; str:
    &quot;&quot;&quot;Process multiple files with progress tracking&quot;&quot;&quot;
    for i, file in enumerate(files):
        ctx.info(f&quot;Processing {file}&quot;)
        await ctx.report_progress(i, len(files))
        
        # Read another resource if needed
        data = await ctx.read_resource(f&quot;file://{file}&quot;)
        
    return &quot;Processing complete&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SQLite Explorer 예시&lt;/h3&gt;
&lt;pre id=&quot;code_1742482813998&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastmcp import FastMCP
import sqlite3

mcp = FastMCP(&quot;SQLite Explorer&quot;)

@mcp.resource(&quot;schema://main&quot;)
def get_schema() -&amp;gt; str:
    &quot;&quot;&quot;Provide the database schema as a resource&quot;&quot;&quot;
    conn = sqlite3.connect(&quot;database.db&quot;)
    schema = conn.execute(
        &quot;SELECT sql FROM sqlite_master WHERE type='table'&quot;
    ).fetchall()
    return &quot;\n&quot;.join(sql[0] for sql in schema if sql[0])

@mcp.tool()
def query_data(sql: str) -&amp;gt; str:
    &quot;&quot;&quot;Execute SQL queries safely&quot;&quot;&quot;
    conn = sqlite3.connect(&quot;database.db&quot;)
    try:
        result = conn.execute(sql).fetchall()
        return &quot;\n&quot;.join(str(row) for row in result)
    except Exception as e:
        return f&quot;Error: {str(e)}&quot;

@mcp.prompt()
def analyze_table(table: str) -&amp;gt; str:
    &quot;&quot;&quot;Create a prompt template for analyzing tables&quot;&quot;&quot;
    return f&quot;&quot;&quot;Please analyze this database table:
Table: {table}
Schema: 
{get_schema()}

What insights can you provide about the structure and relationships?&quot;&quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;날씨 도구 예시&lt;/h3&gt;
&lt;pre id=&quot;code_1742520951914&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from mcp.server.fastmcp import FastMCP

# MCP 서버 초기화
mcp = FastMCP(&quot;weather-service&quot;)

@mcp.resource()
async def get_locations(self) -&amp;gt; list:
    &quot;&quot;&quot;사용자가 자주 검색하는 위치 목록을 반환합니다&quot;&quot;&quot;
    return [&quot;Seoul&quot;, &quot;New York&quot;, &quot;London&quot;, &quot;Tokyo&quot;]

@mcp.tool()
async def get_weather(self, location: str) -&amp;gt; dict:
    &quot;&quot;&quot;특정 위치의 날씨 정보를 가져옵니다&quot;&quot;&quot;
    api_key = &quot;your_api_key&quot;
    url = f&quot;https://api.weather.com/v1/location/{location}?apiKey={api_key}&quot;
    async with httpx.AsyncClient()  as client:
        response = await client.get(url)
        return response.json()

@mcp.tool()
async def save_favorite_location(self, location: str) -&amp;gt; bool:
    &quot;&quot;&quot;사용자의 즐겨찾는 위치를 저장합니다&quot;&quot;&quot;
    # 데이터베이스에 저장하는 로직
    return True

@mcp.prompt(&quot;weather_forecast&quot;)
def weather_forecast_prompt(location: str, forecast: dict) -&amp;gt; str:
    return f&quot;&quot;&quot;
    {location}의 날씨 예보:
    
    현재 온도: {forecast['current']['temperature']}&amp;deg;C
    날씨 상태: {forecast['current']['condition']}
    
    오늘의 예상 최고/최저 기온: {forecast['today']['high']}&amp;deg;C / {forecast['today']['low']}&amp;deg;C
    
    내일 예보: {forecast['tomorrow']['condition']}, {forecast['tomorrow']['high']}&amp;deg;C / {forecast['tomorrow']['low']}&amp;deg;C
    &quot;&quot;&quot;

# MCP 서버 실행 - 지속적인 연결 유지
if __name__ == &quot;__main__&quot;:
    mcp.run(transport='stdio')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Naver OpenAPI MCP&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Naver OpenAPI&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 본론으로 돌아와서, Naver에서는 자사의 다양한 검색 서비스를 OpenAPI로 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;제공하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;a href=&quot;https://developers.naver.com/docs/common/openapiguide/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.naver.com/docs/common/openapiguide/README.md&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742482895289&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;API 공통 가이드 - Open API 가이드&quot; data-og-description=&quot;API 공통 가이드 네이버 오픈API는 네이버 플랫폼의 기능을 외부 개발자가 쉽게 이용할 수 있게 웹 또는 SDK 형태로 공개한 기술들입니다. 네이버 오픈API로 활용할 수 있는 기술에는 네이버 로그인&quot; data-og-host=&quot;developers.naver.com&quot; data-og-source-url=&quot;https://developers.naver.com/docs/common/openapiguide/README.md&quot; data-og-url=&quot;https://developers.naver.com/docs/common/openapiguide/README.md&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developers.naver.com/docs/common/openapiguide/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.naver.com/docs/common/openapiguide/README.md&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;API 공통 가이드 - Open API 가이드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;API 공통 가이드 네이버 오픈API는 네이버 플랫폼의 기능을 외부 개발자가 쉽게 이용할 수 있게 웹 또는 SDK 형태로 공개한 기술들입니다. 네이버 오픈API로 활용할 수 있는 기술에는 네이버 로그인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버가 엄청 다양한 서비스를 제공하고 있는 큰 회사이다보니, OpenAPI를 제공해주는 목록도 굉장히 많습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v7bCO/btsMRi7rMi0/MxkUK3PPb5LsRT0xAzv4e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v7bCO/btsMRi7rMi0/MxkUK3PPb5LsRT0xAzv4e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v7bCO/btsMRi7rMi0/MxkUK3PPb5LsRT0xAzv4e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv7bCO%2FbtsMRi7rMi0%2FMxkUK3PPb5LsRT0xAzv4e0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1836&quot; height=&quot;1752&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;1752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중에서 검색 서비스의 경우 하루 25,000회의 호출 제한이 있지만 네이버의 다양한 검색 서비스를 무료로 사용해볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 준비&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 네이버의 OpenAPI를 MCP Server로 구현해둔 작업물이 있어, 이것을 활용해볼 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/pfldy2850/py-mcp-naver&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742483043011&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - pfldy2850/py-mcp-naver: python MCP NAVER&quot; data-og-description=&quot;python MCP NAVER. Contribute to pfldy2850/py-mcp-naver development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; data-og-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdSmQf/hyYrYXsW2J/InSIV0FKwlqNSaKvgMsDO1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bUkOwC/hyYvi1c3nC/BF3MoE78jYspBWa2SEV3z1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/pfldy2850/py-mcp-naver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pfldy2850/py-mcp-naver&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdSmQf/hyYrYXsW2J/InSIV0FKwlqNSaKvgMsDO1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bUkOwC/hyYvi1c3nC/BF3MoE78jYspBWa2SEV3z1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - pfldy2850/py-mcp-naver: python MCP NAVER&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;python MCP NAVER. Contribute to pfldy2850/py-mcp-naver development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(맞습니다. 제가 만들었습니다..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 MCP 서버는 네이버에서 제공하는 검색 관련 OpenAPI들을 모두 사용할 수 있도록 래핑해둔 서버입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1742&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uIs8W/btsMSmgHxc0/FVEOcihVVcGsNMuSGj5fO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uIs8W/btsMSmgHxc0/FVEOcihVVcGsNMuSGj5fO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uIs8W/btsMSmgHxc0/FVEOcihVVcGsNMuSGj5fO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuIs8W%2FbtsMSmgHxc0%2FFVEOcihVVcGsNMuSGj5fO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1742&quot; height=&quot;936&quot; data-origin-width=&quot;1742&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 위 API를 사용하기 위해서 아래 링크에 들어가 api 사용 신청을 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.naver.com/apps/#/register=datalab&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.naver.com/apps/#/register=datalab&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742483160169&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;애플리케이션 - NAVER Developers&quot; data-og-description=&quot;&quot; data-og-host=&quot;developers.naver.com&quot; data-og-source-url=&quot;https://developers.naver.com/apps/#/register=datalab&quot; data-og-url=&quot;https://developers.naver.com/apps/#/register=datalab&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developers.naver.com/apps/#/register=datalab&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.naver.com/apps/#/register=datalab&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;애플리케이션 - NAVER Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신청이 완료되었으면, client id와 client secret을 확인할 수 있고, 이는 추후 mcp server 등록시 넣어주기 위해 환경변수로 작성합니다&lt;/p&gt;
&lt;pre id=&quot;code_1742483229785&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export NAVER_CLIENT_ID=&amp;lt;YOUR NAVER CLIENT ID&amp;gt;
export NAVER_CLIENT_SECRET=&amp;lt;YOUR NAVER CLIENT SECRET&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 준비가 완료되었으면 위의 레포의 내용대로 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742483264911&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uv pip install mcp-naver

uv run python -m mcp-naver.hosts.claude_desktop \
  -e NAVER_CLIENT_ID=$NAVER_CLIENT_ID \
  -e NAVER_CLIENT_SECRET=$NAVER_CLIENT_SECRET&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어들을 다 실행했으면, 적용을 위해서 claude app을 종료하고 재시작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jin05/btsMSxblfw1/MrsSAuwc5qOXKmRMkD3BP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jin05/btsMSxblfw1/MrsSAuwc5qOXKmRMkD3BP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jin05/btsMSxblfw1/MrsSAuwc5qOXKmRMkD3BP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJin05%2FbtsMSxblfw1%2FMrsSAuwc5qOXKmRMkD3BP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1237&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;익숙한 Chat 인터페이스의 오른쪽 아래에 망치 아이콘과 함께 MCP tools를 14개 사용할 수 있다고 표시가 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 클릭해서 보면, Naver OpenAPI MCP 서버에서 제공하는 도구 목록이 보이는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfqM9s/btsMQerhSdM/4TnK5bGOASedmyh5raKNp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfqM9s/btsMQerhSdM/4TnK5bGOASedmyh5raKNp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfqM9s/btsMQerhSdM/4TnK5bGOASedmyh5raKNp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfqM9s%2FbtsMQerhSdM%2F4TnK5bGOASedmyh5raKNp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1237&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용된 mcpServers에 대한 설정파일은 macOS는 ~/Library/Application Support/Claude/claude_desktop_config.json 경로에 있고, Windows는 %APPDATA%\Claude\claude_desktop_config.json 경로에 있으니 직접 파일을 수정할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bie39J/btsMW0T6KsC/9lbRlTZvyMIvlNqIkkLOhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bie39J/btsMW0T6KsC/9lbRlTZvyMIvlNqIkkLOhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bie39J/btsMW0T6KsC/9lbRlTZvyMIvlNqIkkLOhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbie39J%2FbtsMW0T6KsC%2F9lbRlTZvyMIvlNqIkkLOhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;789&quot; height=&quot;549&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;적용 결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아까와 같이 &lt;b&gt;Naver OpenAPI를 활용해서 영등포구청역 맛집을 검색해줘&lt;/b&gt; 라고 물어보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX21MK/btsMRwdfzFQ/tIp8KmqbTjspjOK1hGnt0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX21MK/btsMRwdfzFQ/tIp8KmqbTjspjOK1hGnt0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX21MK/btsMRwdfzFQ/tIp8KmqbTjspjOK1hGnt0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX21MK%2FbtsMRwdfzFQ%2FtIp8KmqbTjspjOK1hGnt0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1776&quot; height=&quot;1237&quot; data-origin-width=&quot;1776&quot; data-origin-height=&quot;1237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;claude app은 필요한 내용을 찾기 위해 Naver OpenAPI의 search_local (지역 검색) tool을 활용하여, &lt;b&gt;영등포구청역 맛집&lt;/b&gt; 이라는 검색어를 생성해 검색합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742483516111&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  `query`: `영등포구청역 맛집`,
  `display`: 10
}
{
	&quot;lastBuildDate&quot;:&quot;Thu, 20 Mar 2025 22:29:01 +0900&quot;,
	&quot;total&quot;:5,
	&quot;start&quot;:1,
	&quot;display&quot;:5,
	&quot;items&quot;:[
		{
			&quot;title&quot;:&quot;민똣&quot;,
			&quot;link&quot;:&quot;https:\/\/www.instagram.com\/mintot_official&quot;,
			&quot;category&quot;:&quot;음식점&amp;gt;베트남음식&quot;,
			&quot;description&quot;:&quot;&quot;,
			&quot;telephone&quot;:&quot;&quot;,
			&quot;address&quot;:&quot;서울특별시 영등포구 당산동1가 55 1층&quot;,
			&quot;roadAddress&quot;:&quot;서울특별시 영등포구 당산로10길 28-1 1층&quot;,
			&quot;mapx&quot;:&quot;1268989296&quot;,
			&quot;mapy&quot;:&quot;375213933&quot;
		},
		{
			&quot;title&quot;:&quot;당산오돌 본점&quot;,
			&quot;link&quot;:&quot;https:\/\/blog.naver.com\/skill8114&quot;,
			&quot;category&quot;:&quot;한식&amp;gt;육류,고기요리&quot;,
			&quot;description&quot;:&quot;&quot;,
			&quot;telephone&quot;:&quot;&quot;,
            ...
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 나서, 더 많은 맛집 정보를 찾아보겠다는 말과 함께 search_blog(블로그 검색)에 영등포구청역 맛집 추천 이라는 쿼리를 직접 생성하여 검색합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742483586149&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  `query`: `영등포구청역 맛집 추천`,
  `display`: 5
}
{
	&quot;lastBuildDate&quot;:&quot;Thu, 20 Mar 2025 22:29:06 +0900&quot;,
	&quot;total&quot;:4805,
	&quot;start&quot;:1,
	&quot;display&quot;:5,
	&quot;items&quot;:[
		{
			&quot;title&quot;:&quot;[&amp;lt;b&amp;gt;맛집&amp;lt;\/b&amp;gt;] &amp;lt;b&amp;gt;영등포구청역 맛집&amp;lt;\/b&amp;gt; | 무제한 샤브샤브 &amp;lt;b&amp;gt;맛집 추천&amp;lt;\/b&amp;gt;... &quot;,
			&quot;link&quot;:&quot;https:\/\/blog.naver.com\/hayoungju98\/223795238282&quot;,
			&quot;description&quot;:&quot;❗️영업 시간 매일 11:00 ~ 21:00 주말에만 브레이크 타임 15:00 ~ 17:00 외관 &amp;lt;b&amp;gt;영등포구청역 맛집&amp;lt;\/b&amp;gt; 샤브올데이 당산점의 외관. 생각보다 가게가 꽤 커서 놀랐다. 그리고 더 놀란건 가게 앞 웨이팅 ㅠㅋㅋㅋ 예약도... &quot;,
			&quot;bloggername&quot;:&quot;Zero Blog&quot;,
			&quot;bloggerlink&quot;:&quot;blog.naver.com\/hayoungju98&quot;,
			&quot;postdate&quot;:&quot;20250313&quot;
		},
		{
			&quot;title&quot;:&quot;&amp;lt;b&amp;gt;영등포구청역 맛집 추천&amp;lt;\/b&amp;gt; 고기집 동래정&quot;,
			&quot;link&quot;:&quot;https:\/\/blog.naver.com\/wj2796\/223530123811&quot;,
			&quot;description&quot;:&quot;내부 및 인테리어 영등포구청역 맛집 매장으로 들어서면 이렇습니다. 아담하면서 깔끔한 분위기가... 걸 추천드린다니 기대가 된답니다. 3. 메뉴 &amp;lt;b&amp;gt;영등포구청역맛집 추천&amp;lt;\/b&amp;gt; 동래정은 하이볼도 있는데요. 오후 3시... &quot;,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음, 위의 검색 내용을 토대로 영등포구청역 주변 맛집 리스트를 다시 재생성하여 답변을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1742483644633&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;영등포구청역 맛집에 대한 정보를 찾아드리겠습니다. Naver OpenAPI를 통해 검색해보겠습니다.

더 많은 맛집 정보를 찾아보겠습니다.

영등포구청역 맛집을 Naver OpenAPI를 통해 검색한 결과, 다음과 같은 추천 맛집들을 찾았습니다:

### 영등포구청역 주변 맛집 리스트

1. **민똣** (베트남음식)
   - 주소: 서울특별시 영등포구 당산로10길 28-1 1층
   - 인스타그램: @mintot_official

2. **당산오돌 본점** (육류, 고기요리)
   - 주소: 서울특별시 영등포구 국회대로37길 6 1층
   - 블로그: blog.naver.com/skill8114

3. **88냉삼 영등포구청직영점** (돼지고기구이)
   - 주소: 서울특별시 영등포구 당산로32길 1-6

4. **연탄불** (육류, 고기요리)
   - 주소: 서울특별시 영등포구 양산로17길 17

5. **팬팬떡볶이** (분식, 떡볶이)
   - 주소: 서울특별시 영등포구 영등포로 143 1층
   - 인스타그램: @panfan1997

### 블로그에서 추천하는 맛집

1. **샤브올데이 당산점** (무제한 샤브샤브)
   - 영업시간: 매일 11:00 ~ 21:00 (주말 브레이크 타임 15:00 ~ 17:00)
   - 가게가 크고 웨이팅이 있는 인기 맛집

2. **동래정** (고기집)
   - 아담하고 깔끔한 분위기의 매장
   - 하이볼 메뉴도 있음

3. **대박곱창구이** (곱창전문점)
   - 오동통한 소곱창이 특징
   - 천엽, 선지 해장국 서비스 제공
   - 메뉴: 마늘/황소/모둠 곱창, 특양/대창/막창 구이 등
   - 모둠곱창 250g 25,000원

4. **미락카츠 본점** (돈카츠 전문점)
   - 영등포구청 인근 카츠 맛집

이 중에서 더 자세한 정보나 특정 음식 종류에 대해 알고 싶으시면 말씀해주세요!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Naver OpenAPI를 사용해달라는 지시어를 제외하더라도, 스스로 MCP를 잘 찾아서 사용합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3552&quot; data-origin-height=&quot;2210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXx8LJ/btsMVb0g4pN/1LoHCAt0Pe5mTJwE7Oerl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXx8LJ/btsMVb0g4pN/1LoHCAt0Pe5mTJwE7Oerl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXx8LJ/btsMVb0g4pN/1LoHCAt0Pe5mTJwE7Oerl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXx8LJ%2FbtsMVb0g4pN%2F1LoHCAt0Pe5mTJwE7Oerl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3552&quot; height=&quot;2210&quot; data-origin-width=&quot;3552&quot; data-origin-height=&quot;2210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Q: 영등포구청역 맛집 찾아줘&lt;br /&gt;&lt;br /&gt;A:&lt;br /&gt;영등포구청역 주변 맛집을 찾아드리겠습니다. &lt;br /&gt;&lt;br /&gt;영등포구청역 주변의 추천 맛집들을 소개해드립니다: &lt;br /&gt;&lt;br /&gt;### 지역 맛집 리스트 &lt;br /&gt;1. **민똣** - 베트남 음식 전문점 &lt;br /&gt;- 주소: 서울특별시 영등포구 당산로10길 28-1 1층 &lt;br /&gt;- 인스타그램: mintot_official &lt;br /&gt;2. **당산오돌 본점** - 육류, 고기요리 전문점&lt;br /&gt;- 주소: 서울특별시 영등포구 국회대로37길 6 1층 &lt;br /&gt;- 블로그: skill8114 &lt;br /&gt;3. **88냉삼 영등포구청직영점** - 돼지고기구이 전문점 &lt;br /&gt;- 주소: 서울특별시 영등포구 당산로32길 1-6 &lt;br /&gt;4. **연탄불** - 육류, 고기요리 전문점 &lt;br /&gt;- 주소: 서울특별시 영등포구 양산로17길 17 &lt;br /&gt;5. **팬팬떡볶이** - 떡볶이 전문점 &lt;br /&gt;- 주소: 서울특별시 영등포구 영등포로 143 1층 &lt;br /&gt;- 인스타그램: panfan1997 &lt;br /&gt;&lt;br /&gt;### 블로그 추천 맛집 &lt;br /&gt;1. **샤브올데이 당산점** - 무제한 샤브샤브 전문점 &lt;br /&gt;- 영업 시간: 매일 11:00 ~ 21:00 (주말 브레이크 타임 15:00 ~ 17:00) &lt;br /&gt;- 특징: 가게가 크고 인기가 많아 웨이팅이 있을 수 있음 &lt;br /&gt;2. **동래정** - 고기집 &lt;br /&gt;- 특징: 아담하고 깔끔한 분위기, 하이볼 메뉴도 있음 &lt;br /&gt;3. **대박곱창구이** - 소곱창 전문점 &lt;br /&gt;- 특징: 통통한 마늘 소곱창이 유명하며, 천엽/선지 해장국 서비스 제공 &lt;br /&gt;- 메뉴: 모둠곱창 250g 25,000원 &lt;br /&gt;- 마늘/황소/모둠 곱창, 특양/대창/막창 구이 등 다양한 메뉴 보유 &lt;br /&gt;4. **미락카츠 본점** - 카츠 전문점 &lt;br /&gt;- 영등포구청 카츠 맛집으로 유명 &lt;br /&gt;&lt;br /&gt;맛집을 더 자세히 알아보시거나 특정 음식 종류에 대한 추천이 필요하시면 말씀해주세요!&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3552&quot; data-origin-height=&quot;2210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EfgvR/btsMUmOLUvt/UrBg1H3HiSc9vzARZnb5s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EfgvR/btsMUmOLUvt/UrBg1H3HiSc9vzARZnb5s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EfgvR/btsMUmOLUvt/UrBg1H3HiSc9vzARZnb5s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEfgvR%2FbtsMUmOLUvt%2FUrBg1H3HiSc9vzARZnb5s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3552&quot; height=&quot;2210&quot; data-origin-width=&quot;3552&quot; data-origin-height=&quot;2210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Q: 요즘 생수 가격이 얼마정도 해?&lt;br /&gt;&lt;br /&gt;A:&lt;br /&gt;현재 한국의 생수 가격에 대해 알아보겠습니다. &lt;br /&gt;현재 한국의 생수 가격을 검색해 보니 다양한 종류와 용량별로 가격 차이가 있습니다. 주요 생수 가격은 다음과 같습니다:&lt;br /&gt;&lt;br /&gt;1. 소용량 생수 (500ml) &lt;br /&gt;- 동원샘물 무라벨 500ml x 20병: 4,500원 (병당 약 225원) &lt;br /&gt;- 삼다수 500ml 무라벨 x 20개: 5,400원 (병당 약 270원) &lt;br /&gt;- 노브랜드 미네랄워터 500ml x 20입: 3,800원 (병당 약 190원) &lt;br /&gt;- 스파클 무라벨 500ml x 80개: 12,890원 (병당 약 161원) &lt;br /&gt;2. 대용량 생수 (2L) &lt;br /&gt;- 동원샘물 무라벨 2L x 6개: 1,500원 (병당 약 250원) &lt;br /&gt;- 삼다수 2L 무라벨 x 6개: 3,500원 (병당 약 583원) &lt;br /&gt;- 스파클 무라벨 2L x 24개: 9,290원 (병당 약 387원) &lt;br /&gt;3. 기타 생수 &lt;br /&gt;- 몽베스트 330ml: 8,300원 (구체적인 개수는 명시되지 않음) &lt;br /&gt;- 자연드림 JUST 기픈물 종이팩 1,000ml x 12입: 16,150원~17,950원 (팩당 약 1,350~1,500원) &lt;br /&gt;&lt;br /&gt;일반적으로 브랜드, 용량, 구매 수량에 따라 가격이 다양하게 형성되어 있으며, 대형마트나 온라인 플랫폼별로도 가격 차이가 있습니다. 무라벨 제품이 많이 출시되어 있고, 대량 구매 시 병당 가격이 더 저렴한 경향이 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 Claude Desktop App을 설치하고, Naver OpenAPI MCP Server를 활용하여 claude app에 naver 검색 능력을 활용할 수 있도록 실습을 진행하였습니다. 그 과정에서 FastMCP를 활용하여 Python MCP Server를 쉽고 간단하게 작성하는 방법에 대해서 간략하게 다뤘습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP가 오픈소스로 공개되고 나서, 많은 참여자들이 MCP Server 개발에 참여하여 생태계를 폭발적으로 성장시키고 있는 중입니다. 이러한 상황에서 활용할 수 있는 많은 MCP를 적재적소에 활용해서 개인의 요구사항에 맞는 적절한 LLM agent를 만들기도 쉬워지는 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 MCP는 아직 초기 단계이기 때문에 과장된 기대라는 시각도 있지만, 실질적인 사례가 쌓이고 있다는 점에서 단순한 유행보다는 AI 기술의 다음 단계를 여는 중요한 전환점이 될 가능성이 높아 보입니다. 앞으로 MCP가 AI 생태계에 어떤 변화를 가져올지 지속적으로 주목할 필요가 있을 것 같습니다.&lt;/p&gt;</description>
      <category>AI/어플리케이션 개발</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/113</guid>
      <comments>https://dytis.tistory.com/113#entry113comment</comments>
      <pubDate>Fri, 21 Mar 2025 00:22:14 +0900</pubDate>
    </item>
    <item>
      <title>MCP(Model Context Protocol)이 뭐길래?</title>
      <link>https://dytis.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;인공지능(AI) 기술의 발전과 함께, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;AI 시스템이 외부 데이터와 효과적으로 연동되는 것이 점점 더 중요한 이슈&lt;/span&gt;로 떠오르고 있습니다. 기존에는 AI 모델이 내부적으로 훈련된 데이터만을 기반으로 작동하는 경우가 많았지만, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;실시간 정보 활용과 동적 컨텍스트 유지가 필수적&lt;/span&gt;인 환경에서는 이러한 방식이 한계를 보였습니다. 이에 따라, AI 시스템이 외부 데이터와 원활하게 통신하고 정보를 활용할 수 있는 새로운 프로토콜이 필요해졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;596&quot; data-start=&quot;323&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2024년 11월, Anthropic이 Model Context Protocol(MCP)을 오픈 소스로 공개하면서, AI 생태계에서는 새로운 변화의 바람이 불기 시작했습니다. MCP는 AI 모델이 다양한 데이터 소스와 연결되어 실시간으로 정보를 주고받을 수 있도록 설계된 프로토콜로, 이를 활용하면 AI가 더욱 정확하고 풍부한 답변을 제공할 수 있습니다. 이러한 혁신적인 접근 방식은 기업과 개발자들에게 큰 관심을 끌고 있으며, AI의 활용 범위를 넓히는 데 중요한 역할을 하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;596&quot; data-start=&quot;323&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/balTba/btsMQ4VU6be/0aPA7DIZToDMkOYkahfkok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/balTba/btsMQ4VU6be/0aPA7DIZToDMkOYkahfkok/img.png&quot; data-alt=&quot;구글 검색어 트렌드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/balTba/btsMQ4VU6be/0aPA7DIZToDMkOYkahfkok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbalTba%2FbtsMQ4VU6be%2F0aPA7DIZToDMkOYkahfkok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;697&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글 검색어 트렌드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;801&quot; data-start=&quot;598&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;801&quot; data-start=&quot;598&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2024년 11월, Anthropic이 Model Context Protocol(MCP)을 오픈 소스로 공개하였지만 당시에는 큰 주목을 받지 못했습니다. 그러나 2025년 초부터 MCP에 대한 관심이 급증하고 있는데,&amp;nbsp;이러한 변화의 주요 요인 중 하나는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;AI 에이전트와 에이전틱 워크플로우의 발전&lt;/span&gt;에 따라, 실제 비즈니스 시스템과 데이터를 AI 에이전트에 통합하는 필요성이 대두되었기 때문입니다. MCP는 이러한 통합 문제를 해결하는 표준으로서, 파일 시스템, 데이터베이스, API 등 기존 데이터 소스를 AI 워크플로우에 연결하는 방법을 정의하여, 생산 준비가 된 AI 에이전트를 구축하는 데 필수적인 요소로 부상하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdnEXT/btsMReD3BnV/zzb9OEoPbHUGoYamwcqvPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdnEXT/btsMReD3BnV/zzb9OEoPbHUGoYamwcqvPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdnEXT/btsMReD3BnV/zzb9OEoPbHUGoYamwcqvPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdnEXT%2FbtsMReD3BnV%2Fzzb9OEoPbHUGoYamwcqvPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;980&quot; height=&quot;730&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;349&quot; data-start=&quot;198&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;또한, 커뮤니티의 성장과 채택도 MCP의 인기에 기여했습니다. 몇 달 만에 MCP는 개념에서 성장하는 생태계로 발전하였으며, 주요 AI 기업과 오픈 소스 커뮤니티가 MCP를 채택하고 있습니다. 이러한 채택은 MCP를 기반으로 한 에이전틱 AI 시스템 구축을 촉진하고 있으며, 이는 MCP에 대한 관심 증가의 또 다른 요인입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;554&quot; data-start=&quot;351&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 맥락에서, Manus AI와 같은 혁신적인 AI 에이전트의 출시는 MCP의 중요성을 더욱 부각시켰습니다. Manus AI는 사용자의 지시에 따라 웹 브라우징, 코드 작성 등 다양한 작업을 수행하는 범용 AI 에이전트로, 기존의 AI 모델인 Claude Sonnet 3.5와 Qwen을 기반으로 설계되었습니다. 이러한 AI 에이전트의 기능은 다양한 도구와의 통합을 통해 강화되며, 이 과정에서 MCP와 같은 프로토콜이 중요한 역할을 합니다. 따라서, Manus AI와 같은 AI 에이전트의 등장은 MCP에 대한 관심 증가에 직접적인 영향을 미쳤습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP란 무엇인가&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는&amp;nbsp;&quot;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;대규모&amp;nbsp;언어&amp;nbsp;모델이&amp;nbsp;외부&amp;nbsp;데이터와&amp;nbsp;시스템을&amp;nbsp;더&amp;nbsp;효과적으로&amp;nbsp;활용할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;설계된&amp;nbsp;일종의&amp;nbsp;연결&amp;nbsp;프로토콜&quot;&lt;/span&gt;입니다.&amp;nbsp;앤트로픽은&amp;nbsp;MCP를&amp;nbsp;USB-C&amp;nbsp;포트에&amp;nbsp;비유합니다.&amp;nbsp;USB-C가&amp;nbsp;다양한&amp;nbsp;기기와&amp;nbsp;주변&amp;nbsp;장치를&amp;nbsp;표준화된&amp;nbsp;방식으로&amp;nbsp;연결하듯이,&amp;nbsp;MCP는&amp;nbsp;AI&amp;nbsp;모델이&amp;nbsp;다양한&amp;nbsp;데이터&amp;nbsp;소스와&amp;nbsp;도구에&amp;nbsp;표준화된&amp;nbsp;방식으로&amp;nbsp;연결될&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 주요 특징은 다음과 같습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개방형 표준(Open Standard): MCP는 오픈소스로 공개되어 있어 누구나 자유롭게 사용하고 개선할 수 있습니다. 앤트로픽이 개발했지만 Claude와 같은 그들의 모델에만 국한되지 않고, 어떤 AI 시스템에서도 사용할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;양방향 연결(Two-way Connection): MCP는 AI 모델과 데이터 소스 간의 양방향 통신을 지원합니다. 기존 API 호출 방식에서는 AI가 데이터를 요청하면 서버가 한 번 응답하고 끝나는 방식이었지만, MCP에서는 AI 모델과 데이터 소스가 지속적으로 연결된 상태에서 서로 정보를 주고받을 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;범용성과 표준화(Universality and Standardization): MCP는 다양한 데이터 소스와 도구를 하나의 표준 프로토콜로 연결할 수 있게 해줍니다. 개발자는 각 데이터 소스마다 별도의 커넥터를 유지할 필요 없이 단일 프로토콜을 통해 연결할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;보안 및 신뢰성(Security and Reliability): MCP는 AI 모델과 데이터 소스 간의 안전하고 신뢰할 수 있는 연결을 제공합니다. 이를 통해 개인 정보 보호와 데이터 무결성을 유지할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는&amp;nbsp;AI&amp;nbsp;모델이&amp;nbsp;단순히&amp;nbsp;텍스트를&amp;nbsp;생성하는&amp;nbsp;것을&amp;nbsp;넘어서,&amp;nbsp;필요한&amp;nbsp;정보를&amp;nbsp;실시간으로&amp;nbsp;가져오고&amp;nbsp;다른&amp;nbsp;소프트웨어나&amp;nbsp;데이터&amp;nbsp;시스템과&amp;nbsp;협업할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;만들어&amp;nbsp;주는&amp;nbsp;기술입니다.&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;AI&amp;nbsp;모델의&amp;nbsp;성능과&amp;nbsp;실제&amp;nbsp;활용도를&amp;nbsp;높이는&amp;nbsp;것이&amp;nbsp;MCP의&amp;nbsp;핵심&amp;nbsp;목표입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 핵심 구성 요소&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는 클라이언트-서버 아키텍처를 기반으로 하며, AI 모델과 외부 데이터 소스 간의 원활한 통신을 가능하게 하는 구조로 설계되었습니다. MCP는 다음과 같은 세 가지 핵심 구성 요소로 이루어져 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC9Yrs/btsMR7RvgcS/ttxKUX8iF82bokKc7IvrT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC9Yrs/btsMR7RvgcS/ttxKUX8iF82bokKc7IvrT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC9Yrs/btsMR7RvgcS/ttxKUX8iF82bokKc7IvrT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC9Yrs%2FbtsMR7RvgcS%2FttxKUX8iF82bokKc7IvrT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;471&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SrqcU/btsMQpl1ejP/iw3Y9wQnUjKumzdVRA6aE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SrqcU/btsMQpl1ejP/iw3Y9wQnUjKumzdVRA6aE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SrqcU/btsMQpl1ejP/iw3Y9wQnUjKumzdVRA6aE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSrqcU%2FbtsMQpl1ejP%2Fiw3Y9wQnUjKumzdVRA6aE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;240&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트(Host)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 애플리케이션의 컨테이너이자 조정자 역할을 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여러 클라이언트 인스턴스를 관리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트 연결 권한과 생명주기를 제어합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;보안 정책과 동의 요구사항을 시행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI/LLM 통합 및 샘플링을 조정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트 간 컨텍스트 집계를 관리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ex) Claude App, IDEs, AI 도구들&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 클라이언트(MCP Clients)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트에 의해 생성되며 서버와의 독립적인 연결을 유지합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서버당 하나의 상태 유지 세션을 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프로토콜 협상 및 기능 교환을 처리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;양방향으로 프로토콜 메시지를 라우팅합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;구독 및 알림을 관리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서버 간 보안 경계를 유지합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 서버(MCP Servers)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;특화된 컨텍스트와 기능을 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 기본 요소를 통해 리소스, 도구 및 프롬프트를 노출합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;독립적으로 작동하며 집중된 책임을 가집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트 인터페이스를 통해 샘플링을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;보안 제약을 준수해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;로컬&amp;nbsp;프로세스&amp;nbsp;또는&amp;nbsp;원격&amp;nbsp;서비스일&amp;nbsp;수&amp;nbsp;있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 작동 방식&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 작동 방식은 다음과 같은 단계로 이루어집니다:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;연결 설정(Connection Establishment)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트 애플리케이션(예: Claude Desktop)이 MCP 클라이언트를 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트는 MCP 서버와 연결을 설정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;연결 설정 과정에서 프로토콜 버전, 기능, 권한 등이 협상됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehB0q9/btsMQ33Vtsi/eZRWIKjywHztn5yEXFHWH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehB0q9/btsMQ33Vtsi/eZRWIKjywHztn5yEXFHWH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehB0q9/btsMQ33Vtsi/eZRWIKjywHztn5yEXFHWH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehB0q9%2FbtsMQ33Vtsi%2FeZRWIKjywHztn5yEXFHWH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;418&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;778&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컨텍스트 교환(Context Exchange)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서버는 클라이언트에게 데이터 소스의 컨텍스트 정보를 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트는 이 정보를 호스트 프로세스에 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트 프로세스는 여러 클라이언트로부터 받은 컨텍스트를 집계하여 AI 모델에 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;도구 호출(Tool Invocation)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 모델은 특정 작업을 수행하기 위해 도구 호출을 요청할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트 프로세스는 이 요청을 적절한 클라이언트에 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트는 서버에 도구 호출 요청을 전송합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서버는 요청된 작업을 수행하고 결과를 클라이언트에 반환합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;결과 처리(Result Processing)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트는 서버로부터 받은 결과를 호스트 프로세스에 전달합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;호스트 프로세스는 이 결과를 AI 모델에 제공합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 모델은 이 정보를 바탕으로 응답을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 기술적 구현&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는 다양한 프로그래밍 언어로 구현될 수 있으며, 앤트로픽은 다음과 같은 SDK를 제공합니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;TypeScript SDK&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Python SDK&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Java SDK&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin SDK&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 SDK를 사용하여 개발자는 MCP 서버와 클라이언트를 쉽게 구현할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP Server 구현&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Python에서는 fastmcp라는 라이브러리를 활용해 간단하게 MCP 서버를 구현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://github.com/jlowin/fastmcp&quot;&gt;https://github.com/jlowin/fastmcp&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742480765883&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &quot; data-og-description=&quot;The fast, Pythonic way to build Model Context Protocol servers   - GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jlowin/fastmcp&quot; data-og-url=&quot;https://github.com/jlowin/fastmcp&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/jlowin/fastmcp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jlowin/fastmcp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The fast, Pythonic way to build Model Context Protocol servers   - GitHub - jlowin/fastmcp: The fast, Pythonic way to build Model Context Protocol servers  &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Python Fastmcp를 활용한 간단한 서버 구현 예제는 다음과 같습니다:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1742480713353&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP

# 서버 초기화
mcp = FastMCP(&quot;name-origin&quot;) 

# API 기본 URL
base_url = &quot;https://api.nationalize.io&quot;
    
# 메서드 정의
@mcp.tool() 
async def predict_origin(self, name: str) -&amp;gt; dict:
    &quot;&quot;&quot;Nationalize API를 사용하여 주어진 이름의 출신 국가를 예측합니다
    Args:
        name (str): 출신 국가를 예측할 이름
    Returns:
        dict: 이름의 출신 국가
    &quot;&quot;&quot;
    async with httpx.AsyncClient()  as client:
        response = await client.get(f&quot;{base_url}/?name={name}&quot;)
        return response.json()

# 메서드 정의
@mcp.tool()
async def batch_predict(self, names: list[str]) -&amp;gt; dict:
    &quot;&quot;&quot;여러 이름의 출신 국가를 한 번에 예측합니다
    Args:
        names (list[str]): 출신 국가를 예측할 이름 목록
    Returns:
        dict: 이름들의 출신 국가
    &quot;&quot;&quot;
    results = {}
    for name in names:
        results[name] = await self.predict_origin(name)
    return results

if __name__ == &quot;__main__&quot;:
    print(&quot;이름 출신 국가 서버 시작 중...&quot;)
    mcp.run(transport='stdio')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MCP Client 구현&lt;/h4&gt;
&lt;pre id=&quot;code_1742523095025&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from mcp import ClientSession, StdioServerParameters, types
from mcp.client.stdio import stdio_client

# Create server parameters for stdio connection
server_params = StdioServerParameters(
    command=&quot;python&quot;,  # Executable
    args=[&quot;example_server.py&quot;],  # Optional command line arguments
    env=None,  # Optional environment variables
)


async def run():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # Initialize the connection
            await session.initialize()

            # List available prompts
            prompts = await session.list_prompts()

            # Get a prompt
            prompt = await session.get_prompt(
                &quot;example-prompt&quot;, arguments={&quot;arg1&quot;: &quot;value&quot;}
            )

            # List available resources
            resources = await session.list_resources()

            # List available tools
            tools = await session.list_tools()

            # Read a resource
            content, mime_type = await session.read_resource(&quot;file://some/path&quot;)

            # Call a tool
            result = await session.call_tool(&quot;tool-name&quot;, arguments={&quot;arg1&quot;: &quot;value&quot;})


if __name__ == &quot;__main__&quot;:
    import asyncio

    asyncio.run(run())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP와 기존 API의 차이점은 뭘까?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는 기존의 API(Application Programming Interface) 및 함수 호출(Function Calling) 방식과 비교했을 때 여러 가지 중요한 차이점을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 이전 방식들&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;커스텀 API 통합 (일회성 커넥터)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 일반적인 방법은 각 서비스마다 커스텀 코드를 작성하거나 SDK를 사용하는 방식입니다. 예를 들어, AI 에이전트가 Google Drive와 SQL 데이터베이스에 접근하려면, 각각 Google의 API와 데이터베이스 드라이버를 별도로 통합해야 하며, 각기 다른 인증 방식, 데이터 형식, 고유한 특징을 모두 고려해야 합니다. 매우 번거롭고 복잡한 작업입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;언어 모델 플러그인 (예: OpenAI Plugins 등)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2023년에는 모델이 외부 API를 안전하게 호출할 수 있도록 표준화된 플러그인 명세(OpenAPI 스키마 등)를 제공하는 방식도 등장했습니다. 대표적인 예로는 ChatGPT의 플러그인 시스템이 있습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 방식은 MCP처럼 도구 접근을 표준화한다는 점에서는 유사하지만, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;폐쇄적이고 제한된 구조&lt;/span&gt;입니다. 각 플러그인은 개별적으로 구축 및 호스팅해야 하며, ChatGPT나 Bing Chat 같은 특정 플랫폼에서만 사용할 수 있습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;또한 대부분의 플러그인은 모델이 API를 호출해 정보를 받는 단방향 구조에 초점을 맞추고 있어, 지속적이고 상호작용적인 세션을 유지하지는 못합니다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;프레임워크 기반 도구 사용 (LangChain의 Tools, Agents 등)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LangChain과&amp;nbsp;같은&amp;nbsp;에이전트&amp;nbsp;오케스트레이션&amp;nbsp;프레임워크는&amp;nbsp;LLM에게&amp;nbsp;&amp;ldquo;도구&amp;rdquo;(함수)를&amp;nbsp;설명과&amp;nbsp;함께&amp;nbsp;제공하여,&amp;nbsp;모델이&amp;nbsp;상황에&amp;nbsp;따라&amp;nbsp;이를&amp;nbsp;호출하도록&amp;nbsp;하는&amp;nbsp;방식을&amp;nbsp;대중화했습니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;search()나&amp;nbsp;calculate()와&amp;nbsp;같은&amp;nbsp;도구를&amp;nbsp;정의하고,&amp;nbsp;모델이&amp;nbsp;필요할&amp;nbsp;때&amp;nbsp;적절히&amp;nbsp;활용합니다.&lt;br /&gt;이 방식은 매우 강력하지만, 각 도구는 여전히 내부적으로 커스텀 구현이 필요합니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;LangChain은 500개 이상의 도구를 일관된 인터페이스로 제공하고 있지만, 개발자는 여전히 각 도구를 자신의 요구에 맞게 연결하거나 수정&lt;/span&gt;해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MCP는 이러한 구조를 보완합니다. MCP는 도구를 구현하기 위한 표준화된 인터페이스를 제공하며, MCP 서버는 어떤 에이전트든 사용할 수 있는 도구의 라이브러리 역할을 합니다. 핵심적인 차이점은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;표준화의 대상&lt;/span&gt;입니다. &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;LangChain은 개발자 코드에서 도구를 통합하기 위한 표준을 제시&lt;/span&gt;하는 반면, &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;MCP는 모델이 직접 런타임 중에 도구를 발견하고 사용하는 표준&lt;/span&gt;을 만듭니다. 즉, 특정 도구를 위해 에이전트 코드를 작성하지 않더라도, 모델은 MCP를 통해 해당 도구를 실시간으로 통합할 수 있습니다. 이러한&amp;nbsp;흐름은&amp;nbsp;점차&amp;nbsp;융합되고&amp;nbsp;있으며,&amp;nbsp;실제로&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;LangChain&amp;nbsp;팀은&amp;nbsp;MCP의&amp;nbsp;확산을&amp;nbsp;계기로&amp;nbsp;MCP&amp;nbsp;서버를&amp;nbsp;LangChain&amp;nbsp;도구처럼&amp;nbsp;활용할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;어댑터를&amp;nbsp;제공&lt;/span&gt;하고&amp;nbsp;있습니다.&amp;nbsp;이로&amp;nbsp;인해&amp;nbsp;LangChain이나&amp;nbsp;다른&amp;nbsp;프레임워크&amp;nbsp;기반&amp;nbsp;에이전트도&amp;nbsp;MCP&amp;nbsp;도구를&amp;nbsp;자연스럽게&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었으며,&amp;nbsp;MCP&amp;nbsp;생태계의&amp;nbsp;이점을&amp;nbsp;함께&amp;nbsp;누릴&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;검색 기반 생성(RAG)과 벡터 데이터베이스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM에 외부 컨텍스트를 제공하는 가장 일반적인 방식 중 하나는 RAG(Retrieval-Augmented Generation)입니다. 이 방식은 지식 기반(문서, 임베딩 등)을 검색하여 관련 정보를 추출하고, 이를 프롬프트에 삽입하여 모델이 참고하도록 합니다. RAG는 모델의 지식 제한이나 메모리 부족 문제를 해결하는 데 효과적이지만, 주로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;정적인 텍스트 조각을 제공&lt;/span&gt;하며, 모델이 직접 외부 시스템에 행동을 취하거나 동적 쿼리를 실행하는 것은 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로, RAG는 수동적으로 컨텍스트를 제공하는 방식인 반면, MCP는 모델이 능동적으로 컨텍스트를 획득하거나 조작할 수 있도록 합니다. 특히 실시간 정보가 필요하거나, 데이터베이스 쿼리, 게시글 작성과 같은 동적인 작업이 필요한 상황에서는, MCP가 단순한 정보 조회를 넘어서 작업 실행까지 가능한 보다 범용적인 메커니즘으로 기능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존 API 및 함수 호출의 한계&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개별 통합의 필요성: 각 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;데이터 소스마다 별도의 API 연결을 설정하고 관리&lt;/span&gt;해야 했습니다. 예를 들어, AI가 구글 스프레드시트, 사내 문서 저장소, CRM 시스템에서 데이터를 가져와야 한다면, 이들 각각의 API를 별도로 설정하고 관리해야 했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단방향 통신: 대부분의 API 호출은 단방향 통신 방식으로, AI가 데이터를 요청하면 서버가 한 번 응답하고 끝나는 방식이었습니다. 지속적인 상호작용이 어려웠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개발자 중심 설계: API 통합은 주로 개발자를 위해 설계되어 있어, 기술적 지식이 없는 사용자가 활용하기 어려웠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;확장성 제한: 여러 데이터 소스를 통합할수록 복잡성이 기하급수적으로 증가하여 확장성에 제한이 있었습니다. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컨텍스트 유지의 어려움: 여러 시스템 간에 컨텍스트를 유지하기 어려워, AI가 다양한 도구와 데이터 소스를 오가며 작업할 때 일관성을 유지하기 어려웠습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 차별화된 특징&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는 이러한 한계를 극복하기 위해 설계되었으며, 다음과 같은 차별화된 특징을 가지고 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;표준화된 프로토콜: MCP는 모든 데이터 소스와 도구에 대한 단일 표준 프로토콜을 제공합니다. 개발자는 각 데이터 소스마다 별도의 커넥터를 유지할 필요 없이 하나의 프로토콜을 통해 모든 연결을 관리할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;양방향 통신: MCP는 AI 모델과 데이터 소스 간의 양방향 통신을 지원합니다. AI와 데이터 소스가 지속적으로 연결된 상태에서 서로 정보를 주고받을 수 있어, 더 복잡하고 상호작용적인 작업이 가능합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자 친화적 설계: MCP는 개발자뿐만 아니라 기술적 지식이 없는 사용자도 쉽게 활용할 수 있도록 설계되었습니다. 자연어로 AI의 행동을 조작할 수 있는 가능성이 커졌습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;확장성 향상: 표준화된 프로토콜을 통해 여러 데이터 소스와 도구를 쉽게 통합할 수 있어, 확장성이 크게 향상되었습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컨텍스트 유지: MCP는 여러 시스템 간에 컨텍스트를 유지할 수 있어, AI가 다양한 도구와 데이터 소스를 오가며 작업할 때도 일관성을 유지할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오픈소스&amp;nbsp;생태계:&amp;nbsp;MCP는&amp;nbsp;오픈소스로&amp;nbsp;공개되어&amp;nbsp;있어,&amp;nbsp;커뮤니티의&amp;nbsp;기여와&amp;nbsp;혁신을&amp;nbsp;통해&amp;nbsp;지속적으로&amp;nbsp;발전할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실제 사용 시나리오에서의 차이점&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실제 사용 시나리오에서 MCP와 기존 API의 차이점을 살펴보겠습니다:&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;시나리오 1: 데이터 분석&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존 API 방식:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI에게 데이터 분석을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 특정 데이터베이스에 접근하기 위한 API 호출을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개발자가 이 API 호출을 구현하고 실행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;데이터가 반환되면 AI는 이를 분석합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;추가 데이터가 필요한 경우 새로운 API 호출을 생성하고 과정을 반복합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 방식:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI에게 데이터 분석을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 MCP를 통해 데이터베이스에 직접 연결됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 필요한 데이터를 실시간으로 쿼리하고 분석합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;추가 데이터가 필요한 경우 같은 연결을 통해 즉시 요청할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;분석 결과를 바탕으로 데이터베이스에 업데이트를 적용할 수도 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;시나리오 2: 문서 작성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존 API 방식:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI에게 회사 정책에 기반한 문서 작성을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 정책 문서에 접근하기 위한 API 호출을 생성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개발자가 이 API 호출을 구현하고 실행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;정책 문서가 반환되면 AI는 이를 기반으로 문서를 작성합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작성된 문서는 별도의 API 호출을 통해 저장해야 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP 방식:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI에게 회사 정책에 기반한 문서 작성을 요청합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 MCP를 통해 정책 문서 저장소에 직접 연결됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI는 필요한 정책 문서를 실시간으로 검색하고 참조합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문서 작성 중 추가 정보가 필요한 경우 같은 연결을 통해 즉시 접근할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작성된 문서는 MCP를 통해 직접 저장소에 저장할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP가&amp;nbsp;최근&amp;nbsp;화제가&amp;nbsp;되는&amp;nbsp;이유&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;접근성과 사용 편의성 향상&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP가 주목받는 첫 번째 이유는 개발자가 아닌 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;일반 사용자도 상대적으로 쉽게 활용할 수 있다&lt;/span&gt;는 점입니다. 기존 방식에서는 AI가 특정 데이터를 가져오려면 개발자가 직접 API를 설정해야 했지만, MCP를 활용하면 이런 과정이 훨씬 단순해지고 자연어로도 AI의 행동을 조작할 수 있는 가능성이 커집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Claude Desktop 앱에서 MCP 서버를 쉽게 설치하고 연결할 수 있게 되면서, 기술적 지식이 없는 사용자도 AI가 로컬 파일 시스템, 데이터베이스, 웹 서비스 등에 접근할 수 있도록 설정할 수 있게 되었습니다. 이는 AI의 활용 범위를 크게 확장시키는 요인이 되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오픈소스 생태계의 성장&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;오픈소스로 공개되었다는 점은 혁신을 가속화하는 중요한 요인&lt;/span&gt;입니다. 누구나 자유롭게 MCP를 실험하고 개선할 수 있기 때문에 다양한 응용 사례가 빠르게 등장하고 있습니다. GitHub에서 MCP 관련 저장소는 이미 10,800명 이상의 팔로워를 보유하고 있으며, 다양한 언어(TypeScript, Python, Java, Kotlin 등)로 SDK가 제공되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오픈소스 커뮤니티의 활발한 참여로 인해 다양한 데이터 소스와 도구에 대한 MCP 서버가 개발되고 있으며, 이는 MCP 생태계의 빠른 성장을 촉진하고 있습니다. 앤트로픽은 Google Drive, Slack, GitHub, Git, Postgres, Puppeteer 등 인기 있는 엔터프라이즈 시스템을 위한 사전 구축된 MCP 서버를 공유하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다른 LLM과의 호환성&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP는 앤트로픽의 Claude에만 국한되지 않고 다른 대규모 언어 모델(LLM)과도 호환된다는 점이 주목받고 있습니다. LinkedIn 포스트에 따르면, Amazon Bedrock과 같은 다른 LLM 서비스에서도 MCP를 활용할 수 있다는 것이 확인되었습니다. 이는 MCP가 특정 모델에 종속되지 않고 AI 생태계 전반에 영향을 미칠 수 있는 범용 표준으로 자리잡을 가능성을 보여줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다양한 LLM과의 호환성은 개발자들이 여러 AI 모델을 활용하는 애플리케이션을 더 쉽게 구축할 수 있게 해주며, 이는 MCP의 채택률을 높이는 요인이 되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 에이전트 패러다임의 부상&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최근 AI 분야에서는 단순한 질의응답을 넘어&lt;span style=&quot;background-color: #f6e199;&quot;&gt; 복잡한 작업을 자율적으로 수행할 수 있는 AI 에이전트에 대한 관심&lt;/span&gt;이 높아지고 있습니다. MCP는 이러한 AI 에이전트 패러다임과 완벽하게 맞아떨어지는 기술입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP를 통해 AI 에이전트는 다양한 데이터 소스와 도구에 접근하여 복잡한 작업을 수행할 수 있게 됩니다. 예를 들어, 코딩 작업을 수행하는 AI 에이전트는 MCP를 통해 코드 저장소, 개발 환경, 문서 등에 접근하여 더 정확하고 유용한 코드를 생성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실제로 Zed, Replit, Codeium, Sourcegraph와 같은 개발 도구 회사들은 MCP를 활용하여 AI 에이전트가 코딩 작업 주변의 컨텍스트를 더 잘 이해하고, 더 정교하고 기능적인 코드를 생성할 수 있도록 하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;실질적인 활용 사례의 증가&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 MCP가 공개되었을 때는 또 하나의 기술적 시도 정도로 여겨졌지만, 최근 들어 AI의 실질적인 활용 방식이 변화하면서 점점 더 많은 사람들이 이 기술을 주목하고 있습니다. 특히 X(구 트위터)와 같은 SNS 및 AI 커뮤니티에서는 MCP를 활용한 자동화 사례가 늘어나고 있으며, AI 에이전트가 실질적인 업무를 처리하는 모습도 점점 보이고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Block(구 Square)과 Apollo와 같은 기업들은 이미 MCP를 자사 시스템에 통합하고 있으며, 이는 MCP가 단순한 실험적 기술이 아닌 실제 비즈니스 환경에서 가치를 창출할 수 있는 기술임을 보여줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;멀티턴 상호작용의 중요성 증가&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI와의 상호작용 방식이 단순한 일회성 질의응답에서 여러 차례의 대화를 통한 복잡한 작업 수행으로 변화하면서, 멀티턴(Multi-turn) 상호작용의 중요성이 커지고 있습니다. MCP는 이러한 멀티턴 상호작용을 효과적으로 지원하는 기술입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP를 통해 AI는 사용자와의 대화 중에 필요한 정보를 실시간으로 가져오고, 이를 바탕으로 더 정확하고 유용한 응답을 제공할 수 있습니다. 또한, 여러 차례의 대화를 통해 복잡한 작업을 단계적으로 수행할 수 있어, AI의 활용 범위가 크게 확장됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;결론&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Model Context Protocol(MCP)은 앤트로픽이 2024년 11월에 오픈소스로 공개한 혁신적인 기술로, AI 모델과 외부 데이터 소스 및 도구 간의 원활한 연결을 가능하게 합니다. MCP는 단순한 기술적 혁신을 넘어, AI가 실제 세계의 데이터와 시스템과 상호작용하는 방식에 근본적인 변화를 가져오고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP의 주요 특징인 개방형 표준, 양방향 연결, 범용성과 표준화, 보안 및 신뢰성은 기존 API 및 함수 호출 방식의 한계를 극복하고, AI 모델의 활용 범위를 크게 확장시키고 있습니다. 특히 클라이언트-서버 아키텍처를 기반으로 한 MCP의 기술적 구조는 확장성, 모듈성, 보안성을 고려하여 설계되었으며, 이를 통해 AI 모델과 외부 데이터 소스 간의 원활한 통합이 가능해졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MCP가 최근 화제가 되는 이유는 접근성과 사용 편의성 향상, 오픈소스 생태계의 성장, 다른 LLM과의 호환성, AI 에이전트 패러다임의 부상, 실질적인 활용 사례의 증가, 멀티턴 상호작용의 중요성 증가 등 다양한 요인이 있습니다. 이러한 요인들로 인해 MCP는 AI 커뮤니티에서 큰 관심을 받고 있으며, 실제 비즈니스 환경에서도 활용되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;현재 MCP는 소프트웨어 개발 및 코딩 지원, 기업 데이터 통합 및 분석, 문서 관리 및 지식 접근, 로컬 파일 시스템 접근, 데이터베이스 접근 및 쿼리 등 다양한 분야에서 활용되고 있습니다. 미래에는 AI 에이전트의 발전, 생태계의 확장, 산업별 특화 솔루션, 개인화된 AI 비서의 발전, 보안 및 개인정보 보호 강화, 멀티모달 통합 등을 통해 더 큰 영향을 미칠 것으로 전망됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;물론 MCP는 아직 초기 단계이기 때문에 과장된 기대라는 시각도 있지만, 실질적인 사례가 쌓이고 있다는 점에서 단순한 유행보다는 AI 기술의 다음 단계를 여는 중요한 전환점이 될 가능성이 높아 보입니다. 앞으로 MCP가 AI 생태계에 어떤 변화를 가져올지 지속적으로 주목할 필요가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;참고 자료&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/news/model-context-protocol&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.anthropic.com/news/model-context-protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://modelcontextprotocol.io/introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wandb.ai/onlineinference/mcp/reports/The-Model-Context-Protocol-MCP-by-Anthropic-Origins-functionality-and-impact--VmlldzoxMTY5NDI4MQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wandb.ai/onlineinference/mcp/reports/The-Model-Context-Protocol-MCP-by-Anthropic-Origins-functionality-and-impact--VmlldzoxMTY5NDI4MQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/modelcontextprotocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.stackademic.com/everything-you-need-to-know-about-the-model-context-protocol-mcp-from-anthropic-84acdb3c1a2f&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.stackademic.com/everything-you-need-to-know-about-the-model-context-protocol-mcp-from-anthropic-84acdb3c1a2f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/Kseniase/mcp#so-what-is-mcp-and-how-does-it-work&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://huggingface.co/blog/Kseniase/mcp#so-what-is-mcp-and-how-does-it-work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://contents.premium.naver.com/banya/banyacompany/contents/250312102008773xh&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://contents.premium.naver.com/banya/banyacompany/contents/250312102008773xh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI/어플리케이션 개발</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/112</guid>
      <comments>https://dytis.tistory.com/112#entry112comment</comments>
      <pubDate>Thu, 20 Mar 2025 23:39:33 +0900</pubDate>
    </item>
    <item>
      <title>검색 시스템을 위한 Document Splitting</title>
      <link>https://dytis.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;검색 시스템은 방대한 양의 데이터를 처리하여 사용자에게 적절한 정보를 제공하는 데 중점을 둡니다. 하지만 모든 데이터가 적절히 검색 가능한 형태로 저장되어 있지 않을 때, 검색 품질이 저하될 수 있습니다. 이를 해결하기 위한 핵심 기술 중 하나가 바로 Document Splitting입니다. 이 글에서는 Document Splitting의 개념, 필요성, 구현 사례를 다룹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Document Splitting이란?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Document Splitting은 큰 문서를 더 작은 단위로 나누는 프로세스를 의미합니다. 이 단위는 문장(Sentence), 문단(Paragraph), 또는 사용자가 정의한 특정 논리적 단위(예: 섹션, 챕터 등)일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예를 들어, 10페이지에 걸쳐 있는 PDF 파일을 통째로 처리하는 대신, 페이지별 또는 문단별로 나누어 저장 및 검색할 수 있습니다. 이렇게 하면 검색 시스템이 더 효율적으로 작동하고, 검색 결과의 정확도를 높일 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;왜 Document Splitting이 필요한가요?&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 효율적인 검색 결과 제공&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 특정 질문을 검색할 때, 방대한 문서 전체를 결과로 반환하면 유용성이 떨어질 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작은 단위로 나뉜 데이터를 처리하면, 더 구체적이고 관련성 높은 결과를 제공할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 검색 속도 향상&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;작은 단위로 나뉜 데이터는 검색 엔진이 더 빠르게 처리할 수 있습니다. 검색 쿼리가 단위 데이터에 적용되기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. 텍스트 임베딩의 효과 극대화&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;AI 기반 검색 시스템에서 자주 사용하는 텍스트 임베딩 기법은 입력 데이터의 크기에 민감합니다. 문서가 작게 분리될수록 임베딩의 품질과 관련성 점수가 향상됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4. 장문의 문서 처리 문제 해결&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;검색 엔진이 한 번에 처리할 수 있는 데이터 크기에는 제한이 있습니다. 이를 초과하는 문서는 일부가 잘리거나 처리가 실패할 수 있습니다. Splitting을 통해 이러한 문제를 예방할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Document Splitting 구현 사례&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Document Splitting은 데이터의 특성과 목적에 따라 다양한 방법으로 구현할 수 있습니다. 아래는 일반적인 접근 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 문자열 분리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문서 내용을 특정 기준(예: 문장, 문단, 페이지)으로 나눕니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Python을 사용한 간단한 구현 예제:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737879142980&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from nltk.tokenize import sent_tokenize

# 큰 문서 예제
large_document = &quot;&quot;&quot;검색 시스템은 데이터를 처리하여 정보를 제공합니다. Document Splitting은 이를 향상시킬 수 있는 방법입니다.&quot;&quot;&quot;

# 문장을 기준으로 문서 분리
split_sentences = sent_tokenize(large_document)
print(split_sentences)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1737879159312&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;['검색 시스템은 데이터를 처리하여 정보를 제공합니다.', 'Document Splitting은 이를 향상시킬 수 있는 방법입니다.']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 구조 기반 분리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문서에 제목, 섹션 등의 계층적 구조가 있는 경우 이를 기반으로 분리합니다. 예를 들어 HTML, Markdown, PDF 같은 형식에서는 특정 태그나 스타일을 기준으로 나눌 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737879203187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from bs4 import BeautifulSoup

# HTML 문서 예제
html_doc = &quot;&quot;&quot;
&amp;lt;h1&amp;gt;제목&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;이 문단은 첫 번째 섹션입니다.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;이 문단은 두 번째 섹션입니다.&amp;lt;/p&amp;gt;
&quot;&quot;&quot;

soup = BeautifulSoup(html_doc, 'html.parser')
paragraphs = [p.text for p in soup.find_all('p')]
print(paragraphs)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1737879210513&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;['이 문단은 첫 번째 섹션입니다.', '이 문단은 두 번째 섹션입니다.']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3. Semantic Meaning 기반 분리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다른 방법들과 달리, Semantic 기반 분리는 텍스트의 내용을 실제로 고려합니다. 문서나 텍스트 구조를 의미의 대리자로 사용하는 대신, 텍스트의 의미를 직접 분석합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;구현 방식은 다양하지만, 개념적으로 텍스트 의미가 크게 변하는 지점을 기준으로 분리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예를 들어, 슬라이딩 윈도우(sliding window) 방식을 사용하여 임베딩을 생성하고, 임베딩 간의 차이를 비교해 의미 변화가 큰 지점을 찾을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737879234196&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sentence_transformers import SentenceTransformer
import numpy as np

# 텍스트 예제
document = [
    &quot;검색 시스템은 데이터를 처리하여 정보를 제공합니다.&quot;,
    &quot;Document Splitting은 이를 향상시킬 수 있는 방법입니다.&quot;,
    &quot;AI 기반 검색 엔진은 매우 효과적입니다.&quot;
]

# 임베딩 모델 초기화
model = SentenceTransformer('all-MiniLM-L6-v2')

# 슬라이딩 윈도우 방식으로 임베딩 생성
embeddings = [model.encode(sentence) for sentence in document]

# 임베딩 간 유사도 계산
for i in range(len(embeddings) - 1):
    similarity = np.dot(embeddings[i], embeddings[i+1]) / (np.linalg.norm(embeddings[i]) * np.linalg.norm(embeddings[i+1]))
    print(f&quot;문장 {i}과 문장 {i+1}의 유사도: {similarity:.2f}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;임베딩 간의 유사도가 낮은 지점에서 분리하면, 더 의미적으로 일관된 섹션을 생성할 수 있습니다. 이 방법은 검색, 요약과 같은 후속 작업의 품질을 향상시킬 가능성이 높습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;LangChain 예제&lt;/span&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1737879317147&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;How to split text based on semantic similarity |  ️  LangChain&quot; data-og-description=&quot;Taken from Greg Kamradt's wonderful notebook:&quot; data-og-host=&quot;python.langchain.com&quot; data-og-source-url=&quot;https://python.langchain.com/docs/how_to/semantic-chunker/&quot; data-og-url=&quot;https://python.langchain.com/docs/how_to/semantic-chunker/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fowiB/hyX4zcLjUn/GPmjIpUtKjcbtKy0uOJtOk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bhB03i/hyX72dg74Y/yqynoQb2E8Fk08w5GXW5tk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/dkgy8F/hyX4sxTDp0/3MZWfYjCg5PBdKqweiQnZ0/img.png?width=1586&amp;amp;height=251&amp;amp;face=0_0_1586_251&quot;&gt;&lt;a href=&quot;https://python.langchain.com/docs/how_to/semantic-chunker/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://python.langchain.com/docs/how_to/semantic-chunker/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fowiB/hyX4zcLjUn/GPmjIpUtKjcbtKy0uOJtOk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/bhB03i/hyX72dg74Y/yqynoQb2E8Fk08w5GXW5tk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/dkgy8F/hyX4sxTDp0/3MZWfYjCg5PBdKqweiQnZ0/img.png?width=1586&amp;amp;height=251&amp;amp;face=0_0_1586_251');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to split text based on semantic similarity |  ️  LangChain&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Taken from Greg Kamradt's wonderful notebook:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;python.langchain.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1737879359723&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Load Example Data
# This is a long document we can split up.
with open(&quot;state_of_the_union.txt&quot;) as f:
    state_of_the_union = f.read()
    

# Create Text Splitter
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai.embeddings import OpenAIEmbeddings

text_splitter = SemanticChunker(OpenAIEmbeddings())


# Split Text
docs = text_splitter.create_documents([state_of_the_union])
print(docs[0].page_content)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1737879368753&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans. Last year COVID-19 kept us apart. This year we are finally together again. Tonight, we meet as Democrats Republicans and Independents. But most importantly as Americans. With a duty to one another to the American people to the Constitution. And with an unwavering resolve that freedom will always triumph over tyranny. Six days ago, Russia&amp;rsquo;s Vladimir Putin sought to shake the foundations of the free world thinking he could make it bend to his menacing ways. But he badly miscalculated. He thought he could roll into Ukraine and the world would roll over. Instead he met a wall of strength he never imagined. He met the Ukrainian people. From President Zelenskyy to every Ukrainian, their fearlessness, their courage, their determination, inspires the world. Groups of citizens blocking tanks with their bodies. Everyone from students to retirees teachers turned soldiers defending their homeland. In this struggle as President Zelenskyy said in his speech to the European Parliament &amp;ldquo;Light will win over darkness.&amp;rdquo; The Ukrainian Ambassador to the United States is here tonight. Let each of us here tonight in this Chamber send an unmistakable signal to Ukraine and to the world. Please rise if you are able and show that, Yes, we the United States of America stand with the Ukrainian people. Throughout our history we&amp;rsquo;ve learned this lesson when dictators do not pay a price for their aggression they cause more chaos. They keep moving.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아래 글을 다양한 breakpoints에 대해 splitting&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737880005207&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ANN(Approximate Nearest Neighbor) 알고리즘의 이해 #2 Flat, LSH, IVF, HNSW + SQ, PQ, RPQ&quot; data-og-description=&quot;벡터&amp;nbsp;검색과&amp;nbsp;ANN(Approximate&amp;nbsp;Nearest&amp;nbsp;Neighbor)&amp;nbsp;알고리즘은&amp;nbsp;대규모&amp;nbsp;데이터셋에서&amp;nbsp;유사한&amp;nbsp;항목을&amp;nbsp;빠르게&amp;nbsp;찾는&amp;nbsp;데&amp;nbsp;필수적인&amp;nbsp;기술입니다.&amp;nbsp;본&amp;nbsp;글에서는&amp;nbsp;다양한&amp;nbsp;벡터&amp;nbsp;검색&amp;nbsp;인덱스에&amp;nbsp;대해&amp;nbsp;소개&quot; data-og-host=&quot;dytis.tistory.com&quot; data-og-source-url=&quot;https://dytis.tistory.com/109&quot; data-og-url=&quot;https://dytis.tistory.com/109&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqbwvN/hyX4pHZU05/iB0pfqe65tVamM0f63IBG0/img.png?width=700&amp;amp;height=393&amp;amp;face=0_0_700_393,https://scrap.kakaocdn.net/dn/crbRP5/hyX7TgmvTn/7t66Dx4T2YzG7jLSmcDrL1/img.png?width=700&amp;amp;height=393&amp;amp;face=0_0_700_393,https://scrap.kakaocdn.net/dn/SjFqv/hyX4q7YFzs/0uHxjkz7BsdkkQ5qIr2Kx1/img.png?width=658&amp;amp;height=464&amp;amp;face=0_0_658_464&quot;&gt;&lt;a href=&quot;https://dytis.tistory.com/109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dytis.tistory.com/109&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqbwvN/hyX4pHZU05/iB0pfqe65tVamM0f63IBG0/img.png?width=700&amp;amp;height=393&amp;amp;face=0_0_700_393,https://scrap.kakaocdn.net/dn/crbRP5/hyX7TgmvTn/7t66Dx4T2YzG7jLSmcDrL1/img.png?width=700&amp;amp;height=393&amp;amp;face=0_0_700_393,https://scrap.kakaocdn.net/dn/SjFqv/hyX4q7YFzs/0uHxjkz7BsdkkQ5qIr2Kx1/img.png?width=658&amp;amp;height=464&amp;amp;face=0_0_658_464');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ANN(Approximate Nearest Neighbor) 알고리즘의 이해 #2 Flat, LSH, IVF, HNSW + SQ, PQ, RPQ&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;벡터&amp;nbsp;검색과&amp;nbsp;ANN(Approximate&amp;nbsp;Nearest&amp;nbsp;Neighbor)&amp;nbsp;알고리즘은&amp;nbsp;대규모&amp;nbsp;데이터셋에서&amp;nbsp;유사한&amp;nbsp;항목을&amp;nbsp;빠르게&amp;nbsp;찾는&amp;nbsp;데&amp;nbsp;필수적인&amp;nbsp;기술입니다.&amp;nbsp;본&amp;nbsp;글에서는&amp;nbsp;다양한&amp;nbsp;벡터&amp;nbsp;검색&amp;nbsp;인덱스에&amp;nbsp;대해&amp;nbsp;소개&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dytis.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;embedding은 BAAI/bge-m3 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737880058321&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from langchain_community.embeddings import HuggingFaceBgeEmbeddings

model_name = &quot;BAAI/bge-m3&quot;
model_kwargs = {&quot;device&quot;: &quot;cpu&quot;}
encode_kwargs = {&quot;normalize_embeddings&quot;: True}
hf = HuggingFaceBgeEmbeddings(
    model_name=model_name, model_kwargs=model_kwargs, encode_kwargs=encode_kwargs
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Percentile&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737880090466&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text_splitter = SemanticChunker(hf, breakpoint_threshold_type=&quot;percentile&quot;)
text_splitter.create_documents([orgin_doc])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;1248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rmvib/btsL12YnWs5/RCDBExUapyEQ7Vk94nWG51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rmvib/btsL12YnWs5/RCDBExUapyEQ7Vk94nWG51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rmvib/btsL12YnWs5/RCDBExUapyEQ7Vk94nWG51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRmvib%2FbtsL12YnWs5%2FRCDBExUapyEQ7Vk94nWG51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1746&quot; height=&quot;1248&quot; data-origin-width=&quot;1746&quot; data-origin-height=&quot;1248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Standard Deviation&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737880157859&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text_splitter = SemanticChunker(hf, breakpoint_threshold_type=&quot;standard_deviation&quot;)
text_splitter.create_documents([orgin_doc])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;1160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/expQe9/btsL3ispSsn/kvWtrF46CY1d4lmqn79BOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/expQe9/btsL3ispSsn/kvWtrF46CY1d4lmqn79BOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/expQe9/btsL3ispSsn/kvWtrF46CY1d4lmqn79BOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexpQe9%2FbtsL3ispSsn%2FkvWtrF46CY1d4lmqn79BOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1748&quot; height=&quot;1160&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;1160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Interquartile&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737880171185&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text_splitter = SemanticChunker(hf, breakpoint_threshold_type=&quot;interquartile&quot;)
text_splitter.create_documents([orgin_doc])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nEiD0/btsL3lim4Ej/vkf3VCemTi1GptTK71epb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nEiD0/btsL3lim4Ej/vkf3VCemTi1GptTK71epb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nEiD0/btsL3lim4Ej/vkf3VCemTi1GptTK71epb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnEiD0%2FbtsL3lim4Ej%2Fvkf3VCemTi1GptTK71epb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1500&quot; height=&quot;1254&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Gradient&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1737880184797&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text_splitter = SemanticChunker(hf, breakpoint_threshold_type=&quot;gradient&quot;)
text_splitter.create_documents([orgin_doc])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1446&quot; data-origin-height=&quot;1284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxMwAv/btsL2QizvC7/l6v0ZPXEK4aOBI7ctIv5Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxMwAv/btsL2QizvC7/l6v0ZPXEK4aOBI7ctIv5Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxMwAv/btsL2QizvC7/l6v0ZPXEK4aOBI7ctIv5Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxMwAv%2FbtsL2QizvC7%2Fl6v0ZPXEK4aOBI7ctIv5Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1446&quot; height=&quot;1284&quot; data-origin-width=&quot;1446&quot; data-origin-height=&quot;1284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>AI/검색 시스템</category>
      <author>pfldy2850</author>
      <guid isPermaLink="true">https://dytis.tistory.com/111</guid>
      <comments>https://dytis.tistory.com/111#entry111comment</comments>
      <pubDate>Sun, 26 Jan 2025 17:31:29 +0900</pubDate>
    </item>
  </channel>
</rss>