<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>여분의 해마</title>
    <link>https://chaeeunsong.tistory.com/</link>
    <description>지식그래프를 공부하는 대학원생입니다.
매번 잊어버리는 것들을 기록하려고 합니다 </description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 05:58:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>송채채</managingEditor>
    <image>
      <title>여분의 해마</title>
      <url>https://tistory1.daumcdn.net/tistory/5708859/attach/b91a15c12ac24d0782a9504432ad79ac</url>
      <link>https://chaeeunsong.tistory.com</link>
    </image>
    <item>
      <title>[논문 리뷰] SPARQL-LLM: Real-Time SPARQL Query Generation from Natural Language Questions</title>
      <link>https://chaeeunsong.tistory.com/115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;논문 요약: SPARQL-LLM&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경량 메타데이터(질의 예시 + 스키마)를 활용해 자연어 질문을 실시간&amp;middot;저비용으로 정확한 SPARQL 질의로 변환하는, 오픈소스 및 트리플스토어 독립적 시스템&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;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;SPARQL의 높은 진입장벽:&lt;/b&gt; 지식 그래프(KG)에서 SPARQL 질의 작성은 문법, 복잡한 스키마 이해, 연합 질의(Federated Query) 지식 등이 필요하여 어려운 작업임&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기존 연구의 한계:&lt;/b&gt; 최신 LLM 접근법들은 주로 단일 소스에서의 정확도에만 치중하며, 실제 운영 환경에서 중요한 &lt;b&gt;응답 시간(Runtime), 비용, 연합 질의 능력&lt;/b&gt;은 간과하는 경향이 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도메인 특수성:&lt;/b&gt; 특히 생명정보학(Bioinformatics) 도메인은 데이터가 방대하고 스키마가 복잡하며 빠르게 진화하여 기존 시스템들이 대응하기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: 파인튜닝을 하지 않고, 프롬프팅과 임베딩만으로 구성했다는 점에서 인상적이었음. 파인튜닝을 할 수 없는 환경이 많기때문에,,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 제안 방법: SPARQL-LLM의 아키텍처&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPARQL-LLM은 엔드포인트에서 직접 추출한 &lt;b&gt;경량 메타데이터&lt;/b&gt;를 활용함&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;A. 제공되는 컨텍스트 (Provided Context)&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;질의 예시 (Query Examples):&lt;/b&gt; 사람이 작성한 실제 질문-질의 쌍을 활용하여 사용자 의도와 실제 쿼리 간의 간극을 메움&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 인지형 스키마 (Data-Aware Schema):&lt;/b&gt; VoID 기술서를 통해 클래스 간 관계를 파악하고, 이를 LLM이 이해하기 쉬운 &lt;b&gt;ShEx(Shape Expressions)&lt;/b&gt; 형태로 변환하여 제공함&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[cite_start]B. 시스템 구성 모듈 [cite: 45, 104]&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;Indexing Component:&lt;/b&gt; 엔드포인트에서 예시를 수집하고, 데이터 스키마 등을 임베딩하여 벡터 데이터베이스에 저장함 (최초 배포 시 1회 수행)&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;Indexing Component. This component is responsible for: i) automatically retrieving the aforementioned metadata (i.e., the query examples and the data schema) from each endpoint,ii)generating monolingualormultilingualembeddings for this metadata, and iii) index this metadata together with the generated embeddings into a vector database. Hence with this component, which is executed only on the initial deployment of our system, we enable the retrieval and semantic matching of the Prompt Building Component. We also index in the vector database general information about the content of each endpoint, which we retrieve from the schema.org metadata available on each endpoint, which we then provide when related questions are posed by the users (e.g., &amp;ldquo;Which resources are supported by the system?&amp;rdquo;).&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Prompt Building Component:&lt;/b&gt; 질문을 하위 질문으로 분해하고, 벡터 검색을 통해 가장 관련성 높은 예시와 클래스 정보를 추출하여 프롬프트를 구성함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SPARQL Generation Component:&lt;/b&gt; LLM을 통해 쿼리를 생성하며, 생성된 쿼리가 스키마에 부합하는지 &lt;b&gt;검증 및 수정 루프(최대 3회)&lt;/b&gt;를 거침&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SPARQL Execution Component:&lt;/b&gt; 최종 쿼리를 실행하고, 결과값을 다시 LLM에 전달하여 사용자 친화적인 자연어 답변으로 변환함&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: 임베딩 벡터를 사용해서 예시 쿼리나 데이터를 프롬프트에 동적으로 주입하는 전략이 유용해보임&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p 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;1046&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHhMMa/dJMcaiJIkQi/BC6xGErMGx6oPp6K4yYzkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHhMMa/dJMcaiJIkQi/BC6xGErMGx6oPp6K4yYzkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHhMMa/dJMcaiJIkQi/BC6xGErMGx6oPp6K4yYzkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHhMMa%2FdJMcaiJIkQi%2FBC6xGErMGx6oPp6K4yYzkk%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;1046&quot; height=&quot;529&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 주요 평가 결과&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;A. TEXT2SPARQL 챌린지 성과 (일반 KG: DBpedia 등)&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; 기존 우승 시스템 대비 &lt;b&gt;F1 Score가 24% 향상&lt;/b&gt;됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;속도:&lt;/b&gt; 타 시스템 대비 &lt;b&gt;최대 36배 빠름&lt;/b&gt; (중앙값 3.1초 vs 112.5초)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용:&lt;/b&gt; 질문당 &lt;b&gt;최대 $0.01 수준&lt;/b&gt;으로 매우 경제적임&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;B. BioKGQA 평가 (전문 도메인: UniProt, Bgee 등)&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;10배 더 많은 트리플 패턴&lt;/b&gt;을 가진 복잡한 연합 질의에서도 유효한 성능을 보임&lt;/li&gt;
&lt;li&gt;데이터 규모가 수십억 개인 실제 공공 엔드포인트에서도 잘 확장(Scale)됨을 입증함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;C. 하이퍼파라미터 인사이트&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; 예시(Few-shot)가 없을 때 성능이 가장 크게 하락함 (핵심 컴포넌트 중 1위)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;스키마 정보:&lt;/b&gt; 미지의 KG(Corporate)에서는 전체 스키마를 넣으면 유리하지만, 이미 LLM이 잘 아는 KG(DBpedia)에서는 큰 차이가 없음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;임베딩 모델:&lt;/b&gt; 다국어 지원 시에는 다국어 임베딩 모델(예: Jina, SBERT-M)이 필수적임&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: 5~10개 정도의 적절한 예시만 있어도 성능이 포화(Plateau)된다고 함. 그 이상의 예시는 불필요할 수도&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 결론 및 향후 과제&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;b&gt;운영 가능(Production-ready)&lt;/b&gt;한 시스템이며, 실제 생명정보학 포털(&lt;a href=&quot;https://www.expasy.org/chat&quot;&gt;expasy.org/chat&lt;/a&gt;)에 배포됨&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;한계:&lt;/b&gt; 저자원 언어 및 더 넓은 범위의 SPARQL 기능 지원이 필요함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;향후 계획:&lt;/b&gt; MCP(Model Context Protocol) 서비스 통합 및 데이터 분석 워크플로우 전반으로의 확장&lt;/li&gt;
&lt;/ul&gt;
&lt;p 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;1480&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TX3g4/dJMcaaZflCn/9gxFOFoktDssoMNeMzfDpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TX3g4/dJMcaaZflCn/9gxFOFoktDssoMNeMzfDpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TX3g4/dJMcaaZflCn/9gxFOFoktDssoMNeMzfDpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTX3g4%2FdJMcaaZflCn%2F9gxFOFoktDssoMNeMzfDpK%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;1480&quot; height=&quot;765&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;765&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;1536&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9GNxB/dJMcac3OF94/yd2sbxTDz6w93H5saVXf91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9GNxB/dJMcac3OF94/yd2sbxTDz6w93H5saVXf91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9GNxB/dJMcac3OF94/yd2sbxTDz6w93H5saVXf91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9GNxB%2FdJMcac3OF94%2Fyd2sbxTDz6w93H5saVXf91%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;1536&quot; height=&quot;778&quot; data-origin-width=&quot;1536&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;2026-04-16 기준 실제로 데모 서비스에 접근이 되어 테스트 해보았음. 예시 질의 중 하나로 했더니 대략 20초 정도 소요됨&lt;/p&gt;</description>
      <category>knowledgegraph</category>
      <category>text2sparql</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/115</guid>
      <comments>https://chaeeunsong.tistory.com/115#entry115comment</comments>
      <pubDate>Thu, 16 Apr 2026 10:58:51 +0900</pubDate>
    </item>
    <item>
      <title>[논문 리뷰] GraphRAG, OntologyRAG, Multi Hop 추론 관련 논문</title>
      <link>https://chaeeunsong.tistory.com/114</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;서론: 인공지능 추론 아키텍처의 패러다임 전환&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 대규모 언어 모델(LLM, Large Language Models)은 단순한 텍스트 생성을 넘어, 고도의 논리적 추론과 도메인 특화 지식 처리가 요구되는 복잡한 작업(Task)에 투입되고 있다. 초기 LLM의 한계인 환각 현상(Hallucination)과 지식의 정적 성질을 극복하기 위해 외부 지식 베이스를 활용하는 검색 증강 생성(RAG, Retrieval-Augmented Generation) 기법이 도입되었다. 그러나 전통적인 벡터 기반 RAG는 문서의 의미론적 조각(Chunk)을 독립적으로 검색하기 때문에, 문서 전체를 아우르는 전역적 맥락(Global Context)의 이해나 엔티티 간의 복잡한 관계망을 추적해야 하는 다중 홉 추론(Multi-hop Reasoning)에서 명확한 한계를 노출했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 맥락에서 지식 그래프(KG, Knowledge Graph)의 위상수학적 구조와 LLM의 능력을 결합한 GraphRAG 아키텍처, 자율적 온톨로지 생성 기술, 그리고 이를 오케스트레이션(Orchestration)하는 멀티 에이전트 시스템이 새로운 표준으로 부상하고 있다. 본 보고서는 제공된 24편의 핵심 학술 논문들을 주제별로 묶어, 각 논문이 제시하는 요약(Summary), 방법론(Methodology), 그리고 파이썬(Python) 생태계 기반의 실제 구현 메커니즘(Implementation)을 심층적으로 분석한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. GraphRAG의 진화와 기반 프레임워크 설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 그래프를 RAG에 통합하는 과정은 단순한 데이터베이스 교체가 아닌, 검색 패러다임 자체의 변화를 의미한다. 이 섹션에서는 GraphRAG의 기틀을 마련한 핵심 연구들과 이를 집대성한 서베이 논문들을 분석한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전역적 맥락 이해를 위한 커뮤니티 요약 기법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;From Local to Global: A Graph RAG Approach to Query-Focused Summarization&quot; (2024) 논문은 전체 코퍼스에 대한 전역적(Global)인 이해가 필요한 질의응답을 처리하기 위한 혁신적인 방법론을 제시한다. 벡터 기반 RAG가 문서의 국소적(Local) 정보만 검색하는 한계를 극복하기 위해, 이 연구는 텍스트에서 추출한 엔티티와 관계를 바탕으로 지식 그래프를 구축하고, 커뮤니티 탐지(Community Detection) 알고리즘을 통해 노드들을 논리적 그룹으로 클러스터링하는 방법론을 채택했다. 구축된 그래프 커뮤니티별로 요약(Community Summaries)을 사전 생성한 뒤, 실행 시간(Runtime)에 질의가 들어오면 이 요약본들을 바탕으로 답변을 통합 생성한다. 실제 구현 과정에서 이 연구는 다중 파트(Multipart) LLM 프롬프트를 사용하여 텍스트 내의 모든 엔티티(이름, 유형, 설명)와 이들 간의 관계를 단일 구분된 파이썬 튜플(Tuple) 리스트 형태로 반환하도록 설계했다. 파이썬 환경에서 그래프 커뮤니티 구조를 탐지하고 관리하기 위해 NetworkX 와 같은 라이브러리가 그래프 인스턴스화에 사용되며, 커뮤니티 요약 데이터를 체계적으로 관리하기 위해 JSON 포맷 구조의 딕셔너리를 적극 활용한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GraphRAG 기술의 체계적 분류 및 서베이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GraphRAG 방법론이 급증함에 따라 이를 체계화한 세 편의 서베이 논문이 등장했다. &quot;A Survey of Graph Retrieval-Augmented Generation&quot; (2025) 논문은 GraphRAG를 인덱싱(G-Indexing), 검색(G-Retrieval), 생성(G-Generation)의 세 가지 핵심 파이프라인으로 정형화했다. 이 연구는 지식의 조직 방식에 따라 세밀한 도메인 지식을 제공하는 &amp;lsquo;지식 기반(Knowledge-based) GraphRAG&amp;rsquo;와, 대규모 확장이 가능하도록 팩트 링킹(Fact Linking)을 활용하는 &amp;lsquo;인덱스 기반(Index-based) GraphRAG&amp;rsquo;로 아키텍처를 세분화하는 방법론을 제시한다. &quot;Graph Retrieval-Augmented Generation: A Survey (ACM TIS)&quot; (2025/2026) 역시 이러한 3단계 분류를 따르며, 지식 품질과 시스템 일반화 측면의 과제를 분석한다. 또한 &quot;Graph-based Approaches and Functionalities in Retrieval-Augmented Generation&quot; (2026) 논문은 그래프 기술이 단순히 검색을 넘어 RAG의 데이터베이스 구축 알고리즘과 파이프라인 전반에 어떻게 적용되는지 포괄적으로 다룬다. 이들 서베이 연구는 이론적 분석에 그치지 않고, 연구자들이 기술을 실증할 수 있도록 깃허브 리포지토리(pengboci/GraphRAG-Survey)를 통해 파이썬 기반 오픈소스 프로젝트와 벤치마크 데이터셋을 큐레이션하여 제공하는 구현 방식을 취한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;From Local to Global (2024)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;그래프 커뮤니티 클러스터링 및 계층적 요약&lt;/td&gt;
&lt;td&gt;Tuple 기반 엔티티 추출, JSON 파싱, NetworkX 그래프 커뮤니티 탐지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;A Survey of Graph Retrieval-Augmented Generation (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;지식 기반 vs 인덱스 기반 아키텍처 분류 방법론&lt;/td&gt;
&lt;td&gt;Python 기반 GraphRAG 생태계 오픈소스 리포지토리 큐레이션 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 멀티 에이전트 시스템과 동적 지식 추론 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적인 지식 검색을 넘어, 외부 도구를 동적으로 사용하고 에이전트 간 협업을 통해 지식 그래프를 확장하는 메커니즘은 최신 AI 시스템의 핵심 동력이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사고 지식 그래프 (Knowledge Graph of Thoughts, KGoT)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Affordable AI Assistants with Knowledge Graph of Thoughts&quot; (2024/2025) 논문은 고비용 대형 모델에 의존하지 않고 경제적이고 효율적인 AI 어시스턴트를 개발하기 위한 KGoT 아키텍처를 제안한다. 이 방법론은 모델의 선형적인 프롬프트 의존성을 탈피하기 위해, 해결해야 할 과제와 관련된 지식을 동적 지식 그래프(Dynamic KG) 구조로 추출 및 정형화한다. 이후 수학 문제 해결기, 웹 크롤러, 파이썬 코드 실행 환경 등 외부 도구를 활용하여 지식 그래프를 반복적으로 보완하며 추론을 전개한다. 구현 측면에서 이 프로젝트는 파이썬 3.10 이상 환경에서 LangChain을 활용해 전체 도구 사용을 오케스트레이션하며, Ollama를 통해 로컬 모델을 구동한다. 지식 그래프의 논리적 관리를 위해 NetworkX 모듈을 기본으로 사용하고, Neo4j와 RDF4J 데이터베이스 백엔드를 통합하여 그래프를 쿼리한다. 웹 브라우징에는 Playwright와 SerpAPI가 채택되었으며, 보안이 중요한 파이썬 코드 도구 실행은 Docker 컨테이너 또는 Sarus를 통해 샌드박스 환경에서 안전하게 처리된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;멀티 에이전트 기반 자율적 지식 그래프 강화 (KARMA)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;KARMA: Leveraging Multi-Agent LLMs for Automated Knowledge Graph Enrichment&quot; (2025) 논문은 펍메드(PubMed)와 같은 방대한 비정형 과학 문헌에서 높은 정밀도로 지식을 추출해 기존 지식 그래프를 자율적으로 확장하는 프레임워크를 다룬다. 이 방법론은 단일 모델의 환각 현상을 억제하기 위해 IngestionAgent, Entity discovery, Relation extraction, Conflict resolution 등 특화된 역할을 부여받은 9개의 멀티 에이전트 파이프라인을 구축하고, 에이전트 간 상호 교차 검증(Cross-agent verification)을 수행하도록 설계되었다. 구현 시 문헌 병합 단계에서 파이썬 정규표현식 및 파서 모듈을 사용하여 OCR 오류를 보정하고 특수 문자를 정규화한 뒤, 추출된 메타데이터(DOI, 저자 등)와 본문을 JSON 구조로 포맷팅하여 에이전트 간 통신에 사용한다. 전체 오케스트레이션 로직 및 프롬프트 템플릿은 깃허브 리포지토리(YuxingLu613/KARMA 및 Fraunhofer-SCAI-Applied-Semantics/KG-Orchestra)에 파이썬 기반 오픈소스로 구현되어 접근 가능하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;에이전트 라우팅을 위한 그래프 모델링 (Agent-as-a-Graph)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 멀티 에이전트 시스템에서 어떤 도구나 에이전트를 호출할지 결정하는 것은 성능과 직결된다. &quot;Agent-as-a-Graph Knowledge Graph-Based Tool&quot; (2024/2025) 논문은 수많은 도구(Tools)와 에이전트(Agents)의 메타데이터 관계를 이분 그래프(Bipartite Graph)로 모델링하는 방법론을 제안한다. 구현 단계에서는 모델 컨텍스트 프로토콜(MCP, Model Context Protocol) 카탈로그를 기반으로, 초기에는 벡터 검색(Vector Search, BM25 등)을 통해 관련 노드를 빠르게 찾는다. 이후 파이썬 기반 스크립트를 통해 타입별 가중치가 적용된 상호 순위 융합(wRRF, weighted Reciprocal Rank Fusion) 알고리즘을 연산하여 순위를 재조정(Reranking)하고, 부모 에이전트 노드로 그래프를 탐색(Traversal)하여 최종 도구를 결정한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;KGoT (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;동적 그래프 생성 및 외부 도구 반복 통합&lt;/td&gt;
&lt;td&gt;LangChain, NetworkX, Ollama, Playwright, Neo4j, Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;KARMA (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;9개 전문 에이전트 간 교차 검증 및 지식 추출&lt;/td&gt;
&lt;td&gt;메타데이터 추출 정규표현식, JSON 데이터 포맷팅, 멀티 에이전트 오케스트레이션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Agent-as-a-Graph (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;도구/에이전트 이분 그래프 기반 라우팅&lt;/td&gt;
&lt;td&gt;MCP 프로토콜 파싱, Vector Search 임베딩, wRRF 가중치 융합 스크립트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 단계별 검색 및 다중 홉 추론 메커니즘의 고도화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM이 o1 모델과 같이 고도의 체인형 사고를 전개할 때, 검색 메커니즘 역시 정적 주입에서 동적 탐색으로 진화해야 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 응용 분야의 하이브리드 에이전트 RAG (Agentic RAG with KGs)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications&quot; (2025) 논문은 벡터 데이터베이스의 유사도 검색과 지식 그래프의 구조적 탐색을 결합한 INRAExplorer 아키텍처를 제시한다. 이 방법론은 복잡한 질의가 주어졌을 때, 에이전트가 자체적으로 SearchPublications (출판물 검색), SearchConceptsKeywords (개념 검색), SearchGraph (그래프 순회) 등의 다중 도구를 상황에 맞게 호출하며 다중 홉(Multi-hop) 추론을 수행하도록 설계되었다. 실제 시스템 구현을 위해 파이썬 생태계의 다양한 도구가 융합되었다. 에이전트 오케스트레이션과 도구 호출은 Mirascope 프레임워크가 담당하며, 비정형 학술 PDF 문서의 텍스트 파싱을 위해 GROBID가 사용된다. 추출된 지식의 벡터 임베딩은 Qdrant에, 구조화된 관계 데이터는 Neo4j에 저장되며, 오픈소스 deepseek-r1-0528 모델이 추론 엔진으로 구동된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동적 하위 그래프 검색을 통한 추론 단계 진화 (Graph-Augmented Reasoning)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Graph-Augmented Reasoning: Evolving Step-by-Step Knowledge Graph Retrieval for LLM Reasoning&quot; (2025) 논문은 LLM이 중간 단계 추론에서 흔히 겪는 환각 현상을 억제하기 위한 방법론을 제안한다. 이 접근법(KG-RAR)은 전통적 RAG처럼 처음 한 번만 지식을 주입하는 것이 아니라, LLM이 사고의 사슬(CoT)을 전개하는 각 스텝마다 그 맥락에 부합하는 서브그래프(Sub-KGs)를 지식 그래프로부터 동적으로 재검색하고 투입하여 추론의 깊이와 일관성을 스케일링한다. 구현 환경에서는 Llama-3B 및 Qwen과 같은 오픈소스 모델들이 평가되었으며, 강화학습(RLHF) 파인튜닝과 보상 모델링을 효율적으로 수행하기 위해 파이썬 기반의 OpenRLHF 생태계를 기반으로 모듈이 확장 구성되었다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Agentic RAG with KGs (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;에이전트 도구 동적 호출 기반 다중 홉 탐색&lt;/td&gt;
&lt;td&gt;Mirascope, GROBID, Qdrant, Neo4j 및 API 라우팅 설계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Graph-Augmented Reasoning (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;스텝별 CoT 동기화 및 서브그래프 동적 검색&lt;/td&gt;
&lt;td&gt;OpenRLHF 프레임워크 연동, 상태 추적 기반 다중 프롬프팅 제어&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 자율적 스키마 유도 및 온톨로지 생성 기술의 도약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전 정의된 스키마에 데이터를 끼워 맞추던 전통적 지식 엔지니어링의 병목을 해소하기 위해, 데이터로부터 직접 구조를 도출해내는 자율적 파이프라인이 산업적 주목을 받고 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동적 스키마 유도를 통한 자율적 KG 구축 (AutoSchemaKG)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;AutoSchemaKG: Autonomous Knowledge Graph Construction through Dynamic Schema Induction from Web-Scale Corpora&quot; (2025) 논문은 전문가의 개입 없이 방대한 웹 텍스트로부터 지식 그래프를 자율 구축하는 혁신적 방법론을 제시한다. 이 프레임워크는 엔티티와 이벤트를 추출하는 단계와, 이를 상위 개념으로 추상화(Conceptualization)하여 동적으로 스키마를 유도하는 단계로 구성된다. 특히 사물(Entity)뿐만 아니라 사건(Event)을 그래프의 1급 객체로 취급하여 인과관계와 절차적 지식을 포착하는 것이 특징이다. 구현 측면에서 파이썬 비중이 매우 높은 독자적인 atlas-rag 패키지를 개발하여 파이프라인을 구동한다. 텍스트 임베딩을 위해 transformers 라이브러리의 NV-embed-v2 모델을 사용하며, 트리플 생성 시 openai 인터페이스를 호출한다. 문서 전처리를 위해 pdf_process가, 그래프 생성을 위해 NetworkX와 Neo4j가 묶여 단일 주피터 노트북(Jupyter Notebook) 파이프라인 내에서 전체 작업이 실행되도록 구성되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인간 참여형 온톨로지 그라운딩 에이전트 (SCHEMA-MINERpro)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과학 문헌과 같이 고도의 정밀성이 요구되는 도메인을 위해 &quot;SCHEMA-MINERpro: Agentic AI for Ontology Grounding over LLM-Discovered Scientific Schemas in a Human-in-the-Loop Workflow&quot; (2025) 논문은 인간 검증을 파이프라인에 통합한 방법론을 제안한다. 초기 스키마 마이닝, 소규모 코퍼스 기반의 정제, 대규모 코퍼스 검증, 그리고 최종적으로 표준 온톨로지(QUDT 등)에 시맨틱 그라운딩(Semantic Grounding)을 수행하는 4단계의 체계적인 워크플로우를 따른다. 이 과정에서 에이전트는 어휘적 휴리스틱과 다중 단계 추론을 결합하여 매핑 정확도를 높인다. 구현체인 schema-miner 파이썬 패키지는 LangChain 프레임워크 위에서 에이전트의 사고 흐름을 제어한다. 데이터 저장과 조작을 위해 파이썬 표준 라이브러리인 json과 파일 시스템 관리를 위한 pathlib이 광범위하게 쓰이며, API 통신은 OpenAI를 비롯해 로컬 모델 실행기인 Ollama와 HuggingFace 허브 생태계와 상호 호환되도록 작성되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;비정형 웹 문서의 마크업 자동 생성 (LLM4Schema.org)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;LLM4Schema.org: Generating Schema.org Markups with Large Language Models&quot; (2024/2025) 논문은 SEO(검색엔진 최적화) 마크업이 결여된 웹 문서를 대상으로 LLM을 이용해 자율적으로 Schema.org 표준 마크업을 생성하고 유효성을 평가하는 방법론을 제시한다. 이는 정해진 정답셋(Ground Truth)이 없는 상태에서도 LLM이 인간 생성 마크업 수준의 데이터를 도출해낼 수 있는지를 테스트하는 프레임워크다. 구현을 위해 웹 페이지의 DOM 트리를 파싱하고 데이터를 수집하는 파이썬 크롤링 프레임워크 Scrapy와 Selenium 라이브러리가 도입되었다. 정보 추출 프롬프트 설계 시 파이썬 클래스 구조를 텍스트 형태로 모델에 전달하고, 추출된 정보가 해당 클래스의 객체(Object) 인스턴스로 변환되어 반환되게 하는 기법이 사용되었다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;AutoSchemaKG (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;2단계 동적 스키마 개념화 및 이벤트 모델링&lt;/td&gt;
&lt;td&gt;atlas-rag, transformers, openai, NetworkX, Neo4j&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SCHEMA-MINERpro (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Human-in-the-Loop 기반 4단계 온톨로지 매핑&lt;/td&gt;
&lt;td&gt;schema-miner, LangChain, json, pathlib, Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLM4Schema.org (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;웹 콘텐츠 정답셋 없는 마크업 자동 생성&lt;/td&gt;
&lt;td&gt;Scrapy, Selenium, 파이썬 클래스 기반 JSON 매핑&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 도메인 특화 온톨로지 엔지니어링 및 메타인지 제어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정형화된 지식의 정수라 할 수 있는 '온톨로지'를 생성할 때, 대형 언어 모델의 추론 절차를 온톨로지 엔지니어링 방법론으로 어떻게 규제할 것인지에 대한 연구가 활발히 진행되고 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;메타인지 프롬프팅과 분해 기법 (Ontology Generation)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Ontology Generation using Large Language Models&quot; (2025) 논문은 LLM이 복잡한 온톨로지를 단번에 생성할 때 발생하는 오류를 방지하기 위한 메타인지 프롬프팅(Metacognitive Prompting) 'Ontogenia' 방법론을 상세히 제안한다. 이 방법론은 모델에게 온톨로지 엔지니어라는 명확한 페르소나를 부여하고, 전체 요구사항을 서브태스크로 분해(Subtask-decomposed)하여 한 번에 하나의 역량 질의(CQ, Competency Question)만 평가하도록 제한하는 체인형 프롬프팅(CoT)의 진화형 모델이다. 실제 구현 과정에서 생성된 온톨로지는 논리적 모순이나 빈 출력(Empty output) 오류를 확인하기 위해 파이썬 생태계와 연동된 OOPS!(Ontology Pitfall Scanner) 도구에 전송되며, 이를 통해 자동 피드백 루프를 형성하여 온톨로지 구조를 다듬어 나간다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;생명과학 분야 온톨로지 학습 파이프라인 (LLMs4Life)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특수 전문 지식이 집약된 생명과학 도메인을 타겟으로 한 &quot;LLMs4Life: Large Language Models for Ontology Learning in Life Sciences&quot; (2024) 논문은 기존의 복잡한 온톨로지 설계 표준인 NeOn 방법론을 프롬프트 파이프라인에 이식하는 방법론을 설계했다. 단순히 자연어를 Turtle 신택스로 변환하는 것을 넘어, 전문가의 컨텍스트 리치(Context-rich) 피드백이 모델 성능에 미치는 영향을 정량적으로 분석한다. 이 연구는 Python 3 환경에서 PyTorch 프레임워크를 기반으로 NeOn-GPT라는 파이프라인 코드를 작성하였다. 텍스트 처리와 추론 엔진 인터페이스를 통합한 해당 워크플로우 코드는 연구 재현을 위해 깃허브 리포지토리(andreamust/NEON-GPT)에 공개되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특화 언어 모델을 통한 온톨로지 생성 방법론 탐구&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Methodological Exploration of Ontology Generation with a Dedicated Large Language Model&quot; (2025) 논문은 자율주행차 인터페이스와 같이 고도로 제약된 산업 도메인의 온톨로지를 특화된 언어 모델을 이용해 자동으로 생성하기 위한 접근법을 다룬다. 이 방법론은 범용 LLM 대신 파인튜닝된 전용 언어 모델이 어떻게 더 엄격한 클래스 계층과 제약 조건을 학습하고 배출할 수 있는지를 탐구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현 관점에서는 파이썬 환경의 커스텀 모델 파인튜닝 스크립트와 검증 데이터셋 파싱 코드를 바탕으로, 생성된 온톨로지의 구문적 정확성과 구조적 일관성을 평가하는 검증 파이프라인을 운영한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Ontology Generation (Lippolis, 2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Ontogenia 메타인지 프롬프팅 및 CQ 기반 태스크 분해&lt;/td&gt;
&lt;td&gt;OOPS! API 통신 연동, 단계별 프롬프트 제어 스크립트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLMs4Life (2024)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;NeOn 방법론의 프롬프트 파이프라인 이식&lt;/td&gt;
&lt;td&gt;Python 3, PyTorch, 깃허브 NeOn-GPT 파이프라인 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Methodological Exploration (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;특정 도메인 전용 모델을 통한 제약적 파인튜닝&lt;/td&gt;
&lt;td&gt;모델 파인튜닝 스크립트 및 구문 평가 검증기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 온톨로지 그라운딩 기반의 응용 시스템 설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 온톨로지를 실제 산업용 RAG 시스템이나 시스템 엔지니어링 모델링 워크플로우에 접목하여 실질적인 추론 능력을 배가시키는 방법론들이 존재한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;비정형 기술 문서의 자율적 온톨로지 도출 RAG (OntoRAG)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기 릴레이와 같은 산업용 기술 매뉴얼의 비정형 문서에서 온톨로지를 자율적으로 도출하여 RAG 성능을 향상시키는 파이프라인이 &quot;OntoRAG: Enhancing Question-Answering through Automated Ontology Derivation from Unstructured Knowledge Bases&quot; (2025) 논문에 제안되었다. 이 방법론은 일반적인 길이 기반 청킹 대신 문서의 제목(Title)과 논리적 의미 단위를 결합한 하이브리드 청킹(Hybrid Chunking), 그리고 문장 간 임베딩의 코사인 유사도를 연산하여 인접 청크를 병합하는 시맨틱 청킹(Semantic Chunking) 기법을 사용한다. 이를 파이썬 코드로 구현하기 위해, PDF 문서 내의 레이아웃 요소를 식별하는 unstructured 라이브러리와 광학 문자 인식(OCR)을 위한 pytesseract가 도입되었다. 추출된 키 요소(이름, 정의 임베딩)들은 파이썬 scikit-learn 라이브러리의 K-means 기반 알고리즘을 통해 클러스터링되어 온톨로지 클래스를 형성하며, 커뮤니티 구조 분석에는 graspologic 네트워크 라이브러리가 활용된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;지식 하이퍼그래프 결합 RAG (Ontology-grounded RAG)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Ontology-grounded retrieval-augmented generation&quot; (2024/2025) 연구는 단순한 노드-엣지 연결을 넘어 다중 관계를 표현할 수 있는 지식 하이퍼그래프(Knowledge Hypergraph)와 도메인 온톨로지를 결합하는 구조적 방법론을 제시한다. 이 모델(OG-RAG)은 문서 내 사실적 지식을 하이퍼엣지(Hyperedge) 클러스터로 캡슐화하고, 질의에 응답할 때 최적화 알고리즘을 통해 가장 의미 있는 최소한의 하이퍼엣지 집합을 검색해내는 메커니즘을 작동시킨다. 이 방법론은 한계가 명확한 기존 벡터 기반 검색을 대체하기 위해 파이썬 기반 오픈소스 라이브러리인 MIRAGE 환경 내에서 실험 환경을 구축하고, 다양한 모델의 컨텍스트 창 내 정보 보존율과 환각 검출력을 평가하는 방식을 채택했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;도메인 온톨로지 기반의 LLM 보조 그래프 쿼리 생성 (OB-GRAG)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;OB-GRAG: LLM Assisted Graph Creation and Querying via Domain Specific Ontology&quot; (2024/2025) 논문은 특정 도메인의 온톨로지를 사전에 모델에 주입하여 LLM이 그래프 데이터베이스와 직접 상호작용하는 방법론을 설계했다. 프레임워크는 자연어 질의가 입력되면 온톨로지 구조를 참조하여 문법적으로 유효한 Cypher 쿼리로 변환하고, 이를 그래프 DB에서 실행한 결과를 바탕으로 최종 답변을 합성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구현 파이프라인에서는 파이썬 환경의 Neo4j 공식 드라이버와 LangChain의 그래프 쿼리 체인을 결합하여 LLM API와 데이터베이스 통신 모듈 사이의 미들웨어 역할을 수행하도록 구성된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시스템 엔지니어링을 위한 온톨로지 기반 프롬프팅 (Ontology-Driven LLM Assistance)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Ontology-Driven LLM Assistance for Task-Oriented Systems&quot; (2025) 논문은 모델 기반 시스템 엔지니어링(MBSE, Model-Based Systems Engineering) 환경에서 요구사항 문서로부터 시스템 구성 요소를 도출하는 방법론을 제안한다. LLM 프롬프트 생성 시 설계자가 사전에 정의한 텍스트 대 시스템 모델 온톨로지(요구사항, 기능, 모드, 구성 요소)를 강제 주입하여 출력의 포맷을 표준화한다. 이를 처리하기 위해 시스템에서 텍스트로 추출된 각 요소를 MBSE 모델 타입(예: SysML 블록)으로 변환하고 맵핑하는 NALMAGE와 같은 전용 파이썬 스크립트 패키지가 미들웨어로 작동하여 설계 자동화 툴과 인터페이스를 구성한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;OntoRAG (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;하이브리드 청킹, 임베딩 클러스터링을 통한 자동 온톨로지화&lt;/td&gt;
&lt;td&gt;unstructured, pytesseract, scikit-learn, graspologic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Ontology-grounded RAG (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;지식 하이퍼그래프 캡슐화 및 최소 엣지 최적화 검색&lt;/td&gt;
&lt;td&gt;파이썬 오픈소스 라이브러리 MIRAGE 활용 아키텍처&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Ontology-Driven LLM Assistance (2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;텍스트 요구사항의 MBSE 모델 기반 매핑 프롬프팅&lt;/td&gt;
&lt;td&gt;텍스트와 모델 타입 변환용 커스텀 파이썬 패키지 (NALMAGE) 연동&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 지식의 추출 구조화 및 이기종 간 정렬 기술&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 그래프를 구성하는 가장 말단 단위인 트리플(주어-동사-목적어) 구조를 얼마나 효과적으로 추출하고, 서로 다른 그래프 간의 이질적 노드를 어떻게 정렬할 것인가에 대한 연구는 데이터 품질을 결정하는 핵심이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제로샷 및 퓨샷 추론을 활용한 트리플 추출 (Zero- and Few-Shots KG Triplet Extraction)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Zero- and Few-Shots Knowledge Graph Triplet Extraction with Large Language Models&quot; (2024) 논문은 모델 파인튜닝 없이 프롬프팅만으로 문장 내 엔티티와 관계를 지식 그래프의 기초 단위인 트리플(Triplet) 구조로 안정적으로 추출하는 방법론을 분석한다. LLM에 전체 문장을 통째로 주입할 경우 발생하는 인지 부하와 환각을 줄이기 위해, 기반 지식 베이스(KB) 유무에 따른 성능을 교차 평가한다. 구현 환경에서는 파이프라인의 효율성을 높이기 위해, LLM에 데이터를 전송하기 전 파이썬의 대표적인 자연어 처리 라이브러리인 spaCy (특히 en-core-web- 모델)를 구동하여 명명된 개체 인식(NER)을 먼저 수행한다. 또한, 대화형 텍스트 기반 시나리오 생성을 위해 TextWorld 파이썬 라이브러리가 백엔드의 상태 추적용 도구로 통합되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;LLM을 활용한 지식 그래프 간 엔티티 정렬 (LLM-Align)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;LLM-Align: Utilizing Large Language Models for Entity Alignment in Knowledge Graphs&quot; (2024) 연구는 서로 다른 지식 그래프 내의 이기종 엔티티들이 동일한 대상을 지칭하는지 병합, 판단(Entity Alignment)하기 위한 방법론이다. LLM-Align은 RAGAT 등 기존 모델을 이용해 1차 후보군을 추출한 후, 엔티티의 중요 속성과 관계를 식별하는 휴리스틱(Heuristic) 기반 규칙을 적용한다. 위치 편향(Positional bias)이나 환각을 제어하기 위해 여러 번 평가를 거치는 다중 라운드 투표(Multi-round voting) 매커니즘을 핵심 방법론으로 둔다. 가장 돋보이는 파이썬 기반 구현 기법은, 각기 다른 스키마 형식을 가진 여러 지식 데이터베이스의 출력을 통합하기 위해 데이터를 파이썬 클래스(Python classes) 형태로 균일하게 변환(Transform)한 후 프롬프팅을 진행한다는 점이다. 이 과정을 처리하는 함수와 매핑 로직은 순수 파이썬 스크립트로 구축되었다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Zero- and Few-Shots KG Triplet Extraction (2024)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;지식 베이스 기반 제로/퓨샷 트리플 추출 평가&lt;/td&gt;
&lt;td&gt;spaCy NER 전처리 모델 (en-core-web-), TextWorld 연동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLM-Align (2024)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;휴리스틱 후보군 필터링 및 다중 라운드 투표&lt;/td&gt;
&lt;td&gt;이기종 스키마의 파이썬 클래스 인스턴스화 및 매핑 스크립트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 시간적 지식 그래프, 데이터 구조 벤치마킹과 최적화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 시스템이 장기적으로 구동되기 위해서는 시간에 따른 상태 변화를 저장하는 메모리 구조, 성능을 평가하는 벤치마크, 그리고 최적의 데이터베이스 모델링 스펙이 필수적이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;에이전트 메모리를 위한 시간적 지식 그래프 (Zep)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 에이전트의 대화가 누적될수록, 과거에 참이었던 사실이 현재는 거짓이 되는 상황(예: 거주지 변경)이 발생한다. &quot;Zep: A Temporal Knowledge Graph Architecture for Agent Memory&quot; (2024/2025) 논문은 이러한 한계를 극복하기 위해 시간적 지식 그래프(Temporal Knowledge Graph)를 에이전트 메모리로 사용하는 방법론을 제안한다. 에이전트의 대화를 에피소드(Episodes) 단위로 분석하고, 엔티티와 사실을 추출한 뒤 시간에 따른 사실의 유효성 소멸(Edge Invalidation)을 관리하며, 관련 정보들을 커뮤니티로 클러스터링한다. 구현 아키텍처는 Zep의 코어 오픈소스 엔진인 Graphiti를 기반으로 구동되며, 깃허브 리포지토리(getzep/graphiti)에 공개되어 있다. 데이터 탐색은 코사인 의미론적 유사도(Cosine Semantic Similarity), Okapi BM25 텍스트 기반 검색, 넓이 우선 탐색(BFS) 방식을 결합한 하이브리드 리트리버 로직으로 구성된다. 이 파이썬 워크플로우는 내부적으로 Neo4j의 Lucene 인덱스 기능을 호출하여 수 밀리초 내에 응답하는 구조를 띤다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;텍스트화된 지식 그래프를 위한 LLM 벤치마크 (KG-LLM-Bench)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;KG-LLM-Bench: A Scalable Benchmark for Evaluating LLM Reasoning on Textualized Knowledge Graphs&quot; (2024/2025) 논문은 복잡한 하이퍼그래프 형태의 지식을 LLM이 입력으로 받아들일 수 있는 1차원 선형 텍스트로 변환(Textualization)할 때, 어떤 전략이 가장 우수한 추론 성능을 담보하는지 5가지 인코딩 관점에서 분석하는 방법론을 다룬다. 실제 벤치마킹을 위해 연구진은 파이썬과 Jupyter Notebook 환경을 바탕으로 모듈화된 파이프라인 소프트웨어를 개발했다. 이를 통해 연구자는 Llama, Qwen, GPT 등 여러 로컬 및 클라우드 모델을 교체해가며 추론력을 쉽게 평가할 수 있다. 소스 코드는 깃허브 리포지토리(uclnlp/cqd 및 Elanmarkowitz/kg-llm-bench)에 공개되어 오픈 리서치를 지원한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스마트 홈의 연결형 데이터 관리를 위한 RDF와 LPG의 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식 그래프를 구성하는 기저 데이터베이스의 논리적 구조는 탐색 효율성을 좌우한다. &quot;Linked Data for Smart Homes: Comparing RDF and Labeled Property Graphs&quot; (2020) 연구는 사물 인터넷(IoT) 환경을 위한 트리플 모델인 RDF(Resource Description Framework) 스토어와 속성 그래프(LPG, Labeled Property Graph) 모델을 정성적, 정량적으로 비교 분석하는 방법론을 다룬다. RDF는 글로벌 상호운용성(HTTP URI, 온톨로지 호환성 등)에서 매우 유리하지만, 데이터 구조가 원자적(Atomic)이어서 다중 도메인 질의 시 노드 수가 폭발적으로 증가해 복잡한 탐색에서 심각한 병목을 일으킨다. 반면 LPG(예: Neo4j)는 엣지와 노드 객체 자체에 직접 프로퍼티(Property)를 속성으로 기입할 수 있어 다중 홉 탐색 시 복잡성이 훨씬 적고 응답 속도가 빠르다. 구현 관점에서는 Restlet 프레임워크를 기반으로 스마트 홈 데이터를 수집한 후, Neo4j의 NSMTX RDF Import 플러그인을 파이썬 파이프라인에서 호출하여 RDF 그래프 구조를 LPG 환경으로 강제 변환, 임포트(Import)하고 질의 실행 속도를 벤치마킹한다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;연구 논문&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;핵심 방법론 (Methodology)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;파이썬 라이브러리 및 구현 기술 (Implementation)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Zep (Temporal KG) (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;에피소드 클러스터링 및 엣지 유효성(Edge Invalidation) 추적&lt;/td&gt;
&lt;td&gt;Graphiti 오픈소스, Neo4j Lucene 통합, Cosine/BM25/BFS 하이브리드 검색 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;KG-LLM-Bench (2024/2025)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;그래프 텍스트화 인코딩 방식 비교 및 추론 평가 확장&lt;/td&gt;
&lt;td&gt;Jupyter Notebook 기반 일괄 평가 파이프라인 (깃허브 공개)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Linked Data for Smart Homes (2020)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;RDF 원자성과 LPG 속성 저장 구조의 쿼리 복잡도 벤치마킹&lt;/td&gt;
&lt;td&gt;Restlet 연동, Neo4j NSMTX 플러그인 기반 RDF-LPG 변환 스크립트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론 및 기술적 파급 효과&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 보고서에서 분석한 24편의 학술 문헌들은, 대규모 언어 모델이 어떻게 구조화되지 않은 텍스트 환경에서 벗어나 정교하게 오케스트레이션된 지식 처리 엔진(Cognitive Engine)으로 도약하고 있는지를 극명하게 보여준다. 분석된 문헌들을 종합할 때, 지식 시스템 설계의 패러다임은 다음과 같이 구조적인 변화를 겪고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, &lt;b&gt;지식 엔지니어링의 병목이 톱다운(Top-down) 방식에서 바텀업(Bottom-up) 형태의 자율화로 역전되었다.&lt;/b&gt; 과거 도메인 전문가들이 엄격한 온톨로지를 설계한 후 데이터를 적재해야만 가능했던 지식 그래프 구축 작업이 이제는 AutoSchemaKG나 SCHEMA-MINERpro 등에서 입증되듯, LLM이 문헌을 읽고 동적으로 개념을 추상화하여 스스로 스키마를 유도(Dynamic Schema Induction)하는 자율적 프로세스로 전환되었다. 이 과정에서 메타인지 프롬프팅 기법들이 인간의 전문가적 사고 구조를 훌륭히 모사하며 오답을 제어하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째, &lt;b&gt;단순 유사도 검색에 의존하던 전통적 RAG 시스템이 에이전트 기반의 다중 홉 탐색 구조(Agentic RAG)로 전면 고도화되었다.&lt;/b&gt; KGoT 아키텍처나 INRAExplorer 등의 시스템은 LLM을 단순한 응답 생성기가 아닌, 필요한 시점에 파이썬 코드를 실행하거나 Neo4j 그래프 데이터베이스에 Cypher 쿼리를 던져 스스로 지식의 빈틈을 채우는 주체적인 판단자로 기능하게 만든다. 에이전트들이 도구를 다루는 양태 자체가 그래프화(Agent-as-a-graph)됨으로써 복잡한 워크플로우 제어가 가능해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셋째, &lt;b&gt;시계열적 맥락을 흡수하는 메모리 인프라의 도입으로 인해 상호작용의 연속성이 극대화되었다.&lt;/b&gt; Zep과 같은 시간적 지식 그래프(Temporal KG) 구조의 출현은, 그래프 노드가 영구 불변의 사실이 아니라 사용자와의 교류 및 에피소드 진행에 따라 무효화되거나 갱신될 수 있는 유동적 상태 변수로 취급될 수 있음을 보여준다. 이는 AI 에이전트가 단기적 과제 수행을 넘어, 지속적 학습(Continual Learning)과 장기 기억력(Long-term memory)을 필요로 하는 광범위한 상호작용 시나리오에서 중심 역할을 수행하게 될 기반을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;궁극적으로 이러한 이론적 도약들이 현실 세계의 소프트웨어 시스템으로 안착할 수 있었던 이면에는, LangChain, Mirascope, NetworkX, 그리고 HuggingFace 생태계로 대변되는 파이썬 중심의 오픈소스 파이프라인 생태계가 강력한 미들웨어 역할을 수행했기 때문이다. 향후 지능형 추론 시스템 설계자들은 단일 언어 모델의 파라미터 경쟁보다는, 이러한 지식 구조의 동적 유도와 멀티 에이전트 라우팅 최적화, 그리고 다양한 데이터 스토어(LPG, Vector DB) 간의 하이브리드 파이프라인 설계에 자원과 역량을 집중해야 할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고 자료&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A Survey of Graph Retrieval-Augmented Generation for Customized Large Language Models - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2501.13958v1&quot;&gt;https://arxiv.org/html/2501.13958v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Graph-Augmented Reasoning: Evolving Step-by-Step Knowledge Graph Retrieval for LLM Reasoning - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/pdf/2503.01642&quot;&gt;https://arxiv.org/pdf/2503.01642&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2507.16507v1&quot;&gt;https://arxiv.org/html/2507.16507v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;From Local to Global: A Graph RAG Approach to Query-Focused Summarization - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/abs/2404.16130&quot;&gt;https://arxiv.org/abs/2404.16130&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;From Local to Global: A GraphRAG Approach to Query-Focused Summarization - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2404.16130v2&quot;&gt;https://arxiv.org/html/2404.16130v2&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;From Local to Global: A Graph RAG Approach to Query-Focused Summarization - jsDelivr, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://cdn.jsdelivr.net/gh/yanfeng98/paper-is-all-you-need/papers/00046-GraphRAG.pdf&quot;&gt;https://cdn.jsdelivr.net/gh/yanfeng98/paper-is-all-you-need/papers/00046-GraphRAG.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[PDF] Graph Retrieval-Augmented Generation: A Survey | Semantic Scholar, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.semanticscholar.org/paper/Graph-Retrieval-Augmented-Generation%3A-A-Survey-Peng-Zhu/9ab45aa875b56335303398e84a59a3756cd9d530&quot;&gt;https://www.semanticscholar.org/paper/Graph-Retrieval-Augmented-Generation%3A-A-Survey-Peng-Zhu/9ab45aa875b56335303398e84a59a3756cd9d530&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(PDF) A Survey of Graph Retrieval-Augmented Generation for Customized Large Language Models - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/388401799_A_Survey_of_Graph_Retrieval-Augmented_Generation_for_Customized_Large_Language_Models&quot;&gt;https://www.researchgate.net/publication/388401799_A_Survey_of_Graph_Retrieval-Augmented_Generation_for_Customized_Large_Language_Models&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A Survey of Graph Retrieval-Augmented Generation for Customized Large Language Models - OpenReview, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://openreview.net/pdf?id=9FJiOMuZkr&quot;&gt;https://openreview.net/pdf?id=9FJiOMuZkr&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[2501.13958] A Survey of Graph Retrieval-Augmented Generation for Customized Large Language Models - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/abs/2501.13958&quot;&gt;https://arxiv.org/abs/2501.13958&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(PDF) Graph-Based Agentic Retrieval-Augmented Generation: A Comprehensive Survey, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/396209481_Graph-Based_Agentic_Retrieval-Augmented_Generation_A_Comprehensive_Survey&quot;&gt;https://www.researchgate.net/publication/396209481_Graph-Based_Agentic_Retrieval-Augmented_Generation_A_Comprehensive_Survey&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;spcl/knowledge-graph-of-thoughts: Official Implementation ... - GitHub, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/spcl/knowledge-graph-of-thoughts&quot;&gt;https://github.com/spcl/knowledge-graph-of-thoughts&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Affordable AI Assistants with Knowledge Graph of Thoughts | by Ema Ilic | Medium, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://medium.com/@ema.ilic9/affordable-ai-assistants-with-knowledge-graph-of-thoughts-1f3783e6482f&quot;&gt;https://medium.com/@ema.ilic9/affordable-ai-assistants-with-knowledge-graph-of-thoughts-1f3783e6482f&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Affordable AI Assistants with Knowledge Graph of Thoughts - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2504.02670v6&quot;&gt;https://arxiv.org/html/2504.02670v6&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI-Powered Paper Summarization about the arXiv paper 2502.06472v1, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.summarizepaper.com/en/arxiv-id/2502.06472v1/&quot;&gt;https://www.summarizepaper.com/en/arxiv-id/2502.06472v1/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KARMA: Leveraging Multi-Agent LLMs for Automated Knowledge Graph Enrichment, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2502.06472v1&quot;&gt;https://arxiv.org/html/2502.06472v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KARMA: Leveraging Multi-Agent LLMs for Automated Knowledge Graph Enrichment - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/pdf/2502.06472&quot;&gt;https://arxiv.org/pdf/2502.06472&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(PDF) KARMA: Leveraging Multi-Agent LLMs for Automated Knowledge Graph Enrichment, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/388884012_KARMA_Leveraging_Multi-Agent_LLMs_for_Automated_Knowledge_Graph_Enrichment&quot;&gt;https://www.researchgate.net/publication/388884012_KARMA_Leveraging_Multi-Agent_LLMs_for_Automated_Knowledge_Graph_Enrichment&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KG-Orchestra: An Open-Source Multi-Agent Framework for Evidence-Based Biomedical Knowledge Graphs Enrichment | bioRxiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.biorxiv.org/content/10.64898/2026.02.18.706536v1.full-text&quot;&gt;https://www.biorxiv.org/content/10.64898/2026.02.18.706536v1.full-text&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Knowledge Graph-Based Tool and Agent Retrieval for LLM Multi-Agent Systems - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.arxiv.org/pdf/2511.18194&quot;&gt;https://www.arxiv.org/pdf/2511.18194&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Tool and Agent Selection for Large Language Model Agents in Production: A Survey, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.preprints.org/manuscript/202512.1050/v1&quot;&gt;https://www.preprints.org/manuscript/202512.1050/v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HybridRAG: Integrating Knowledge Graphs and Vector Retrieval Augmented Generation for Efficient Information Extraction | Request PDF - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/385821579_HybridRAG_Integrating_Knowledge_Graphs_and_Vector_Retrieval_Augmented_Generation_for_Efficient_Information_Extraction&quot;&gt;https://www.researchgate.net/publication/385821579_HybridRAG_Integrating_Knowledge_Graphs_and_Vector_Retrieval_Augmented_Generation_for_Efficient_Information_Extraction&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/393923781_Agentic_RAG_with_Knowledge_Graphs_for_Complex_Multi-Hop_Reasoning_in_Real-World_Applications&quot;&gt;https://www.researchgate.net/publication/393923781_Agentic_RAG_with_Knowledge_Graphs_for_Complex_Multi-Hop_Reasoning_in_Real-World_Applications&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Evolving Step-by-Step Knowledge Graph Retrieval for LLM Reasoning - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2503.01642v1&quot;&gt;https://arxiv.org/html/2503.01642v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;UProp: Investigating the Uncertainty Propagation of LLMs in Multi-Step Agentic Decision-Making - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2506.17419v1&quot;&gt;https://arxiv.org/html/2506.17419v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A Survey of Long Chain-of-Thought for Reasoning Large Language Models - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2503.09567v4&quot;&gt;https://arxiv.org/html/2503.09567v4&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HKUST-KnowComp/AutoSchemaKG: This repository ... - GitHub, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/HKUST-KnowComp/AutoSchemaKG&quot;&gt;https://github.com/HKUST-KnowComp/AutoSchemaKG&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AutoSchemaKG Paper and Code Release - Jiaxin Bai, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://bjx.fun/p/autoschemakg-paper-and-code-release/&quot;&gt;https://bjx.fun/p/autoschemakg-paper-and-code-release/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;sciknoworg/schema-miner: A Human-in-the-Loop Workflow ... - GitHub, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/sciknoworg/schema-miner&quot;&gt;https://github.com/sciknoworg/schema-miner&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Evaluation of LLM-Based Strategies for the Extraction of Food Product Information from Online Shops - SciTePress, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.scitepress.org/Papers/2025/136473/136473.pdf&quot;&gt;https://www.scitepress.org/Papers/2025/136473/136473.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Testing the Feasibility of Schema.org Metadata Refinement Through the Use of a Large Language Model | Request PDF - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/383487144_Testing_the_Feasibility_of_Schemaorg_Metadata_Refinement_Through_the_Use_of_a_Large_Language_Model&quot;&gt;https://www.researchgate.net/publication/383487144_Testing_the_Feasibility_of_Schemaorg_Metadata_Refinement_Through_the_Use_of_a_Large_Language_Model&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;arXiv:2503.05388v1 [cs.AI] 7 Mar 2025, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/pdf/2503.05388&quot;&gt;https://arxiv.org/pdf/2503.05388&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LLM-empowered knowledge graph construction: A survey - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2510.20345v1&quot;&gt;https://arxiv.org/html/2510.20345v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ontology Generation Using Large Language Models | Request PDF - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/392242831_Ontology_Generation_Using_Large_Language_Models&quot;&gt;https://www.researchgate.net/publication/392242831_Ontology_Generation_Using_Large_Language_Models&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Knowledge Engineering with Large Language Models: A Capability Assessment in Ontology Evaluation | Semantic Web Journal, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.semantic-web-journal.net/system/files/swj3852.pdf&quot;&gt;https://www.semantic-web-journal.net/system/files/swj3852.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(PDF) LLMs4Life: Large Language Models for Ontology Learning in Life Sciences, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/386419108_LLMs4Life_Large_Language_Models_for_Ontology_Learning_in_Life_Sciences&quot;&gt;https://www.researchgate.net/publication/386419108_LLMs4Life_Large_Language_Models_for_Ontology_Learning_in_Life_Sciences&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Leveraging Large Language Models for Generating Research Topic Ontologies: A Multi-Disciplinary Study - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2508.20693v1&quot;&gt;https://arxiv.org/html/2508.20693v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Retrieval-Augmented Generation of Ontologies from Relational Databases - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/392334429_Retrieval-Augmented_Generation_of_Ontologies_from_Relational_Databases&quot;&gt;https://www.researchgate.net/publication/392334429_Retrieval-Augmented_Generation_of_Ontologies_from_Relational_Databases&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Publications | Institute for Artificial Intelligence | University of Stuttgart, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.ki.uni-stuttgart.de/departments/ac/research/publications/&quot;&gt;https://www.ki.uni-stuttgart.de/departments/ac/research/publications/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[2506.00664] OntoRAG: Enhancing Question-Answering through Automated Ontology Derivation from Unstructured Knowledge Bases - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/abs/2506.00664&quot;&gt;https://arxiv.org/abs/2506.00664&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OntoRAG: Enhancing Question-Answering through Automated Ontology Derivation from Unstructured Knowledge Bases - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/pdf/2506.00664&quot;&gt;https://arxiv.org/pdf/2506.00664&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OntoRAG: Enhancing Question-Answering through Automated Ontology Derivation from Unstructured Knowledge Bases - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2506.00664v1&quot;&gt;https://arxiv.org/html/2506.00664v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(PDF) OntoRAG: Enhancing Question-Answering through Automated Ontology Derivation from Unstructured Knowledge Bases - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/392334005_OntoRAG_Enhancing_Question-Answering_through_Automated_Ontology_Derivation_from_Unstructured_Knowledge_Bases&quot;&gt;https://www.researchgate.net/publication/392334005_OntoRAG_Enhancing_Question-Answering_through_Automated_Ontology_Derivation_from_Unstructured_Knowledge_Bases&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Research Conference Spotlight - Georgia Institute of Technology, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://sites.gatech.edu/research/spotlight/&quot;&gt;https://sites.gatech.edu/research/spotlight/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LinearRAG: Linear Graph Retrieval Augmented Generation on Large-scale Corpora - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2510.10114v1&quot;&gt;https://arxiv.org/html/2510.10114v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Paper Digest: CIKM 2025 Papers &amp;amp; Highlights, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.paperdigest.org/2025/11/cikm-2025-papers-highlights/&quot;&gt;https://www.paperdigest.org/2025/11/cikm-2025-papers-highlights/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SCIENCE AND TECHNOLOGY PUBLICATIONS - SciTePress, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.scitepress.org/Papers/2025/&quot;&gt;https://www.scitepress.org/Papers/2025/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ontology used for generated MBSE model elements. - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/figure/Ontology-used-for-generated-MBSE-model-elements_fig3_388476324&quot;&gt;https://www.researchgate.net/figure/Ontology-used-for-generated-MBSE-model-elements_fig3_388476324&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proceedings of the 13th International Conference on Model-Based Software and Systems Engineering, MODELSWARD 2025, Porto, Portugal, February 26-28, 2025 - Researchr, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://researchr.org/publication/modelsward-2025&quot;&gt;https://researchr.org/publication/modelsward-2025&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;WESE: weak exploration to strong exploitation for LLM agents - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/400303273_WESE_weak_exploration_to_strong_exploitation_for_LLM_agents&quot;&gt;https://www.researchgate.net/publication/400303273_WESE_weak_exploration_to_strong_exploitation_for_LLM_agents&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Proceedings of the 1st Workshop on Knowledge Graphs and Large Language Models (KaLLM 2024) - ACL Anthology, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://aclanthology.org/2024.kallm-1.pdf&quot;&gt;https://aclanthology.org/2024.kallm-1.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IS2024 - SIKDD 2024 Paper 15 | PDF | Artificial Intelligence - Scribd, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.scribd.com/document/909399369/IS2024-SIKDD-2024-paper-15&quot;&gt;https://www.scribd.com/document/909399369/IS2024-SIKDD-2024-paper-15&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AutoAlign: Fully Automatic and Effective Knowledge Graph Alignment Enabled by Large Language Models | Request PDF - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/374864668_AutoAlign_Fully_Automatic_and_Effective_Knowledge_Graph_Alignment_Enabled_by_Large_Language_Models&quot;&gt;https://www.researchgate.net/publication/374864668_AutoAlign_Fully_Automatic_and_Effective_Knowledge_Graph_Alignment_Enabled_by_Large_Language_Models&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Unlocking the Power of Large Language Models for Entity Alignment - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/384208316_Unlocking_the_Power_of_Large_Language_Models_for_Entity_Alignment&quot;&gt;https://www.researchgate.net/publication/384208316_Unlocking_the_Power_of_Large_Language_Models_for_Entity_Alignment&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[PDF] Unlocking the Power of Large Language Models for Entity, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.semanticscholar.org/paper/Unlocking-the-Power-of-Large-Language-Models-for-Jiang-Shen/a35c3321c48ff496bb6ef085829f2d488973a72e&quot;&gt;https://www.semanticscholar.org/paper/Unlocking-the-Power-of-Large-Language-Models-for-Jiang-Shen/a35c3321c48ff496bb6ef085829f2d488973a72e&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Daily Papers - Hugging Face, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://huggingface.co/papers?q=Entity-Relation%20Matching&quot;&gt;https://huggingface.co/papers?q=Entity-Relation%20Matching&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[PDF] Zep: A Temporal Knowledge Graph Architecture for Agent Memory | Semantic Scholar, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.semanticscholar.org/paper/Zep%3A-A-Temporal-Knowledge-Graph-Architecture-for-Rasmussen-Paliychuk/12407be490a4e4633da7f25a93af000be573a288&quot;&gt;https://www.semanticscholar.org/paper/Zep%3A-A-Temporal-Knowledge-Graph-Architecture-for-Rasmussen-Paliychuk/12407be490a4e4633da7f25a93af000be573a288&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Rylan Talerico on Zep: A Temporal Knowledge Graph Architecture for Agent Memory [PWL NYC] | Papers We Love, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://paperswelove.org/videos/rylan-talerico-on-zep-a-temporal-knowledge-graph-architecture-for-agent-memory-p/&quot;&gt;https://paperswelove.org/videos/rylan-talerico-on-zep-a-temporal-knowledge-graph-architecture-for-agent-memory-p/&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Zep: A Temporal Knowledge Graph Architecture for Agent Memory - arXiv, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2501.13956v1&quot;&gt;https://arxiv.org/html/2501.13956v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GitHub - getzep/graphiti: Build Real-Time Knowledge Graphs for AI Agents, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/getzep/graphiti&quot;&gt;https://github.com/getzep/graphiti&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Knowledge Graphs in Agent Memory.md - GitHub, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/heathersherry/Knowledge-Graph-Tutorials-and-Papers/blob/master/topics/Knowledge%20Graphs%20in%20Agent%20Memory.md&quot;&gt;https://github.com/heathersherry/Knowledge-Graph-Tutorials-and-Papers/blob/master/topics/Knowledge%20Graphs%20in%20Agent%20Memory.md&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KG-LLM-Bench: A Scalable Benchmark for Evaluating LLM Reasoning on Textualized Knowledge Graphs | Request PDF - ResearchGate, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/390639562_KG-LLM-Bench_A_Scalable_Benchmark_for_Evaluating_LLM_Reasoning_on_Textualized_Knowledge_Graphs&quot;&gt;https://www.researchgate.net/publication/390639562_KG-LLM-Bench_A_Scalable_Benchmark_for_Evaluating_LLM_Reasoning_on_Textualized_Knowledge_Graphs&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Krupa Galiya krupagaliya - GitHub, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/krupagaliya&quot;&gt;https://github.com/krupagaliya&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;KG-LLM-Bench: A Scalable Benchmark for Evaluating LLM Reasoning on Textualized Knowledge Graphs - arXiv.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/html/2504.07087v1&quot;&gt;https://arxiv.org/html/2504.07087v1&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linked data for smart homes: comparing RDF and labeled property graphs, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.semanticscholar.org/paper/Linked-data-for-smart-homes%3A-comparing-RDF-and-Donkers-Yang/652d03a3da1e188134d19b8386481801fe2a0ab5&quot;&gt;https://www.semanticscholar.org/paper/Linked-data-for-smart-homes%3A-comparing-RDF-and-Donkers-Yang/652d03a3da1e188134d19b8386481801fe2a0ab5&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linked Data for Smart Homes: Comparing RDF and Labeled Property Graphs - CEUR-WS.org, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://ceur-ws.org/Vol-2636/02paper.pdf&quot;&gt;https://ceur-ws.org/Vol-2636/02paper.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Linked Data for Smart Homes: Comparing RDF and Labeled Property Graphs, 3월 13, 2026에 액세스, &lt;/span&gt;&lt;span style=&quot;color: #0000ee;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.researchgate.net/publication/342956606_Linked_Data_for_Smart_Homes_Comparing_RDF_and_Labeled_Property_Graphs&quot;&gt;https://www.researchgate.net/publication/342956606_Linked_Data_for_Smart_Homes_Comparing_RDF_and_Labeled_Property_Graphs&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전체적인 스킴을 위해서 Deep Research를 활용했는데, 관심있는 논문들부터 하나씩 정리할 예정&lt;/p&gt;</description>
      <category>논문</category>
      <category>graphrag</category>
      <category>KnowgedgeGraph</category>
      <category>ontology</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/114</guid>
      <comments>https://chaeeunsong.tistory.com/114#entry114comment</comments>
      <pubDate>Fri, 13 Mar 2026 15:36:31 +0900</pubDate>
    </item>
    <item>
      <title>[논문 리뷰] Linked Data for Smart Homes: Comparing RDF and Labeled Property Graphs</title>
      <link>https://chaeeunsong.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Donkers, Alex &amp;amp; Yang, Dujuan &amp;amp; Baken, Nico. (2020). Linked Data for Smart Homes: Comparing RDF and Labeled Property Graphs.&lt;/p&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://linkedbuildingdata.net/ldac2020/files/papers/02paper.pdf&quot;&gt;https://linkedbuildingdata.net/ldac2020/files/papers/02paper.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 시맨틱 웹 표준인 &lt;b&gt;RDF(Resource Description Framework)&lt;/b&gt;와 성능 중심의 &lt;b&gt;LPG(Labeled Property Graphs)&lt;/b&gt;를 실증적으로 비교하여 각 모델의 적합성을 분석함.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 연구 배경 및 목적: 데이터 사일로 해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트홈 환경은 건물 정보, IoT 센서, 사용자 활동 데이터가 각기 다른 시스템에 분산된 '데이터 사일로' 현상이 심각함. 이를 해결하기 위해 그래프 기반의 데이터 모델링이 필수적임. 본 연구는 &lt;b&gt;Open Smart Home Dataset&lt;/b&gt;을 활용하여 주방(Kitchen) 사례를 RDF와 LPG로 각각 구현하고 정성&amp;middot;정량적 차이를 검증함.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: 단순히 데이터를 저장하는 것을 넘어, 서로 다른 도메인의 데이터를 '연결'한다는 점에서 그래프 모델의 선택은 스마트홈 서비스의 확장성을 결정짓는 매우 중요한 설계 요소라고 생각함.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 데이터 모델링 및 구조적 차이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;RDF:&lt;/b&gt; 모든 정보를 &lt;code&gt;Subject-Predicate-Object&lt;/code&gt;의 트리플(Triple) 구조로 원자화함. 시맨틱 웹 표준을 따르며 온톨로지(RDFS, OWL)를 통해 데이터의 의미를 정의함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LPG:&lt;/b&gt; 노드와 관계(Edge)에 직접 속성(Property)을 부여함. RDF보다 구조가 컴팩트하며 직관적임.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 84px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;RDF&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;LPG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;데이터 단위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;트리플 (Atomic)&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;노드, 관계, 속성 (Compact)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;스키마&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;온톨로지 기반 (정형화)&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;스키마리스 (유연함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;질의 언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;SPARQL&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cypher&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: RDF는 데이터 모델이 엄격하지만, LPG는 관계 자체에 '속성'을 넣을 수 있어 모델링 자유도가 높음&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 정량적 성능 비교 결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;저장 공간:&lt;/b&gt; RDF 모델은 약 &lt;b&gt;7KB&lt;/b&gt;를 차지한 반면, 커스텀 LPG 모델은 약 &lt;b&gt;2KB&lt;/b&gt;로 측정됨. RDF가 약 3.5배 더 많은 공간을 사용함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그래프 밀도:&lt;/b&gt; RDF는 속성을 별도의 노드로 표현해야 하므로 노드와 엣지 수가 LPG에 비해 압도적으로 많음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;질의 성능:&lt;/b&gt; 단순 조회에서는 차이가 미미했으나, &lt;b&gt;복잡한 경로 탐색(Graph Traversal)&lt;/b&gt;에서는 LPG가 빠른 실행 속도를 기록함.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: 실시간으로 변하는 센서 데이터를 처리해야 하는 스마트홈 환경에서는 LPG의 성능적 우위가 큰 매력으로 다가옴. 하지만 데이터의 양이 기하급수적으로 늘어날 때 RDF의 표준화된 구조가 주는 관리 효율성도 무시할 수 없을 것임.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 핵심 분석: 상호운용성 vs 퍼포먼스&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;RDF의 강점: 의미적 추론과 표준&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDF는 &lt;b&gt;자동 추론(Inference)&lt;/b&gt;이 가능하다는 독보적인 장점이 있음. 여러 기관의 데이터를 통합할 때 표준 온톨로지를 사용하므로 데이터 오염이나 오해의 소지가 적음.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;LPG의 강점: 효율적인 관계 표현&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LPG는 엣지에 가중치나 시간 정보를 직접 부여할 수 있어, 사용자 선호도나 시간 흐름에 따른 상태 변화를 표현하기에 매우 적합함.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Note: &quot;누가 이 장치를 켰는가?&quot;라는 질문에 대해, RDF는 Reification(재구체화)이라는 복잡한 과정을 거쳐야 하지만 LPG는 관계 속성으로 간단히 해결함. 이 지점이 개발자 입장에서 LPG를 선호하게 만드는 요인이라 판단됨.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 결론 및 향후 전망&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;LPG 추천:&lt;/b&gt; 실시간 응답이 중요하고 복잡한 탐색이 필요한 스마트홈 서비스.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RDF 추천:&lt;/b&gt; 다기관 협력이 필요하고 장기적인 데이터 통합 및 의미 기반 서비스가 중요한 환경.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구 마지막에는 &lt;b&gt;RDF-star&lt;/b&gt;와 같은 하이브리드 모델을 언급하며, RDF의 표준성과 LPG의 효율성을 결합하려는 시도가 미래의 대안이 될 수 있음을 시사함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.ontotext.com/knowledgehub/fundamentals/what-is-rdf-star/&quot;&gt;What Is RDF-star | Ontotext Fundamentals&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1773377927555&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;What Is RDF-star?&quot; data-og-description=&quot;A detailed definition with examples for RDF-star, which allows descriptions to be added to edges in a graph.&quot; data-og-host=&quot;www.ontotext.com&quot; data-og-source-url=&quot;https://www.ontotext.com/knowledgehub/fundamentals/what-is-rdf-star/&quot; data-og-url=&quot;https://www.ontotext.com/knowledgehub/fundamentals/what-is-rdf-star/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7jlLA/dJMb9b3QyoY/Pv4GZ7nfxZvOKBeY2cJWW1/img.png?width=2000&amp;amp;height=1000&amp;amp;face=0_0_2000_1000&quot;&gt;&lt;a href=&quot;https://www.ontotext.com/knowledgehub/fundamentals/what-is-rdf-star/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ontotext.com/knowledgehub/fundamentals/what-is-rdf-star/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7jlLA/dJMb9b3QyoY/Pv4GZ7nfxZvOKBeY2cJWW1/img.png?width=2000&amp;amp;height=1000&amp;amp;face=0_0_2000_1000');&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;What Is RDF-star?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A detailed definition with examples for RDF-star, which allows descriptions to be added to edges in a graph.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ontotext.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;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술적 우위를 가리기보다 서비스의 생애 주기를 고려한 선택이 필요함. 개인적으로는 초기 프로토타이핑은 LPG로 빠르게 진행하되, 공공 데이터나 타 플랫폼과의 연업이 필요한 시점에는 RDF 변환 계층을 두는 하이브리드 전략이 현실적이지 않을까 생각함.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문</category>
      <category>knowlegegraph</category>
      <category>LPG</category>
      <category>RDF</category>
      <category>지식그래프</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/113</guid>
      <comments>https://chaeeunsong.tistory.com/113#entry113comment</comments>
      <pubDate>Fri, 13 Mar 2026 14:06:03 +0900</pubDate>
    </item>
    <item>
      <title>Graph 기반 LLM(RAG, Agent)을 위한 RDF / LPG / JSON 비교 분석</title>
      <link>https://chaeeunsong.tistory.com/112</link>
      <description>&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 GraphRAG가 AI 지식 추출의 핵심 기술로 부상하면서, 지식을 어떤 형태로 저장하고 관리해야 하는지에 대한 전략적 선택이 중요해졌다. 내가 공부했던 분야는 RDF 기반의 트리플 구조의 지식그래프와 온톨로지였지만, 최근의 LLM에서 사용되는 그래프는 다양한 구현체이다. RDF, LPG, JSON(-LD)와 같은 구현에 따라 논문이나 시스템의 이해도가 달라질 수 있어 이번 기회에 정리해보았다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. GraphRAG가 요구하는 그래프의 본질&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GraphRAG 논문과 Microsoft GraphRAG, NebulaGraph GraphRAG 등의 실제 구현체를 살펴보면 공통적으로 강조하는 지점이 있다. 그것은 그래프가 반드시 &lt;b&gt;엔티티(Node)와 관계(Edge)&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;구조적 추론:&lt;/b&gt; 무엇(노드)과 무엇(노드)이 어떤 관계(엣지)로 연결되어 있는지 추론 가능한 형태로 존재해야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포맷의 비종속성:&lt;/b&gt; 데이터 저장 포맷은 목적을 달성하기 위한 방법일 뿐이다. GraphRAG의 진정한 목적은 LLM이 관계 기반의 추론(Reasoning)을 수행할 수 있도록 구조화된 컨텍스트를 제공하는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; 실무에서는 흔히 &quot;그래프 DB가 없으면 GraphRAG를 못 하는 것 아니냐&quot;는 오해가 있다. 하지만 본질을 이해한다면, 텍스트 청크 간의 연결 고리를 논리적으로 증명할 수 있는 리스트만 있어도 그래프의 역할을 충분히 수행할 수 있다는 점을 깨닫게 된다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 실제 구현에서 사용되는 그래프 형태 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 연구 및 산업 현장에서 활용되는 주요 그래프 타입의 특징은 다음과 같다.&lt;/p&gt;
&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 그래프 타입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 구성 요소 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 활용 및 특징 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;RDF (Resource Description Framework)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Subject&amp;ndash;Predicate&amp;ndash;Object (삼중 구조)&lt;/td&gt;
&lt;td&gt;삼중 구조는 논리적 추론에 강점이 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LPG (Labeled Property Graph)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;노드/엣지에 속성(Property) 포함 가능&lt;/td&gt;
&lt;td&gt;대부분의 상용 구현체가 채택하는 형태다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;JSON 기반 그래프&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;JSON으로 노드와 엣지 표현&lt;/td&gt;
&lt;td&gt;구현이 매우 쉽고 유연하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LPG DB (Neo4j, TigerGraph 등)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;산업용 그래프 데이터베이스&lt;/td&gt;
&lt;td&gt;대규모 데이터를 다루는 기업용 GraphRAG 시스템에서 주로 선호된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Adjacency List (파이썬 Dict 등)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;노드 간 인접 리스트&lt;/td&gt;
&lt;td&gt;연구용 논문이나 가벼운 프로토타입에서 종종 사용되는 형태다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; 데이터의 복잡도에 따라 선택지는 달라지겠지만, 결국 LLM에게 전달되는 최종 형태는 자연어와 유사한 구조적 텍스트다. 따라서 특정 DB 엔진의 성능보다 '얼마나 정확한 관계(Relation)를 추출했는가'가 성능을 좌우한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;RDF vs LPG vs JSON&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 구현체(Microsoft GraphRAG, Neo4j, LlamaIndex 등)에서 사용되는 세 가지 형식을 실무 관점에서 비교 분석한다.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구조&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;삼중(triple) 기반&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;노드&amp;middot;엣지&amp;middot;속성 자유도 &amp;uarr;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구조는 자유 형식&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;표현력&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;관계 중심. 속성 모델링 제약&lt;/td&gt;
&lt;td&gt;속성 표현 강력&lt;/td&gt;
&lt;td&gt;완전 자유(스키마 없음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;그래프DB&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Blazegraph, GraphDB, Stardog&lt;/td&gt;
&lt;td&gt;Neo4j, NebulaGraph, JanusGraph&lt;/td&gt;
&lt;td&gt;없음(JSON 파일 자체)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;쿼리 언어&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;SPARQL&lt;/td&gt;
&lt;td&gt;Cypher, GQL, Gremlin&lt;/td&gt;
&lt;td&gt;없음(직접 탐색)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLM 입력 용이성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;triple &amp;rarr; 자연어 변환 필요&lt;/td&gt;
&lt;td&gt;텍스트화 쉽고 유연&lt;/td&gt;
&lt;td&gt;JSON &amp;rarr; 자연어 변환 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;구축 난이도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;높음 (스키마 강함)&lt;/td&gt;
&lt;td&gt;중간 (직관적)&lt;/td&gt;
&lt;td&gt;매우 쉬움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;대규모 처리&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;우수 (표준화)&lt;/td&gt;
&lt;td&gt;최고 (산업에서 검증)&lt;/td&gt;
&lt;td&gt;대규모는 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;GraphRAG 적합성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;★★★☆☆&lt;/td&gt;
&lt;td&gt;★★★★★&lt;/td&gt;
&lt;td&gt;★★★★☆&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;실제 GraphRAG 사례&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;학술/정부/의료 등 RDF 기반 데이터 활용&lt;/td&gt;
&lt;td&gt;NebulaGraph, Neo4j 기반 GraphRAG 대부분&lt;/td&gt;
&lt;td&gt;Microsoft GraphRAG 기본 저장 구조&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;h4 data-ke-size=&quot;size20&quot;&gt;1. RDF (Resource Description Framework)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;✔ 장점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 구조가 엄격해 대규모&amp;middot;다중 출처 데이터를 병합하기 좋음&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;스키마(ontology) 기반 &amp;rarr; 데이터 일관성 보장&lt;/li&gt;
&lt;li&gt;상호운용성 높음 (Wikidata, DBpedia 등 외부 RDF 연결 용이)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 관계 중심 추론에 매우 강함&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;Triple 기반 &amp;rarr; &amp;ldquo;주어-관계-객체&amp;rdquo; 구조가 명확&lt;/li&gt;
&lt;li&gt;복잡한 관계 표현에 뛰어남&lt;br /&gt;(GraphRAG의 multi-hop reasoning 과제에 적합)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) SPARQL을 통한 정교한 질의&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;triple 패턴 매칭, 경로 질의 등 고급 쿼리 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;✔ 단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 노드/엣지 속성 표현이 불편&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;property graph처럼 자연스럽게 &amp;ldquo;노드에 여러 속성&amp;rdquo;을 붙이기 어려움&lt;/li&gt;
&lt;li&gt;결국 reification 등 복잡한 패턴 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) GraphRAG에서 LLM 입력으로 쓰기에 변환 과정이 번거로움&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;LLM은 자연어 이해 &amp;rarr; RDF triple은 해석 필요&lt;/li&gt;
&lt;li&gt;&quot;RDF &amp;rarr; 자연어 template or prompt&amp;rarr; LLM&quot; 단계가 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 구축 난이도가 가장 높음&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;/li&gt;
&lt;li&gt;GraphRAG 실무팀에서는 무겁다고 느끼는 경우多&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. LPG (Property Graph: Neo4j, NebulaGraph)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) GraphRAG에 가장 적합한 구조&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;대다수 산업용 GraphRAG가 LPG 기반&lt;br /&gt;(Neo4j GraphRAG, NebulaGraph GraphRAG 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 노드/엣지에 속성을 자유롭게 부여 가능&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;(node)-[edge {score: 0.85, timestamp: &quot;2024&quot;}]-&amp;gt;(node)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; RAG의 텍스트 chunk, 요약, 토픽, score 등을 쉽게 포함 가능&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;&lt;b&gt;3) Cypher/GQL 등 인간 친화적 쿼리&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;직관적: MATCH (a)-[:friend]-&amp;gt;(b)&lt;/li&gt;
&lt;li&gt;LLM에게 쿼리 생성 시키기에도 쉬움&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 대규모 그래프 처리에 최적화&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;실제 여러 GraphRAG 벤더가 LPG 기반 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 단점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 표준화 부족&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;RDF처럼 웹 표준(global interoperability) 부족&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 다른 그래프DB 간 호환성 떨어짐&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;Neo4j &amp;harr; NebulaGraph &amp;harr; JanusGraph 간 마이그레이션 난이도 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. JSON 기반 그래프 (Microsoft GraphRAG 기본)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 구축 쉬움 &amp;mdash; JSON 배열 만들면 끝&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1771476762822&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;nodes&quot;: [
    { &quot;id&quot;: &quot;n1&quot;, &quot;name&quot;: &quot;Alice&quot;, &quot;type&quot;: &quot;Person&quot; }
  ],
  &quot;edges&quot;: [
    { &quot;source&quot;: &quot;n1&quot;, &quot;target&quot;: &quot;n2&quot;, &quot;relation&quot;: &quot;works_at&quot; }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;b&gt;2) LLM 입력에 가장 자연스럽게 변환됨&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GraphRAG의 &quot;edge table&quot;이나 &quot;natural language summary&quot; 만들기 편함&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;&lt;b&gt;3) GraphDB 없이도 GraphRAG 구현 가능&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;파일 기반으로 community detection, PageRank 등 수행 &amp;rarr; Microsoft GraphRAG 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 소규모 프로젝트에 최적&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;/li&gt;
&lt;li&gt;관리 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;✔ 단점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 대규모 그래프 처리에 부적합&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;JSON 파일이 커지면 탐색이 느려짐&lt;/li&gt;
&lt;li&gt;온라인 서비스에는 부적합 (그래프DB 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 표준 쿼리 언어 없음&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;직접 파이썬/JS로 탐색 로직 구현해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 구조적 제약이 없어 데이터 품질 관리 어려움&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1&gt;LPG에서 스키마란?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 궁금했던 부분은 &quot;LPG에는 왜 .owl 같은 표준 스키마 파일이 없는가?&quot;이다. 이는 두 시스템의 철학적 차이에서 기인한다.&lt;b&gt; RDF는 'Schema-First'&lt;/b&gt; 방식을 택하여 스키마가 데이터를 정의하는 반면, &lt;b&gt;LPG는 'Schema-Optional' 혹은 'Schema-Less'&lt;/b&gt; 방식을 취한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. DB 내부의 제약 조건(Constraints)으로 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 파일을 로딩하는 것이 아니라, 데이터베이스(예: Neo4j) 내부에 DDL(Data Definition Language) 명령어를 통해 제약 조건을 걸어 스키마처럼 작동하게 할 수 있다.&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;방식:&lt;/b&gt; &quot;모든 User 노드는 반드시 email 속성을 가져야 하며, 이는 유일(Unique)해야 한다&quot;와 같은 규칙을 DB에 직접 선언gks다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;파일 형태:&lt;/b&gt; 이 제약 조건들을 모아둔 .cypher 스크립트 파일이나 마이그레이션 스크립트(Python, Java 등)가 사실상의 스키마 파일 역할을 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시 (Cypher):&lt;/b&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;CREATE CONSTRAINT FOR (p:Person) REQUIRE p.name IS UNIQUE;
CREATE CONSTRAINT FOR (p:Person) REQUIRE p.age IS NOT NULL;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 메타데이터 그래프(Meta-Graph) 또는 온톨로지 레이어 구축&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LPG에는 표준 스키마 파일이 없으므로, &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;팔란티어(Palantir) 방식:&lt;/b&gt; 팔란티어는 '온톨로지 매니저(Ontology Manager)'라는 도구를 통해 객체(Object Types)와 링크(Link Types)를 정의한다. 이 정의는 시스템 내부의 독자적인 메타데이터 저장소에 관리되며, 사용자는 UI를 통해 이를 정의한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자체 메타 노드 생성:&lt;/b&gt; 그래프 내에 별도의 Class, Property라는 라벨을 가진 노드를 따로 만들어, 실제 데이터 노드들이 이 메타 노드를 참조하게 하는 방식으로 RDF의 온톨로지 구조를 LPG 안에서 유사하게 구현할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 애플리케이션 레벨의 코드/설정 파일 (JSON/YAML)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LPG를 사용하는 애플리케이션(예: GraphRAG) 단에서 스키마를 정의하고, 데이터를 넣기 전에 검증(Validation)하는 방식이다.&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;JSON/YAML:&lt;/b&gt; GraphRAG와 같은 시스템은 entity_types나 relation_types를 정의한 &lt;b&gt;JSON&lt;/b&gt;이나 &lt;b&gt;YAML&lt;/b&gt; 파일을 스키마로 활용할 수 있다. 이는 DB가 강제하는 것이 아니라, 데이터를 생성하는 파이프라인이 참조하는 '가이드라인'으로 작용한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GraphQL:&lt;/b&gt; 최근에는 Neo4j 등에서 &lt;b&gt;GraphQL Schema (.graphql)&lt;/b&gt; 파일을 사용하여 그래프의 타입과 관계를 정의하고, 이를 기반으로 API를 자동 생성하는 방식을 사용할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. GQL (Graph Query Language) 표준화 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 ISO 표준으로 제정 중인 &lt;b&gt;GQL&lt;/b&gt;은 LPG에서도 RDF처럼 명시적인 스키마 정의(Graph Type Definition)를 표준화하려고 시도하고 있다. 향후에는 LPG도 표준화된 스키마 파일을 갖게 될 가능성이 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요약: RDF vs LPG 스키마 관리 방식 비교&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 특징 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; RDF (Semantic Web) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; LPG (Neo4j, Palantir 등) &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스키마 파일&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;.owl, .rdf, .ttl&lt;/b&gt; (필수 및 표준화됨)&lt;/td&gt;
&lt;td&gt;&lt;b&gt;없음&lt;/b&gt; (필요시 .cypher, .graphql, .json 등으로 관리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;성격&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Prescriptive (규범적):&lt;/b&gt; 스키마가 데이터를 정의함&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Descriptive (서술적):&lt;/b&gt; 데이터가 곧 스키마가 됨 (Schema-free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;관리 위치&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;파일 자체 (Import 방식)&lt;/td&gt;
&lt;td&gt;DB 내부 제약조건(Constraints) 또는 애플리케이션 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;강제성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;추론(Reasoning)을 통해 논리적 모순 발견&lt;/td&gt;
&lt;td&gt;애플리케이션 로직이나 DB 제약조건으로 입력 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론: 프로젝트 성격에 따른 선택 전략&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GraphRAG에서 그래프란 특정 포맷이 아닌 '구조' 그 자체다. RDF는 표준화와 논리적 추론에 강점이 있고, LPG는 실무적인 모델링과 성능에 강점이 있으며, JSON은 실제 구현의 편의성이 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GraphRAG 시스템 구축 시, 포맷은 도구일 뿐 핵심은 '관계의 질'에 있다.&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;빠른 프로토타이핑:&lt;/b&gt; 구축 비용이 적은 &lt;b&gt;JSON 기반 그래프&lt;/b&gt;를 추천&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고성능 온라인 서비스:&lt;/b&gt; 대규모 데이터 처리와 Cypher 쿼리의 이점을 살릴 수 있는 LPG(Neo4j 등)가 사실상 표준이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 융합 및 표준 지식 베이스:&lt;/b&gt; 외부 온톨로지와의 결합 또는 복잡한 도메인의 규칙이 중요하다면 &lt;b&gt;RDF&lt;/b&gt;가 유리하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 GraphRAG는 특정 형식을 요구하지 않으며, &lt;b&gt;관계 기반의 구조적 정보&lt;/b&gt;를 요구한다. 개발자는 자신의 도메인 규모와 요구되는 추론의 깊이에 따라 적절한 관리 방식을 선택해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>지식그래프(Knowledge Graph)</category>
      <category>graphrag</category>
      <category>knowledgegraph</category>
      <category>온톨로지</category>
      <category>지식그래프</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/112</guid>
      <comments>https://chaeeunsong.tistory.com/112#entry112comment</comments>
      <pubDate>Thu, 19 Feb 2026 14:30:01 +0900</pubDate>
    </item>
    <item>
      <title>[논문리뷰] Graph-based Approaches and Functionalities in Retrieval-Augmented Generation: A Comprehensive Survey</title>
      <link>https://chaeeunsong.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2504.10499&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2504.10499&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771462913573&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;Graph-based Approaches and Functionalities in Retrieval-Augmented Generation: A Comprehensive Survey&quot; data-og-description=&quot;Large language models (LLMs) struggle with the factual error during inference due to the lack of sufficient training data and the most updated knowledge, leading to the hallucination problem. Retrieval-Augmented Generation (RAG) has gained attention as a p&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2504.10499&quot; data-og-url=&quot;https://arxiv.org/abs/2504.10499v2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dASMcD/dJMb9gxhSCN/f4FJEkKfAmmC4D2biLbX1K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/tGJYq/dJMb9lk3Eys/vZ1TRBk3zw0BdmRjWWZX00/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2504.10499&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2504.10499&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dASMcD/dJMb9gxhSCN/f4FJEkKfAmmC4D2biLbX1K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/tGJYq/dJMb9lk3Eys/vZ1TRBk3zw0BdmRjWWZX00/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&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;Graph-based Approaches and Functionalities in Retrieval-Augmented Generation: A Comprehensive Survey&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Large language models (LLMs) struggle with the factual error during inference due to the lack of sufficient training data and the most updated knowledge, leading to the hallucination problem. Retrieval-Augmented Generation (RAG) has gained attention as a p&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&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;h3 data-ke-size=&quot;size23&quot;&gt;1. 서론: 왜 다시 '그래프'인가?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM은 최신 지식 부족과 학습 데이터의 한계로 인해 사실 관계 오류인 환각(Hallucination) 문제를 겪음.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 해결하기 위해 외부 지식을 검색하는 RAG가 등장했으나, 일반적인 텍스트 검색은 실제 세계에 존재하는 구조화된 정보나 멀티홉(Multi-hop) 추론을 처리하는 데 한계가 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프는 엔티티 간의 복잡한 관계와 위상(Topology) 정보를 모델링할 수 있어, LLM의 사실적 신뢰도와 복잡한 구조적 추론 능력을 강화하는 핵심 도구가 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 그래프 기반 데이터베이스: 전통과 생성의 조화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;기존 지식 그래프(Existing KGs):*&lt;/i&gt; Freebase, Wikidata, T-REx처럼 이미 구축된 방대한 지식 창고를 활용하여 신뢰도 높은 데이터를 제공함&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;텍스트 생성 그래프(Graphs Generated from Texts):&lt;/i&gt; 비정형 텍스트에서 OpenIE 기법 등을 통해 엔티티와 관계를 추출하고 구조화된 트리플(Triplet)을 생성하여 도메인 적응성을 높임&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;산업용 DB 트렌드:&lt;/i&gt; Amazon Neptune, Neo4j, ArangoDB 등은 최근 벡터 인덱스를 내장하여 그래프 트래버설과 시맨틱 유사도 검색을 결합한 하이브리드 방식을 지원하는 추세임&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Note:&lt;/b&gt; 기존 RDF 방식은 대응이 느렸던 반면, 최근 LPG(속성 그래프) 기반 DB들은 LLM과의 연동 및 스트리밍 확장에 훨씬 유연하게 대처하고 있는 것으로 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 그래프 검색 알고리즘: 어떻게 찾아낼 것인가?&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;비매개변수 알고리즘(Non-parameterized):&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;결정론적: &lt;/i&gt;최단 경로 계산이나 그래프 탐색을 통해 질문과 관련된 정확한 연결 고리를 찾음&lt;/li&gt;
&lt;li&gt;&lt;i&gt;확률론적:&lt;/i&gt; HippoRAG처럼 페이지랭크(PageRank) 확률 확산을 사용하여 질문 엔티티 주변의 고확률 인접 구역을 찾아&lt;/li&gt;
&lt;li&gt;&lt;i&gt;휴리스틱 기반:&lt;/i&gt;&amp;nbsp;K-hop 샘플링처럼 효율적인 근사 해법을 통해 대규모 지식 검색 속도를 유지함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;학습 기반 알고리즘(Learning-based):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;컨볼루션 기반:&lt;/i&gt;&amp;nbsp;GCN 등을 활용해 이웃 노드의 특징을 가중 합산하여 지역적 연결 패턴을 포착함.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;어텐션 기반:&lt;/i&gt;&amp;nbsp;GAT처럼 특정 작업에 중요한 관계에 더 높은 가중치를 할당하여 정밀한 검색을 수행함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Note:&lt;/b&gt; 지시그래프가 아닌 그래프 알고리즘을 활용한 방식에 대한 것. 개인적으로 통계적 방식은 이해가 어렵지만, 결국 LLM이 모르는 위상 구조를 GNN 같은 모델이 먼저 학습해서 검색 정확도를 높여주는 과정임&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 그래프 프롬프팅: LLM에게 그래프 전달하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;토폴로지 인식 프롬프트(Topology-Aware):&lt;/i&gt;&amp;nbsp;노드와 에지의 관계를 트리플 형식 &lt;code&gt;(주어, 관계, 목적어)&lt;/code&gt;이나 경로 형태로 명시하여 LLM이 지식의 구조적 본질을 직접 이해하게 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;텍스트 프롬프트:&lt;/i&gt;&amp;nbsp;그래프 구조를 LLM이 이해하기 어려운 경우, 언어 모델을 통해 구조화된 지식을 자연어 문장이나 설명 형식으로 변환하여 전달함.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Note:&lt;/b&gt; 관계 경로를 화살표 등으로 시각화하거나 구조를 명시해 주는 것이 LLM의 멀티홉 추론 능력을 비약적으로 향상시킨다는 점이 인상적&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 그래프 구조 파이프라인과 컨트롤러&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;i&gt;Sequential:&lt;/i&gt; 질문에서 답변까지 각 단계가 일직선으로 이어지는 표준 방식&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Loop:&lt;/i&gt; 피드백 메커니즘을 통해 검색 결과가 부족하면 다시 검색하거나 답변을 정교화하는 반복 방식&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Tree:&lt;/i&gt;&amp;nbsp;여러 검색 또는 프롬프트 전략을 동시에 병렬로 실행하여 최적의 경로를 찾는 방식.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;컨트롤러 계열:&lt;/i&gt; 강화 학습(RL), 시스템-2(추론형 검색), 검증자 안내형(Verifier-guided), &lt;b&gt;컨트롤러가 파이프라인의 실행 시점과 중단 여부를 결정함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Note:&lt;/b&gt; 단순한 질의응답을 넘어 LLM 모델이 스스로 검색 루프를 돌며 답변을 수정하는 과정은 실제 그래프 구조 파이프라인의 요구사항과 일치함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 도메인 특화 응용: 왜 효과적인가?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;의료(Healthcare):&lt;/i&gt;&amp;nbsp;&lt;code&gt;MedGraphRAG&lt;/code&gt;는 방대한 의료 문헌에서 엔티티를 연결하고, &lt;code&gt;HyKGE&lt;/code&gt;는 의료 상담 시 잡음을 제거하면서 관련 지식을 재랭킹하여 정확도를 높임&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;과학 문헌:&lt;/i&gt;&amp;nbsp;&lt;code&gt;DALK&lt;/code&gt;는 알츠하이머병 관련 학술 문헌에서 지식 그래프를 구축하고, &lt;code&gt;KGP&lt;/code&gt;는 LLM 가이드 에이전트를 통해 문헌 그래프를 탐색하며 답변을 합성함&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;코드 완성:&lt;/i&gt;&amp;nbsp;&lt;code&gt;GraphCoder&lt;/code&gt;는 코드의 제어 흐름(Control Flow)과 데이터 의존성(Data Dependence) 그래프를 활용해 문맥에 맞는 코드를 추천함&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;Note:&lt;/i&gt; 그래프 기반 RAG는 멀티홉 경로를 명확한 증거로 반환하므로 전문 분야에서 필수적인 설명 가능성(Explainability)과 검증 가능성을 보장할 수 있다고 함. 단...지식그래프 구축은 결국 양질의 데이터를 만드는 과정이라는 생각에 가까움. 도메인 지식을 표현할수 있는 데이터.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 결론 및 미래 전망&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존의 단순한 트리플 기반 KG는 복잡한 현실 지식을 담기에 한계가 있음을 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;향후에는 다중 노드 관계를 표현하는 하이퍼그래프(Hypergraphs)나 추상화 수준을 담는 계층적 그래프 구축 기술이 중요해질 전망 =&amp;gt; 향후 연구가 궁금해짐. 계층적 그래프 이론에 공감하고 관련 논문을 찾아볼 예정&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 피드백 루프와 상호작용(HCI)을 통합하여 검색 과정을 동적으로 조정하는 시스템으로 발전할 것임.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;후기:&lt;/b&gt; 지식그래프 구축 이후 '어떻게 추출하느냐'의 단계에서 단순 쿼리 외에도 GNN이나 페이지랭크 같은 알고리즘이 LLM의 위상적 무지를 보완해 준다는 점을 배움.&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;전통적인 온톨로지 기반의 RDF 지식그래프 외에도 알고리즘, LPG 등 다양한 관점을 볼 수 있어서 재밌었고, 특히 하이퍼그래프, 추상적수준의 계층적그래프에 대한 논점을 확인할 수 있었음&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문</category>
      <category>knowlegegraph</category>
      <category>LLM</category>
      <category>ontology</category>
      <category>지식그래프</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/111</guid>
      <comments>https://chaeeunsong.tistory.com/111#entry111comment</comments>
      <pubDate>Thu, 19 Feb 2026 10:02:11 +0900</pubDate>
    </item>
    <item>
      <title>[논문리뷰]Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications</title>
      <link>https://chaeeunsong.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2507.16507&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2507.16507&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771478731462&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;Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications&quot; data-og-description=&quot;Conventional Retrieval-Augmented Generation (RAG) systems enhance Large Language Models (LLMs) but often fall short on complex queries, delivering limited, extractive answers and struggling with multiple targeted retrievals or navigating intricate entity r&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2507.16507&quot; data-og-url=&quot;https://arxiv.org/abs/2507.16507v1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CLgYB/dJMb9kTZt2l/cP0gUlTkhkPwoaTVNaEWXK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/wHdCm/dJMb9b3OASa/QEEUV6Zek2G9NKtz6NjZ50/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2507.16507&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2507.16507&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CLgYB/dJMb9kTZt2l/cP0gUlTkhkPwoaTVNaEWXK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/wHdCm/dJMb9b3OASa/QEEUV6Zek2G9NKtz6NjZ50/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&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;Agentic RAG with Knowledge Graphs for Complex Multi-Hop Reasoning in Real-World Applications&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Conventional Retrieval-Augmented Generation (RAG) systems enhance Large Language Models (LLMs) but often fall short on complex queries, delivering limited, extractive answers and struggling with multiple targeted retrievals or navigating intricate entity r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 배경 및 문제 의식: 기존 RAG의 한계&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;Classical RAG의 단점:&lt;/b&gt; 단순히 유사도가 높은 상위 k개의 텍스트 조각(top-k snippets)만 가져오기 때문에, 전체 목록 추출이나 복잡한 관계(저자&amp;rarr;논문&amp;rarr;프로젝트)를 추적하는 데 한계가 있음.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;해결책:&lt;/b&gt; 동적 추론을 수행하는 &lt;b&gt;에이전트(Agentic)&lt;/b&gt; 기능과 구조화된 정보를 가진 &lt;b&gt;지식 그래프(KG)&lt;/b&gt;를 통합한 'INRAExplorer'를 제안함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; 기존 RAG가 단답형이나 요약에 강했다면, 이 시스템은 연구원처럼 조사를 수행하겠다는 의지로 보임. 데이터 간의 연결 고리를 놓치지 않으려는 시도가 인상적임.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 지식 베이스 구축 (Knowledge Base Construction)&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; INRAE의 2019년~2024년 오픈 액세스 출판물 및 HAL, OpenAire 등의 메타데이터를 결합함.&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;Vector Database (Qdrant):&lt;/b&gt; 텍스트 청크를 저장하며, Jina v3(밀집 벡터)와 BM25(희소 벡터)를 모두 사용하는 하이브리드 검색 지원.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Knowledge Graph (Neo4j):&lt;/b&gt; 417,030개의 노드와 100만 개 이상의 관계로 구성됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특이점:&lt;/b&gt; INRAE Thesaurus(유의어 사전)를 통합하여 'Domain'과 'Concept' 노드를 구축, 전문 용어에 대한 이해도를 높임.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; 이 논문은 그래프의 구조(Topology) 자체를 쿼리(Cypher)로 직접 탐색하는 방식에 집중하고 있음. 노드를 벡터화해서 유사도를 찾는 방식도 있겠지만, 여기선 '관계의 정확성'을 위해 직접적인 그래프 쿼리를 도구로 선택한 것으로 보임.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 에이전트 및 멀티 툴 오케스트레이션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 모델로 &lt;b&gt;deepseek-r1-0528&lt;/b&gt;을 사용하며, 에이전트는 다음의 4가지 도구를 동적으로 활용함.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;도구명&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;주요 기능&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SearchGraph&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Neo4j에 Cypher 쿼리를 보내 관계를 추적하고 전체 리스트를 확보함.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;핵심 도구&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SearchPublications&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;벡터 DB에서 하이브리드 검색을 통해 초기 진입점 논문을 찾음.&lt;/td&gt;
&lt;td&gt;진입점 확보용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SearchConceptsKeywords&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;시소러스를 통해 모호한 쿼리를 명확하게 하고 관련 개념을 탐색함.&lt;/td&gt;
&lt;td&gt;용어 정리 및 확장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;IdentifyExperts&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;특정 주제의 전문가를 식별하기 위한 복합 도구(논문 수, 인용 수 등 계산)&lt;/td&gt;
&lt;td&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; 결국 &quot;지식 그래프를 어떻게 심층적으로 활용했는가?&quot;에 대한 답은 에이전트가 직접 Cypher 쿼리를 생성하여 그래프를 넘나들게(Multi-hop) 설계했다는 것임. 사용자가 직접 설계해야 한다는 점은 여전하지만, 에이전트가 상황에 맞춰 툴을 골라 쓰는 '유연성'을 부여한 점이 포인트임.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 주요 수치 및 통계 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;총 노드 수:&lt;/b&gt; 417,030개&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 구성:&lt;/b&gt;&lt;b&gt;Keyword:&lt;/b&gt; 96,588 (23.2%)&lt;b&gt;Concept:&lt;/b&gt; 13,591 (3.3%)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Project:&lt;/b&gt; 3,999 (1.0%)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Publication:&lt;/b&gt; 38,791 (9.3%)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Author:&lt;/b&gt; 233,728 (56.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;p data-ke-size=&quot;size16&quot;&gt;INRAExplorer는 단순 요약을 넘어 인간 연구자처럼 조사하는 AI를 지향함. 특히 복잡한 질문에 대해 에이전트가 스스로 &quot;먼저 논문을 찾고(Step 1), 그 논문을 지원한 프로젝트를 찾고(Step 2), 그 프로젝트의 다른 주제를 탐색(Step 3)&quot;하는 식의 추론 과정을 성공적으로 보여줌.&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;&lt;b&gt;Note:&lt;/b&gt; 에이전트라고 해도 아직은 결국 &lt;b&gt;인간이 얼마나 정교하게 도구(Tool/MCP)를 설계했느냐&lt;/b&gt;에 크게 의존하는 것 아닌가? 논문에서도 &lt;code&gt;IdentifyExperts&lt;/code&gt; 같은 도구는 도메인 지식을 캡슐화한 것이라고 명시함.&lt;/p&gt;</description>
      <category>논문</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/110</guid>
      <comments>https://chaeeunsong.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 13 Feb 2026 16:22:31 +0900</pubDate>
    </item>
    <item>
      <title>[스터디] Kafka와 Redis를 활용한 대규모 실시간 시청자 수(CCU) 집계 시스템 설계</title>
      <link>https://chaeeunsong.tistory.com/109</link>
      <description>&lt;p&gt;오늘은 스터디에서 &amp;quot;실시간 시청자 수를 어떻게 대규모 환경에서 안전하게 집계할 것인가&amp;quot;를 주제로 공부함. 개인적으로 분산 처리나 전문 용어에 익숙해지기 위해, 논의되었던 핵심 설계 포인트들을 기록용으로 정리&lt;/p&gt;
&lt;h3&gt;1. 단순 입/퇴장 로그 방식의 한계와 보완&lt;/h3&gt;
&lt;p&gt;처음엔 사용자가 들어올 때(Join)와 나갈 때(Leave) 로그를 남겨서 그 차이를 구하면 된다고 생각했음. 하지만 실무에서는 &lt;strong&gt;비정상 종료(앱 강제 종료, 네트워크 단절)&lt;/strong&gt; 시 &amp;#39;퇴장&amp;#39; 로그가 남지 않는 문제가 치명적임.&lt;/p&gt;
&lt;p&gt;이를 해결하기 위해 &lt;strong&gt;하트비트(Heartbeat)&lt;/strong&gt; 개념을 도입함. 클라이언트가 주기적으로 &amp;quot;나 아직 보고 있어&amp;quot;라는 신호를 보내고, 서버는 이 신호가 끊기면 유효시간(TTL) 만료로 판단해 자동으로 인원수에서 제외함.&lt;/p&gt;
&lt;h3&gt;2. 고가용성을 위한 데이터 처리: 핫패스와 콜드패스&lt;/h3&gt;
&lt;p&gt;데이터의 목적에 따라 두 가지 경로로 나누어 처리하는 &amp;#39;람다 아키텍처&amp;#39;적 접근이 필요함.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;핫패스(Hot Path):&lt;/strong&gt; 실시간성이 최우선. 0.5~1초 간격으로 UI에 즉시 숫자를 업데이트함. 약간의 오차는 허용함.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;콜드패스(Cold Path):&lt;/strong&gt; 정확성과 기록이 최우선. 방송 종료 후 전체 로그를 대조하여 봇(Bot)이나 중복 데이터를 필터링하고 정밀한 통계를 산출함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. 부하 분산을 위한 핵심 기술 (샤딩, 폴딩, Lua)&lt;/h3&gt;
&lt;p&gt;시청자가 수십만 명일 때, 특정 데이터(Key) 하나에만 업데이트가 몰리면 병목 현상이 생김.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;카운터 샤딩(Counter Sharding):&lt;/strong&gt; 하나의 카운터를 여러 개의 &amp;#39;샤드(Shard)&amp;#39;로 쪼개어 쓰기 부하를 분산함.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;폴딩(Folding):&lt;/strong&gt; 쪼개진 샤드들의 값을 주기적으로 다시 합쳐서 최종 합계를 구하는 과정임.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lua Script:&lt;/strong&gt; Redis 내부에서 여러 샤드의 값을 읽고 합산하는 로직을 &amp;#39;원자적(Atomic)&amp;#39;으로 한 번에 처리하기 위해 사용함. 네트워크 지연을 줄이고 데이터 일관성을 보장함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. 웹소켓과 팬아웃 (실시간 전파)&lt;/h3&gt;
&lt;p&gt;업데이트된 숫자를 사용자에게 전달하는 과정임.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;웹소켓(WebSocket):&lt;/strong&gt; HTTP와 달리 한 번 연결하면 유지되는 양방향 통로임. 서버가 클라이언트에게 실시간으로 데이터를 밀어줄 수 있음(Push).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;팬아웃(Fan-out):&lt;/strong&gt; 하나의 메시지를 수많은 접속자에게 동시에 뿌려주는 구조를 말함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. 엔터프라이즈급 하이브리드 설계 (Kafka + Redis)&lt;/h3&gt;
&lt;p&gt;단순 구현을 넘어 대규모 서비스에서 사용하는 범용적인 구조는 아래와 같음.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gateway → Kafka:&lt;/strong&gt; 모든 사용자 이벤트를 Kafka로 던져서 완충 작용을 함.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kafka Streams:&lt;/strong&gt; 스트림 데이터를 실시간 집계함. 이때 &lt;strong&gt;EOS(Exactly-Once Semantics)&lt;/strong&gt;를 활용해 중복 카운팅을 원천 차단함.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis &amp;amp; Fan-out:&lt;/strong&gt; 집계된 최종 값은 초저지연 조회를 위해 Redis에 캐싱하고, 웹소켓을 통해 사용자들에게 팬아웃함.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6. 추가 정리: 파티셔닝 vs 샤딩&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파티셔닝:&lt;/strong&gt; 한 대의 서버 안에서 테이블을 쪼개는 것.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;샤딩:&lt;/strong&gt; 여러 대의 서버로 데이터를 나누어 저장하는 것. (수평적 확장)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;학습 소감:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;단순히 숫자를 세는 작업도 대규모 환경으로 가면 분산 처리와 데이터 정합성 보장을 위해 이렇게나 복잡한 아키텍처가 필요&lt;/li&gt;
&lt;li&gt;특히 Kafka의 EOS나 Redis Lua Script 같은 도구들이 왜 필수적인지 이해할 수 있었음.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>스터디&amp;amp;세미나</category>
      <category>dataengineering</category>
      <category>Kafka</category>
      <category>Redis</category>
      <category>WebSocket</category>
      <category>분산시스템</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/109</guid>
      <comments>https://chaeeunsong.tistory.com/109#entry109comment</comments>
      <pubDate>Wed, 7 Jan 2026 10:31:50 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 동시성 프로그래밍 - 멀티스레딩 vs 멀티프로세싱 vs 비동기</title>
      <link>https://chaeeunsong.tistory.com/108</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;Lambda 함수 최적화 과정에서 배운 Python 동시성 개념 정리&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;  배경&lt;/h2&gt;
&lt;p&gt;API 크롤링 Lambda 함수가 너무 오래 걸려서 최적화가 필요했다. 여러 데이터를 순차적으로 수집하는데 10분 이상 소요되었고, 이를 병렬 처리로 개선하려고 했다.&lt;/p&gt;
&lt;p&gt;그런데 &lt;strong&gt;멀티스레딩&lt;/strong&gt;, &lt;strong&gt;멀티프로세싱&lt;/strong&gt;, &lt;strong&gt;비동기&lt;/strong&gt;라는 용어가 나오면서 혼란스러웠다. 각각 언제 사용해야 하는지, 어떤 차이가 있는지 정리해보았다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;  핵심 개념: I/O Bound vs CPU Bound&lt;/h2&gt;
&lt;p&gt;프로그램의 병목 지점이 어디인지에 따라 최적화 방법이 달라진다.&lt;/p&gt;
&lt;h3&gt;CPU Bound (CPU 집약적)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;정의&lt;/strong&gt;: CPU 연산이 병목인 작업&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예시&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이미지/비디오 처리 (리사이징, 필터링)&lt;/li&gt;
&lt;li&gt;데이터 암호화/복호화&lt;/li&gt;
&lt;li&gt;복잡한 수학 연산 (머신러닝 학습)&lt;/li&gt;
&lt;li&gt;대용량 데이터 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# CPU가 계속 일함 
for i in range(10_000_000):
    result = i ** 2  # CPU 연산&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;I/O Bound (I/O 집약적)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;정의&lt;/strong&gt;: 네트워크/디스크 대기 시간이 병목인 작업&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예시&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP API 요청&lt;/li&gt;
&lt;li&gt;데이터베이스 쿼리&lt;/li&gt;
&lt;li&gt;파일 읽기/쓰기&lt;/li&gt;
&lt;li&gt;S3 업로드/다운로드&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# CPU는 놀고 네트워크 응답만 기다림
response = requests.get(&amp;quot;https://api.example.com&amp;quot;)  # 대기...&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;방법 1: 멀티스레딩 (Threading)&lt;/h2&gt;
&lt;h3&gt;개념&lt;/h3&gt;
&lt;p&gt;하나의 프로세스 안에서 &lt;strong&gt;여러 스레드&lt;/strong&gt;가 동시에 실행되는 것처럼 보이게 하는 기법&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from concurrent.futures import ThreadPoolExecutor

def fetch_data(url):
    response = requests.get(url)  # I/O 대기
    return response.json()

urls = [&amp;quot;https://api1.com&amp;quot;, &amp;quot;https://api2.com&amp;quot;, &amp;quot;https://api3.com&amp;quot;]

# 3개 URL을 동시에 요청
with ThreadPoolExecutor(max_workers=3) as executor:
    results = executor.map(fetch_data, urls)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;장점&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;I/O Bound 작업에 최적&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;네트워크 대기 중에는 다른 스레드가 실행됨&lt;/li&gt;
&lt;li&gt;API 요청, DB 쿼리, 파일 I/O 등에 효과적&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;메모리 효율적&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;같은 프로세스 내에서 메모리 공유&lt;/li&gt;
&lt;li&gt;프로세스보다 가벼움&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;구현 간단&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ThreadPoolExecutor&lt;/code&gt; 사용하면 쉽게 적용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;단점&lt;/h3&gt;
&lt;p&gt;❌ &lt;strong&gt;CPU Bound 작업에는 비효율&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python GIL(Global Interpreter Lock) 때문&lt;/li&gt;
&lt;li&gt;한 번에 하나의 스레드만 Python 코드 실행 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;스레드 안전성 고려 필요&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;공유 변수 접근 시 Lock 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;GIL(Global Interpreter Lock)이란?&lt;/h3&gt;
&lt;p&gt;Python 인터프리터는 한 번에 하나의 스레드만 Python 바이트코드를 실행할 수 있도록 제한한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# CPU 연산: GIL 때문에 병렬 처리 안 됨
def cpu_task():
    total = 0
    for i in range(10_000_000):
        total += i ** 2  # GIL 잡고 실행
    return total

# 멀티스레딩으로 실행해도 순차 실행과 비슷한 속도
with ThreadPoolExecutor(max_workers=4) as executor:
    results = executor.map(cpu_task, range(4))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;하지만 I/O 작업은 GIL 문제 없음!&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# I/O 작업: 네트워크 대기 중에는 GIL 해제됨
def io_task(url):
    response = requests.get(url)  # GIL 해제 → 다른 스레드 실행 가능
    return response.text

# 멀티스레딩으로 실행하면 훨씬 빠름
with ThreadPoolExecutor(max_workers=4) as executor:
    results = executor.map(io_task, urls)&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;방법 2: 멀티프로세싱 (Multiprocessing)&lt;/h2&gt;
&lt;h3&gt;개념&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;여러 프로세스&lt;/strong&gt;를 생성하여 각각 독립적인 Python 인터프리터에서 실행&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from concurrent.futures import ProcessPoolExecutor

def cpu_intensive_task(n):
    total = 0
    for i in range(n):
        total += i ** 2
    return total

numbers = [10_000_000, 10_000_000, 10_000_000, 10_000_000]

# 4개 프로세스가 진짜 병렬로 실행
with ProcessPoolExecutor(max_workers=4) as executor:
    results = executor.map(cpu_intensive_task, numbers)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;장점&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;CPU Bound 작업에 최적&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;각 프로세스가 독립적인 GIL 보유&lt;/li&gt;
&lt;li&gt;진짜 병렬 처리 가능 (멀티코어 활용)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;완전한 격리&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;프로세스 간 메모리 공유 안 함 → 안전&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;단점&lt;/h3&gt;
&lt;p&gt;❌ &lt;strong&gt;메모리 오버헤드&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;각 프로세스가 독립적인 메모리 공간 필요&lt;/li&gt;
&lt;li&gt;Lambda 같은 메모리 제한 환경에서 부담&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;프로세스 생성 비용&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;프로세스 생성/종료에 시간 소요&lt;/li&gt;
&lt;li&gt;스레드보다 무거움&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;I/O Bound 작업에는 과도함&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;네트워크 대기가 병목이면 멀티스레딩으로 충분&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;방법 3: 비동기 (Asyncio)&lt;/h2&gt;
&lt;h3&gt;개념&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;단일 스레드&lt;/strong&gt;에서 여러 작업을 번갈아가며 실행 (협력적 멀티태스킹)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import asyncio
import aiohttp

async def fetch_data(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    urls = [&amp;quot;https://api1.com&amp;quot;, &amp;quot;https://api2.com&amp;quot;, &amp;quot;https://api3.com&amp;quot;]

    async with aiohttp.ClientSession() as session:
        tasks = [fetch_data(session, url) for url in urls]
        results = await asyncio.gather(*tasks)  # 동시 실행

    return results

# 실행
asyncio.run(main())&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;장점&lt;/h3&gt;
&lt;p&gt;✅ &lt;strong&gt;I/O Bound 작업에 매우 효율적&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;수천 개의 동시 연결 처리 가능&lt;/li&gt;
&lt;li&gt;멀티스레딩보다 오버헤드 적음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;메모리 효율&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;단일 스레드에서 실행&lt;/li&gt;
&lt;li&gt;스레드/프로세스 생성 비용 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;세밀한 제어&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;동시 실행 수, 타임아웃 등 제어 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;단점&lt;/h3&gt;
&lt;p&gt;❌ &lt;strong&gt;코드 복잡도 증가&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt; 문법 학습 필요&lt;/li&gt;
&lt;li&gt;기존 동기 라이브러리 사용 불가 (aiohttp, aioboto3 등 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;CPU Bound 작업에는 부적합&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;단일 스레드라서 CPU 연산 시 블로킹&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❌ &lt;strong&gt;디버깅 어려움&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;비동기 코드는 스택 트레이스 추적이 복잡&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;  비교표&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;멀티스레딩&lt;/th&gt;
&lt;th&gt;멀티프로세싱&lt;/th&gt;
&lt;th&gt;비동기&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;적합한 작업&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I/O Bound&lt;/td&gt;
&lt;td&gt;CPU Bound&lt;/td&gt;
&lt;td&gt;I/O Bound&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GIL 영향&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;있음 (I/O는 괜찮음)&lt;/td&gt;
&lt;td&gt;없음 (독립 프로세스)&lt;/td&gt;
&lt;td&gt;있음 (단일 스레드)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;메모리 사용&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;매우 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;생성 비용&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;td&gt;매우 낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;동시 처리 수&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;수십 개&lt;/td&gt;
&lt;td&gt;CPU 코어 수&lt;/td&gt;
&lt;td&gt;수천 개&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;구현 복잡도&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;낮음&lt;/td&gt;
&lt;td&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;예시&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;API 요청, DB 쿼리&lt;/td&gt;
&lt;td&gt;이미지 처리, 암호화&lt;/td&gt;
&lt;td&gt;웹 크롤링, 웹소켓&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;실전 예시: API 크롤링 최적화&lt;/h2&gt;
&lt;h3&gt;문제 상황&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# 순차 처리: 10개 × 각 20개 API 요청 = 200개 요청
# 각 요청 0.5초 → 총 100초 소요
for artist in artists:  # 10개
    for schedule_id in schedule_ids:  # 20개
        response = requests.get(f&amp;quot;https://api.com/{schedule_id}&amp;quot;)
        process(response)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;해결 방법 1: 멀티스레딩 (데이터 단위 병렬화)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from concurrent.futures import ThreadPoolExecutor

def process_artist(artist):
    for schedule_id in artist.schedule_ids:
        response = requests.get(f&amp;quot;https://api.com/{schedule_id}&amp;quot;)
        process(response)

# 4개 동시에 처리
with ThreadPoolExecutor(max_workers=4) as executor:
    executor.map(process_artist, artists)

# 예상 시간: 100초 → 25초 (4배 개선)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;장점&lt;/strong&gt;: 안전하고 구현 간단&lt;/p&gt;
&lt;h3&gt;해결 방법 2: 비동기 (HTTP 요청 단위 병렬화)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import asyncio
import aiohttp

async def fetch_schedule(session, schedule_id):
    url = f&amp;quot;https://api.com/{schedule_id}&amp;quot;
    async with session.get(url) as response:
        return await response.json()

async def process_artist(session, artist):
    tasks = [fetch_schedule(session, sid) for sid in artist.schedule_ids]
    results = await asyncio.gather(*tasks)
    return results

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = [process_artist(session, artist) for artist in artists]
        await asyncio.gather(*tasks)

asyncio.run(main())

# 예상 시간: 100초 → 1-2초 (50-100배 개선)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;주의&lt;/strong&gt;: Rate Limit 위험! 동시 요청 수 제어 필요&lt;/p&gt;
&lt;h3&gt;해결 방법 3: 비동기 + Rate Limiting (추천)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from asyncio import Semaphore

async def fetch_with_limit(session, schedule_id, semaphore):
    async with semaphore:  # 동시 요청 수 제한
        url = f&amp;quot;https://api.com/{schedule_id}&amp;quot;
        async with session.get(url) as response:
            return await response.json()

async def main():
    semaphore = Semaphore(10)  # 최대 10개만 동시 실행

    async with aiohttp.ClientSession() as session:
        tasks = []
        for artist in artists:
            for sid in artist.schedule_ids:
                task = fetch_with_limit(session, sid, semaphore)
                tasks.append(task)

        results = await asyncio.gather(*tasks)

# 예상 시간: 100초 → 10초 (10배 개선, 안전함)&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;  어떤 방법을 선택해야 할까?&lt;/h2&gt;
&lt;h3&gt;플로우차트&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;작업 유형이 뭐야?
│
├─ CPU 연산이 많음 (이미지 처리, 암호화 등)
│  └─&amp;gt; 멀티프로세싱 (ProcessPoolExecutor)
│
└─ 네트워크/파일 I/O가 많음 (API, DB, S3 등)
   │
   ├─ 구현 간단하게 하고 싶음
   │  └─&amp;gt; 멀티스레딩 (ThreadPoolExecutor)
   │
   └─ 최대 성능 필요 (수백~수천 개 동시 처리)
      └─&amp;gt; 비동기 (asyncio + aiohttp)&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;내 케이스: Lambda API 크롤링&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;선택&lt;/strong&gt;: 멀티스레딩 (ThreadPoolExecutor)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;이유&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;I/O Bound&lt;/strong&gt;: HTTP 요청이 병목&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;안전성&lt;/strong&gt;: Rate Limit 회피 (아티스트 단위 병렬화)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;간단함&lt;/strong&gt;: 기존 코드 최소 수정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;충분한 성능&lt;/strong&gt;: 60-70% 개선 예상&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;나중에 고려&lt;/strong&gt;: 비동기 (더 빠른 속도 필요 시)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;  핵심 정리&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;I/O Bound 작업 (API, DB, 파일)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;멀티스레딩 또는 비동기 사용&lt;/li&gt;
&lt;li&gt;GIL은 I/O 대기 중에는 문제 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CPU Bound 작업 (연산, 변환)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;멀티프로세싱 사용&lt;/li&gt;
&lt;li&gt;GIL 우회하여 진짜 병렬 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lambda 환경&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;메모리 제한 고려 → 멀티스레딩 선호&lt;/li&gt;
&lt;li&gt;프로세스 생성 비용 고려&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate Limiting&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;비동기 사용 시 반드시 동시 요청 수 제어&lt;/li&gt;
&lt;li&gt;Semaphore 또는 asyncio.Queue 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;  참고 자료&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/python-gil/&quot;&gt;Python GIL 이해하기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/concurrent.futures.html&quot;&gt;concurrent.futures 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/asyncio.html&quot;&gt;asyncio 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/868568/what-do-the-terms-cpu-bound-and-i-o-bound-mean&quot;&gt;I/O Bound vs CPU Bound&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>파이썬(Python)&amp;amp;판다스(Pandas)&amp;amp;Polars</category>
      <category>multiprocessing</category>
      <category>python</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/108</guid>
      <comments>https://chaeeunsong.tistory.com/108#entry108comment</comments>
      <pubDate>Fri, 19 Dec 2025 14:01:48 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] Strands Agent 실습 (AWS Community Day 2025)</title>
      <link>https://chaeeunsong.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 AWS를 사용하고 있고, 최근 Agent에 관심도 생겼고 겸사겸사 모임을 참가했다.&lt;br /&gt;알게된 경로는 트위터에서 연사님 중 한분이 홍보하셔서 신청했음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적은 strands라는 프레임워크를 사용하여 Agent 구축을 실습하는 것!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-11-10 오전 10.15.11.png&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AvrbK/dJMcaaQ9JKY/KuMeKvtawDkjfOaU3hOUr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AvrbK/dJMcaaQ9JKY/KuMeKvtawDkjfOaU3hOUr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AvrbK/dJMcaaQ9JKY/KuMeKvtawDkjfOaU3hOUr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAvrbK%2FdJMcaaQ9JKY%2FKuMeKvtawDkjfOaU3hOUr0%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;1692&quot; height=&quot;776&quot; data-filename=&quot;스크린샷 2025-11-10 오전 10.15.11.png&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 신청한 트랙은 Agentic AI였음&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Agent란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 목표를 달성하기 위해 스스로 계획하고 도구를 사용하며 환경과 상호작용하기 위한 툴&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Q. 비결정적 프레임워크에서 어떻게 신뢰성 확보하고 중간에 컨트롤할 수 있으려나?&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;langgraph는 흐름 설계 및 상태 전환을 개발자가 비교적 많이 제어함&lt;/li&gt;
&lt;li&gt;strands는 에이전트가 직접 판단하는 자율적 제어가 더 강조됨 -&amp;gt; 프로토타입이 빠르게 가능&lt;/li&gt;
&lt;/ul&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;Github 코드와 설명서의 예제를 통해서 진행함. cursor 환경이라서 자동완성을 더 많이 해줌&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aws-samples/sample-once-upon-agentic-ai&quot;&gt;https://github.com/aws-samples/sample-once-upon-agentic-ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1762737506734&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 - aws-samples/sample-once-upon-agentic-ai&quot; data-og-description=&quot;Contribute to aws-samples/sample-once-upon-agentic-ai development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/aws-samples/sample-once-upon-agentic-ai&quot; data-og-url=&quot;https://github.com/aws-samples/sample-once-upon-agentic-ai&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ft1qy/hyZMEcbrzY/xRIlk6Z2I3LgBjHyykpSGK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/twrjt/hyZM8reTGJ/3yTjVbBaYOJhPcK7XvDjT1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/aws-samples/sample-once-upon-agentic-ai&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/aws-samples/sample-once-upon-agentic-ai&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ft1qy/hyZMEcbrzY/xRIlk6Z2I3LgBjHyykpSGK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/twrjt/hyZM8reTGJ/3yTjVbBaYOJhPcK7XvDjT1/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 - aws-samples/sample-once-upon-agentic-ai&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to aws-samples/sample-once-upon-agentic-ai 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;AWS의 깃헙을 클론하여 실습을 진행하였다.&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;TIL 개념&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;tools&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;strands_tools에서 기본적으로 제공하는 tools를 할수도 있고, 커스텀도 되고 MCP도 가져올 수 있음&lt;/li&gt;
&lt;li&gt;Q.python_repl이란? python 코드를 실행하는 툴, file_write 툴은 파일을 쓰는 툴&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;docstring&lt;/li&gt;
&lt;/ol&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;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FastMCP는 MCP 서버와 클라이언트를 간단하게 생성할 수 있도록 설계된 고수준의 Pythonic 프레임워크
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MCP를 만드는 클래스&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;lambda를 써서 만들었음 MCPClient는 필요할때마다 새로운 연결을 만드는 클래스이나 lambda로 감싸면 나중에 필요할 때 실행함&lt;/li&gt;
&lt;li&gt;mcp서버를 띄우고 다른 터미널에 해야함!&lt;/li&gt;
&lt;li&gt;awscli 매번 export하거나 .env만드는걸 해야함..&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MCP 자체를 만드는 거라면 굳이 MCP를 만들어야할 이유가 뭐지..? 어떨때 MCP를 만드는가...MCP와 메서드의 차이점은? MCP 서버를 만드는 기준?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;AI 답변: MCP(Model Context Protocol)을 활용하면 단순히 애플리케이션 내부에 함수 하나 추가하는 것과 비교해 다음과 같은 장점이 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확장성 있는 연동: MCP 서버 하나에 여러 기능(도구)을 묶어 두고 클라이언트가 필요한 기능만 골라 쓰게 할 수 있습니다. 새로운 기능을 서버 쪽에만 추가하면 바로 클라이언트에서 활용 가능하므로 배포/확장이 쉽습니다.&lt;/li&gt;
&lt;li&gt;기술 중립적 통합: 서로 다른 언어&amp;middot;프레임워크로 만든 여러 서비스나 유틸리티를 MCP 서버로 감싸 두면, 클라이언트는 공통 프로토콜로 호출할 수 있어 통합 비용이 줄어듭니다.&lt;/li&gt;
&lt;li&gt;권한 제어와 격리: 기능을 네트워크 경계 밖으로 분리해 두면 접근 권한 관리, 로깅, 감시 등을 중앙에서 통제하기 쉬워집니다. 민감한 연산이나 리소스 접근을 서버 측에 두고 필요한 권한만 열어주는 식으로 구성할 수 있죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;배포&amp;middot;운영 분리: 클라이언트와 서버를 분리하면 기능 수정 시 서버만 재배포하면 되고, 여러 클라이언트가 같은 MCP 서버를 공유할 수 있습니다. 함수 호출 기반 구조에서는 각 애플리케이션마다 함수를 복사&amp;middot;관리해야 하지만 MCP 서버는 재사용이 용이합니다. -&amp;gt; 이 부분을 읽고 이해함&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;상태&amp;middot;리소스 관리: 장기 실행 작업, 캐시, 연결 풀 등 상태ful 리소스를 서버에서 유지하면서 MCP를 통해 접근하게 하면 클라이언트는 단순한 프로토콜 호출만 처리하면 됩니다.&lt;/li&gt;
&lt;li&gt;정리하면, MCP는 기능을 네트워크 서비스로 캡슐화해 여러 클라이언트에서 표준 방식으로 재사용하고 확장할 수 있게 해주는 점이 가장 큰 이점입니다. 함수 수준 통합이 간단할 때도 있지만, 규모가 커지면 MCP 같은 프로토콜 기반 서버 구성이 더 유연하고 유지보수가 쉬워지는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;4&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;멀티 에이전트 시스템 &amp;amp; A2A(agent-to-agent)&lt;/li&gt;
&lt;/ol&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;실습 예시&amp;nbsp;&lt;/li&gt;
&lt;li class=&quot;vhdl&quot;&gt;&lt;code&gt;The Sage of Rules    ⚔️ Character Chronicler      Dice Oracle
         (Port 8000)              (Port 8001)            (Port 8080)
              │                        │                      │
              └────────────────────────┼──────────────────────┘
                                       │
                              The Grand Orchestrator
                                 (Port 8009)
                               [The Master's Throne]
&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;8080이 MCP이면, 8000, 8001도 MCP인가? 질문
&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;MCP를 해야할때란??&lt;br /&gt;AI 답변: MCP는 &amp;ldquo;도구를 RPC 형태로 묶어 제공하는 중개층&amp;rdquo;, 에이전트 서버는 &amp;ldquo;대화형 모델이 외부에서 호출될 수 있도록 HTTP 등으로 노출된 LLM(orchestrator)&amp;rdquo;라고 보면 이해가 쉽습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MCP vs. 에이전트 서버&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;MCP 서버 (&lt;code&gt;http://127.0.0.1:8080/mcp&lt;/code&gt;)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MCP(Multi-Tool Capability Protocol)는 여러 도구를 표준화된 방식으로 노출하는 프로토콜입니다.&lt;/li&gt;
&lt;li&gt;클라이언트(여기서는 &lt;code&gt;MCPClient&lt;/code&gt;)가 연결해 &amp;ldquo;제공 가능한 툴 목록&amp;rdquo;을 가져오고, 필요할 때 RPC처럼 호출합니다.&lt;/li&gt;
&lt;li&gt;장점: 툴 등록/탐색/호출이 규격화되어 있고, 도구 제공자&amp;middot;소비자 간 결합도가 낮습니다. 도구가 늘어나도 프로토콜이 같으니 확장성이 좋습니다.&lt;/li&gt;
&lt;li&gt;주 용도: &amp;ldquo;LLM이 다양한 툴(예: dice roll, 데이터 조회)을 일정한 인터페이스로 호출해야 할 때&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;에이전트 서버 (&lt;code&gt;http://127.0.0.1:8000&lt;/code&gt;, &lt;code&gt;http://127.0.0.1:8001&lt;/code&gt;)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A2A(Agent-to-Agent) 프로토콜 등으로 HTTP API를 제공하는 별도 LLM/에이전트 서비스입니다.&lt;/li&gt;
&lt;li&gt;예제에서는 Rules Agent, Character Agent가 각각 독립 서버로 떠 있고, orchestrator가 HTTP로 질문을 전달합니다.&lt;/li&gt;
&lt;li&gt;장점: 각 에이전트가 고유한 문맥/프롬프트/기능을 갖고 독립적으로 운영되며, orchestrator는 해당 API를 호출해 협업을 조율합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;언제 MCP를 도입하는가?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 도구(roll dice, 외부 API, DB 연동 등)를 LLM이 &amp;ldquo;직접&amp;rdquo; 호출해야 하고, 이를 표준화&amp;middot;확장 가능한 방식으로 관리하고 싶을 때 MCP를 씁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구가 함수 단위(메서드 기반)로 존재하고, 동일한 프로토콜로 등록&amp;middot;발견&amp;middot;호출되어야 하는 상황&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반대로, 이미 독립적인 에이전트가 HTTP API로 잘 노출돼 있고, 그 에이전트 자체가 LLM과 대화하며 결과를 생성한다면 그냥 에이전트 서버 호출이 적절&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li&gt;결국 orchestrator는 &amp;ldquo;도구는 MCP로, 협업해야 하는 다른 대화형 에이전트는 HTTP(A2A)로&amp;rdquo; 섞어서 사용하는 패턴이 흔합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REST Client라는 편한 extention을 알게 되었습니다.&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- hans-on 에 참여하는 건 처음이었는데, 간식이랑 텀블러까지 받아오고 짧은 시간내에 무료 계정으로 실습할 수 있는 경험이 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해외의 던전앤드래곤은 뭘까? 많은 곳에서 TRPG로 실습하는 경우를 봤음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아무래도 실습만 2시간 하고 끝나다보니 기본적인 개념과 개발환경에 익숙하지 않으면 에러가 난다거나 하는 상황이 많이 보였음. 근데 이건 대학교든 어디든 실습하면서 진행하는 게 제일 어렵다 진짜..각자 환경도 다르고 ㅜㅜ&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;- 오후 6시까지인지 알아서 네트워킹도 포함된건가? 했는데 아니었음. 짧게 해서 좋은 사람도 있고 네트워킹을 원하는 사람도 보였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 내년엔 개발소모임에 더 많이 나가볼까 고민중&lt;/p&gt;</description>
      <category>스터디&amp;amp;세미나</category>
      <category>agent</category>
      <category>AWS</category>
      <category>strands</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/107</guid>
      <comments>https://chaeeunsong.tistory.com/107#entry107comment</comments>
      <pubDate>Mon, 10 Nov 2025 10:28:41 +0900</pubDate>
    </item>
    <item>
      <title>[Database] Alembic으로 Postgres 테이블 생성 및 스키마 수정</title>
      <link>https://chaeeunsong.tistory.com/106</link>
      <description>&lt;h3&gt;TIL: Alembic으로 임베딩 차원 변경 마이그레이션, 인덱스 opclass, 권한 이슈 정리&lt;/h3&gt;
&lt;h4&gt;오늘 한 것&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;기존 테이블 A, B를 각각 &lt;code&gt;_bak&lt;/code&gt;으로 리네임해 백업.&lt;/li&gt;
&lt;li&gt;동일 스키마와 제약·인덱스를 유지한 채 새 테이블을 생성하고 &lt;code&gt;embedding&lt;/code&gt; 컬럼만 &lt;code&gt;VECTOR(384)&lt;/code&gt;로 변경하는 마이그레이션 설계.&lt;/li&gt;
&lt;li&gt;Alembic 실행 위치, downgrade 방법, 인덱스 opclass 의미, 권한 이슈 트러블슈팅 정리.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;Alembic 마이그레이션 설계 포인트&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;대상 스키마&lt;/strong&gt;: &lt;code&gt;sample&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;변경 범위&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;특정 테이블 백업 후 재생성.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;백업 절차&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; → &lt;code&gt;A_bak&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;B&lt;/code&gt; → &lt;code&gt;B_bak&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;새 테이블 생성&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;기존 정의 유지, 단 &lt;code&gt;embedding&lt;/code&gt;만 &lt;code&gt;VECTOR(384)&lt;/code&gt;로 변경.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인덱스/제약(동일 유지)&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;HNSW 인덱스: &lt;code&gt;embedding vector_cosine_ops&lt;/code&gt; with &lt;code&gt;(m=16, ef_construction=64)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;실행 위치와 리비전 생성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;실행 위치&lt;/strong&gt;: 레포 루트에서 실행하면 &lt;code&gt;alembic.ini&lt;/code&gt;의 &lt;code&gt;script_location = alembic&lt;/code&gt; 설정에 따라 자동으로 &lt;code&gt;alembic/versions/&lt;/code&gt; 아래 생성됨.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;리비전 생성 예시&lt;/strong&gt;:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /Users/sample
alembic revision -m &amp;quot;test&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;새 리비전의 &lt;code&gt;down_revision&lt;/code&gt;은 기존 버전으로 설정.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;downgrade 사용법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;현재/이력 확인:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;alembic current
alembic history --verbose&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;한 단계 되돌리기:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;alembic downgrade -1&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;인덱스 opclass(int4_ops, text_ops) 이해&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;핵심&lt;/strong&gt;: 기본 B-Tree에서 정수/텍스트 컬럼은 opclass를 생략해도 동일 동작.&lt;ul&gt;
&lt;li&gt;INTEGER → &lt;code&gt;int4_ops&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TEXT → &lt;code&gt;text_ops&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;즉, 다음 두 정의는 기능·성능이 실질적으로 동일.&lt;ul&gt;
&lt;li&gt;생략: &lt;code&gt;CREATE INDEX ... ON table (document_id);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;명시: &lt;code&gt;CREATE INDEX ... ON table USING btree (document_id int4_ops);&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;opclass를 일부러 바꿀 때만 의미가 달라짐(예: &lt;code&gt;text_pattern_ops&lt;/code&gt;, collation, 다른 인덱스 타입 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;배운 점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기본 B-Tree 인덱스에서는 정수/텍스트 opclass를 명시하지 않아도 동작·성능은 동일.&lt;/li&gt;
&lt;li&gt;Alembic는 루트에서 실행하면 설정 경로를 자동으로 따라가며, &lt;code&gt;down_revision&lt;/code&gt; 체인을 정확히 유지해야 안전하게 롤백 가능.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>개발일지</category>
      <category>alembic</category>
      <author>송채채</author>
      <guid isPermaLink="true">https://chaeeunsong.tistory.com/106</guid>
      <comments>https://chaeeunsong.tistory.com/106#entry106comment</comments>
      <pubDate>Wed, 29 Oct 2025 18:56:09 +0900</pubDate>
    </item>
  </channel>
</rss>