<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Vector Store on Chanyeol Dev</title>
    <link>https://chanyeols.com/tags/vector-store/</link>
    <description>Recent content in Vector Store on Chanyeol Dev</description>
    <generator>Hugo</generator>
    <language>ko-kr</language>
    <lastBuildDate>Thu, 19 Mar 2026 14:30:00 +0900</lastBuildDate>
    <atom:link href="https://chanyeols.com/tags/vector-store/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Spring AI RAG 구현하기: SimpleVectorStore로 전문 지식 데이터 주입 (3편)</title>
      <link>https://chanyeols.com/posts/spring-ai-rag-simplevectorstore-ingestion/</link>
      <pubDate>Thu, 19 Mar 2026 14:30:00 +0900</pubDate>
      <guid>https://chanyeols.com/posts/spring-ai-rag-simplevectorstore-ingestion/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[Dev-Fortune] 시리즈 다시보기&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://chanyeols.com/posts/spring-ai-ollama-chatbot-planning/&#34;&gt;1편: 기획부터 스택 선정까지&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chanyeols.com/posts/ollama-spring-boot-local-llm-setup/&#34;&gt;2편: 로컬 LLM Ollama 연동&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-서론-ai는-어떻게-사주를-공부하는가&#34;&gt;1. 서론: AI는 어떻게 사주를 &amp;lsquo;공부&amp;rsquo;하는가?&lt;/h2&gt;
&lt;p&gt;AI에게 새로운 지식을 가르치는 방법 중 가장 경제적이고 정확한 &lt;strong&gt;RAG(Retrieval-Augmented Generation)&lt;/strong&gt; 방식을 살펴봅니다. 질문이 들어올 때마다 관련 내용을 찾아서 읽어주며 답변하게 하는 원리입니다.&lt;/p&gt;
&lt;h2 id=&#34;2-데이터-주입-프로세스-data-ingestion&#34;&gt;2. 데이터 주입 프로세스 (Data Ingestion)&lt;/h2&gt;
&lt;p&gt;JSON 파일이 어떻게 벡터화되어 메모리에 저장되는지 그 흐름을 도식화했습니다.&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;
flowchart LR
    A[(sajuAPI.json)] --&gt; B[DataLoader]
    B --&gt; C[Text 정제: Key-Value형식]
    C --&gt; D[Embedding Model]
    D --&gt; E{SimpleVectorStore}
    E --&gt; F[RAM Memory]
&lt;pre&gt;&lt;code&gt;style F fill:#f96,stroke:#333,stroke-width:2px
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-simplevectorstore와-dataloader&#34;&gt;3. SimpleVectorStore와 DataLoader&lt;/h2&gt;
&lt;p&gt;우리 프로젝트는 별도의 DB 없이 메모리 기반의 &lt;code&gt;SimpleVectorStore&lt;/code&gt;를 사용합니다. &lt;code&gt;UnidocuDataLoader&lt;/code&gt;는 서버 기동 시점에 JSON 데이터를 읽어 벡터로 변환하여 주입합니다.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>[Dev-Fortune] 시리즈 다시보기</strong></p>
</blockquote>
<ul>
<li><a href="/posts/spring-ai-ollama-chatbot-planning/">1편: 기획부터 스택 선정까지</a></li>
<li><a href="/posts/ollama-spring-boot-local-llm-setup/">2편: 로컬 LLM Ollama 연동</a></li>
</ul>
<h2 id="1-서론-ai는-어떻게-사주를-공부하는가">1. 서론: AI는 어떻게 사주를 &lsquo;공부&rsquo;하는가?</h2>
<p>AI에게 새로운 지식을 가르치는 방법 중 가장 경제적이고 정확한 <strong>RAG(Retrieval-Augmented Generation)</strong> 방식을 살펴봅니다. 질문이 들어올 때마다 관련 내용을 찾아서 읽어주며 답변하게 하는 원리입니다.</p>
<h2 id="2-데이터-주입-프로세스-data-ingestion">2. 데이터 주입 프로세스 (Data Ingestion)</h2>
<p>JSON 파일이 어떻게 벡터화되어 메모리에 저장되는지 그 흐름을 도식화했습니다.</p>
<div class="mermaid">
flowchart LR
    A[(sajuAPI.json)] --> B[DataLoader]
    B --> C[Text 정제: Key-Value형식]
    C --> D[Embedding Model]
    D --> E{SimpleVectorStore}
    E --> F[RAM Memory]
<pre><code>style F fill:#f96,stroke:#333,stroke-width:2px
</code></pre>
</div>
<h2 id="3-simplevectorstore와-dataloader">3. SimpleVectorStore와 DataLoader</h2>
<p>우리 프로젝트는 별도의 DB 없이 메모리 기반의 <code>SimpleVectorStore</code>를 사용합니다. <code>UnidocuDataLoader</code>는 서버 기동 시점에 JSON 데이터를 읽어 벡터로 변환하여 주입합니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic">// 텍스트 정제 예시</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span>String<span style="color:#6e7681"> </span>content<span style="color:#6e7681"> </span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#6e7681"> </span>String.format(<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#a5d6ff">&#34;it_interpretation: %s\nanti_pattern: %s\nbad_habit: %s&#34;</span>,<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span>item.get(<span style="color:#a5d6ff">&#34;it_interpretation&#34;</span>),<span style="color:#6e7681"> </span>...<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span>);<span style="color:#6e7681">
</span></span></span></code></pre></div><h2 id="4-유사도-검색similarity-search">4. 유사도 검색(Similarity Search)</h2>
<p>사용자가 &ldquo;프로젝트 마감&quot;에 대해 물으면, 벡터 저장소는 의미적으로 유사한 사주 데이터 상위 3개를 찾아 AI에게 전달합니다.</p>
<p><strong>다음 4편에서는 이 데이터를 기반으로 시니컬한 말투를 생성하는 &lsquo;프롬프트 엔지니어링&rsquo;에 대해 다뤄보겠습니다.</strong></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
