<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>시행착오 기록하기</title>
    <link>https://mingzhi24.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 03:07:00 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>조맹지</managingEditor>
    <image>
      <title>시행착오 기록하기</title>
      <url>https://tistory1.daumcdn.net/tistory/4330287/attach/c9f35e1c69b34020b56a00a7c648e95d</url>
      <link>https://mingzhi24.tistory.com</link>
    </image>
    <item>
      <title>RAG를 활용한 LLM Application 개발 1</title>
      <link>https://mingzhi24.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-e558e458-e83f-4078-8224-ab7a2d01d1b3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;이번에 배울 강의는 RAG를 활용한 LLM 어플리케이션 개발이닷!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7cba3983-f6fb-4a55-ae6a-a690fe7dcccd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;마침 회사에서 프롬프트 형태로 질문하면 LLM이 대답해주는 형태의 어플리케이션을 개발해야 하는데 많은 도움이 될 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1dcdd5ae-5d99-4f3b-b047-6b7d0cb0ecb7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;내가 학습한 강의는 아래 링크이다. 필요한 분은 참고해서 학습하면 많은 도움이 될 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a36c542e-6ca0-4dc4-93ad-2106751701a3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot; data-href=&quot;https://www.inflearn.com/course/rag-llm-application%EA%B0%9C%EB%B0%9C-langchain&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/rag-llm-application%EA%B0%9C%EB%B0%9C-langchain&quot;&gt;https://www.inflearn.com/course/rag-llm-application%EA%B0%9C%EB%B0%9C-langchain&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-e854fe98-5a6c-416d-b0b8-fea3aca07355&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-e854fe98-5a6c-416d-b0b8-fea3aca07355&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e854fe98-5a6c-416d-b0b8-fea3aca07355&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-df5c5071-0dc3-4c39-837f-5915f4a6793f&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SE-9881f2a3-cb26-428c-b7db-dd3bdc3d24db&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #555555;&quot;&gt;What is RAG(Retrieval Augmented Generation)?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c83f69e5-5144-4ffb-9b15-e9bf459c2fb6&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-c83f69e5-5144-4ffb-9b15-e9bf459c2fb6&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c83f69e5-5144-4ffb-9b15-e9bf459c2fb6&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e12f2395-6a20-4782-87ea-fda07212d18c&quot;&gt;
&lt;p id=&quot;SE-27b007c9-dece-4d7a-8821-a8455fb42272&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;직독직해를 하자면 검색-증강 생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8ed848bf-a18e-452c-bc80-3ad8b6df5653&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;내가 니가 생성할 때 필요한 정보를 제공할테니 너가 마치 이 정보를 이미 알고 있는 것처럼 답변을 생성해라~&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0ec15a8b-82e7-4fc4-ba0f-b728d4a77c69&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM 기술이 등장하기 전부터 사용하던 개념&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e7212183-4fc3-4613-91b1-61b55e1f34d8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Retrieval&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;데이터를 가져오는 것이며, 구체적으로 &quot;컴퓨터 시스템에 저장된 자료를 취득하는 것&quot; 이라는 뜻도 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;언어 모델이 가지고 있지 않은 정보를 가져오는 것&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;언어 모델이 아웃풋을 만드는데 필요한 정보를 제공하는 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;언어 모델이 &quot;답변 생성&quot;에는 능숙하지만, 답변 생성을 위한 모든 정보를 가지고 있지 않음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;보안이 걸려 있는 사내 자료 케이스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;GPT4는 23년 10월까지 정보를 가지고 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Augmented&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;AR/VR에 사용되는 것과 같은 단어&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;마치 사실인 것처럼&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Retrieval 된 데이터를 LLM에게 주면서 &quot;마치 너가 이 정보를 아는 것처럼&quot; 라고 주는 것&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Generation&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;내가 데이터를 제공할테니 생성해라~ &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;SE-1fa8a199-c0b8-44fb-98eb-8c724f819dd9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-31a20550-c4c8-4142-8ddb-97a05000acb5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-5f2d3a4a-e960-4e3a-bda0-498aae67587d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;개발자의 역할은 1, 2번 우리가 정보를 제공하고 LLM에게 정보를 전달하는 것!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e55b1f94-517f-4a43-9523-474018b3d982&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;3번은 LLM의 역할&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-91d17156-1b56-4aa0-8f82-0baf19509c59&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;u&gt;&lt;b&gt;데이터를 잘 저장하는 것이 가장 큰 숙제!&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c7a7b81f-2721-40aa-a5e8-73395db031c1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그리고 잘 전달 하기 위해서는 &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;프롬프트를 잘 활용해야 함!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-88b59b6f-cac9-448c-85c1-3847c42f7dc7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;문맥을 어떻게 제공할 것인가도 답변 생성에 굉장히 큰 영향을 끼침!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0200b0a1-590b-4356-acf3-406efea84617&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-c29aa2a3-5f92-4ee0-b39f-9241e76a79e8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-6b1ee24c-0506-4089-876e-042e6e71e6ae&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-6b1ee24c-0506-4089-876e-042e6e71e6ae&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-6b1ee24c-0506-4089-876e-042e6e71e6ae&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-f6721ffe-658a-4e7e-afa7-734f177b4023&quot;&gt;
&lt;h3 id=&quot;SE-579a1469-8e44-4d85-b004-f1c664d211aa&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #555555;&quot;&gt;What is Vector Database?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-7228138e-d9ca-4b8f-a1e8-fbd1b8501cb0&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-7228138e-d9ca-4b8f-a1e8-fbd1b8501cb0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-7228138e-d9ca-4b8f-a1e8-fbd1b8501cb0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-1866265f-8b5d-47cf-8abd-d8051ae2d4ed&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;답변을 생성할 때 데이터는 사용자가 원하는 정보!&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;즉 사용자의 질문과 관련있는 데이터를 제공하는게 핵심&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;관련성 파악을 위해 vector를 활용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단어 또는 문장의 유사도를 파악해서 관련성을 측정함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Vector를 생성하는 방법&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Embedding 모델을 활용해서 vector를 생성함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Embedding 모델은 어떻게 만들어지느냐?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;문장에서 비슷한 단어가 자주 붙어 있는 것을 학습&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;왕은 왕자의 아버지다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;여왕은 왕자의 어머니다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;왕자의 단어 앞에 등장하는 왕과 여왕은 유사할 가능성이 높다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Embedding 프로젝트 링크&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot; data-href=&quot;https://projector.tensorflow.org/&quot;&gt;&lt;a href=&quot;https://projector.tensorflow.org/&quot;&gt;https://projector.tensorflow.org/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-28c79fcb-c18d-4f53-b722-4443f2d176d0&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-28c79fcb-c18d-4f53-b722-4443f2d176d0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-28c79fcb-c18d-4f53-b722-4443f2d176d0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-28c79fcb-c18d-4f53-b722-4443f2d176d0&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-28c79fcb-c18d-4f53-b722-4443f2d176d0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bjh0s/btsO91hYuhH/mdhVYKFKSlGf7h87kw26D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bjh0s/btsO91hYuhH/mdhVYKFKSlGf7h87kw26D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bjh0s/btsO91hYuhH/mdhVYKFKSlGf7h87kw26D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBjh0s%2FbtsO91hYuhH%2FmdhVYKFKSlGf7h87kw26D0%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;693&quot; height=&quot;440&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div id=&quot;SE-ce428c3c-8f9a-425d-8f71-ddabe207d53a&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-ce428c3c-8f9a-425d-8f71-ddabe207d53a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ce428c3c-8f9a-425d-8f71-ddabe207d53a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-ce428c3c-8f9a-425d-8f71-ddabe207d53a&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-ce428c3c-8f9a-425d-8f71-ddabe207d53a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiXcSY/btsO9JokjGZ/KPna9bojsl4FxURH8miSP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiXcSY/btsO9JokjGZ/KPna9bojsl4FxURH8miSP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiXcSY/btsO9JokjGZ/KPna9bojsl4FxURH8miSP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiXcSY%2FbtsO9JokjGZ%2FKPna9bojsl4FxURH8miSP0%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;693&quot; height=&quot;503&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p id=&quot;SE-3358b201-b680-4ea4-9414-8e681cdce774&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;3. Embedding 모델을 활용해 생성된 Vector를 저장&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단순히 vector만 저장하면 안되고 metadata도 같이 저장&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;metadata는 문서의 이름, 페이지 번호 등등 같이 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM에서 hallucination 환각 증세로 잘못된 정보를 최소화 하기 위해 출처를 밝힐 때 꼭 필요한 정보&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;어떤 문서 몇 페이지에서 가져온 정보에요~&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;SE-fa5b7f97-2e77-4f50-964d-fc028da15bb7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;4. Vector를 대상으로 유사도 검색 실시&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;사용자의 질문과 가장 비슷한 문서를 가져오는 것 - Retrieval&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;해당 강의에서는 소득세법을 RAG의 knowledge base로 활용할 예정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;문서 전체를 활용하면 속도도 느리고, 토큰수 초과로 답변이 생성 안될 수도 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;문서를 chunking page로 나눠서 가져올 예정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;가져온 문서를 prompt를 통해 LLM에 제공 - Augmented&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM은 prompt를 활용해서 답변 생성 - Generation&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;mttContainer&quot; class=&quot;notranslate&quot; style=&quot;transform: translate(858px, 3122px);&quot; aria-expanded=&quot;false&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>AI</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/21</guid>
      <comments>https://mingzhi24.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 8 Jul 2025 20:36:56 +0900</pubDate>
    </item>
    <item>
      <title>한시간으로 끝내는 LangChain 기본기 정리</title>
      <link>https://mingzhi24.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-6a6e35d4-98b3-43e1-ba44-b0b6ba7716ed&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;강의 시간은 1시간이지만 실제로 복습하고 블로그 정리하는 것까지 따지면 몇배가 걸린...ㅋ.ㅋ&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a57fce1b-3818-4fae-92be-938a6d73de90&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;인프런의 '한시간으로 끝내는 LangChain 기본기' 학습하고 복습 차원에서 정리하는 블로그다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1c070f4e-762e-4157-9e32-6ddbbf391fd3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;해당 강의를 통해 LLM을 활용한 LangChain 개발 및 답변을 컨트롤 하는 방법을 직접 실습해볼 수 있어서 아주 좋았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8/dashboard&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1751974403602&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;한시간으로 끝내는 LangChain 기본기 강의 | 강병진 - 인프런&quot; data-og-description=&quot;강병진 | 커피 한잔 가격으로 즐기는(?) 공식문서에서 핵심만 뽑아온 LangChain 기본 강의입니다. 본격적인 개발에 들어가기 전 LangChain 문법과 친해지세요!, 한시간으로 끝내는 LangChain 기본기LangChai&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8/dashboard&quot; data-og-url=&quot;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bExXqO/hyZjnADj06/jPFcZLCRpd2JykGrAymVW0/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/Vp5n4/hyZjsIJ2Bv/WWsAw3BSsAYS4dkCSuPktk/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/ryI1Q/hyZjuftOlc/ghJSQD0F8uP1GpROgX6GK0/img.jpg?width=1440&amp;amp;height=1440&amp;amp;face=0_0_1440_1440&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%ED%95%9C%EC%8B%9C%EA%B0%84-%EB%81%9D%EB%82%B4%EB%8A%94-%EB%9E%AD%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EB%B3%B8/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bExXqO/hyZjnADj06/jPFcZLCRpd2JykGrAymVW0/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/Vp5n4/hyZjsIJ2Bv/WWsAw3BSsAYS4dkCSuPktk/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/ryI1Q/hyZjuftOlc/ghJSQD0F8uP1GpROgX6GK0/img.jpg?width=1440&amp;amp;height=1440&amp;amp;face=0_0_1440_1440');&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;한시간으로 끝내는 LangChain 기본기 강의 | 강병진 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;강병진 | 커피 한잔 가격으로 즐기는(?) 공식문서에서 핵심만 뽑아온 LangChain 기본 강의입니다. 본격적인 개발에 들어가기 전 LangChain 문법과 친해지세요!, 한시간으로 끝내는 LangChain 기본기LangChai&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-945faca3-a515-4ce1-aaf4-f964c665ed8f&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-945faca3-a515-4ce1-aaf4-f964c665ed8f&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-945faca3-a515-4ce1-aaf4-f964c665ed8f&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-20971e73-71b7-4b05-b8d1-05b7fbf09627&quot;&gt;
&lt;p id=&quot;SE-bad341f7-e125-4186-996d-ae980e4163fe&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실습할 때 에디터 프로그램은 cursor 를 사용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-33610cf5-4985-4bfa-9163-f624d4a52bce&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM은 강의에서 등장하는 라마와 openai 사용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3640131d-0785-4913-baf8-f23a64fd599d&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a17b6fc8-3c62-4f1b-904e-fc573e2e9fda&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-a17b6fc8-3c62-4f1b-904e-fc573e2e9fda&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a17b6fc8-3c62-4f1b-904e-fc573e2e9fda&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a17b6fc8-3c62-4f1b-904e-fc573e2e9fda&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-a17b6fc8-3c62-4f1b-904e-fc573e2e9fda&quot;&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DMEyz/btsPacwQB1y/Yu0JLLu2vbLc4kSvxdYwM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DMEyz/btsPacwQB1y/Yu0JLLu2vbLc4kSvxdYwM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DMEyz/btsPacwQB1y/Yu0JLLu2vbLc4kSvxdYwM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDMEyz%2FbtsPacwQB1y%2FYu0JLLu2vbLc4kSvxdYwM1%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;936&quot; height=&quot;329&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-74026865-fe26-4bb2-b6a1-0cfad681c7d8&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-74026865-fe26-4bb2-b6a1-0cfad681c7d8&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-74026865-fe26-4bb2-b6a1-0cfad681c7d8&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-edcf081f-971a-4867-a3ba-7ed72cbda6d9&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;SE-6e120e72-9688-46f4-bc10-296843cd1ae5&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;LLM 호출하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-89acc17e-01df-4037-82d9-416b91717fb7&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-89acc17e-01df-4037-82d9-416b91717fb7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-89acc17e-01df-4037-82d9-416b91717fb7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-d4c87a96-558e-442a-9e40-a41b30d046d2&quot;&gt;
&lt;p id=&quot;SE-71a748e7-9b28-4d79-8933-be26ce159cf9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM 모델을 라마 3.2로 지정한 뒤, invoke로 prompt 질문&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-92f10a77-8b9a-4e4a-b3cc-0db2ca92b922&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-92f10a77-8b9a-4e4a-b3cc-0db2ca92b922&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-92f10a77-8b9a-4e4a-b3cc-0db2ca92b922&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from langchain_ollama import ChatOllama

llm = ChatOllama(model='llama3.2:1b')

llm.invoke(&quot;What is the capital of France?&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-23e010c3-ff1e-49d5-b954-227678a26e70&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-23e010c3-ff1e-49d5-b954-227678a26e70&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-23e010c3-ff1e-49d5-b954-227678a26e70&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;AIMessage(content='The capital of France is Paris.', additional_kwargs={}, response_metadata={'model': 'llama3.2:1b', 'created_at': '2025-05-28T10:52:29.805024Z', 'done': True, 'done_reason': 'stop', 'total_duration': 3995867822, 'load_duration': 2817787144, 'prompt_eval_count': 32, 'prompt_eval_duration': 603082524, 'eval_count': 8, 'eval_duration': 568924951, 'model_name': 'llama3.2:1b'}, id='run--93c2616a-f488-4196-8e21-36d6febd2d36-0', usage_metadata={'input_tokens': 32, 'output_tokens': 8, 'total_tokens': 40})&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-54b33466-cfd9-48e8-9520-8046efbcfbcf&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-1ee64c5b-2c45-4131-ac87-4184c27718b4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-54b33466-cfd9-48e8-9520-8046efbcfbcf&quot;&gt;
&lt;p id=&quot;SE-901346c3-a0e5-4661-ab55-4b148c3abaca&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM 모델을 openai 4o로 지정한 뒤, invoke로 prompt 질문&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b1a8a992-d967-4e7f-a628-4d8aff5a15a2&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-b1a8a992-d967-4e7f-a628-4d8aff5a15a2&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-b1a8a992-d967-4e7f-a628-4d8aff5a15a2&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from langchain_openai import ChatOpenAI

# ChatOpenAI 인스턴스 생성
lim = ChatOpenAI(model=&quot;gpt-4o-mini&quot;)

# 질의 실행
response = lim.invoke(&quot;What is the capital of France?&quot;)

print(response)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9c1911d8-8064-436f-914d-fe9264b1ddeb&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-9c1911d8-8064-436f-914d-fe9264b1ddeb&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9c1911d8-8064-436f-914d-fe9264b1ddeb&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;content='The capital of France is Paris.' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 7, 'prompt_tokens': 14, 'total_tokens': 21, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': None, 'id': 'chatcmpl-Bc8hp1LBD2ghKR94XZUzvs3xPi9jr', 'service_tier': 'default', 'finish_reason': 'stop', 'logprobs': None} id='run--3b1c3567-11a8-4cf1-b39b-4b703413c30e-0' usage_metadata={'input_tokens': 14, 'output_tokens': 7, 'total_tokens': 21, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0a3d29fb-def9-407f-a021-e8cea8f5f421&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-0a3d29fb-def9-407f-a021-e8cea8f5f421&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-0a3d29fb-def9-407f-a021-e8cea8f5f421&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-66571779-746e-4057-88e8-c1c2fca5d9f1&quot;&gt;
&lt;p id=&quot;SE-94f0e6cc-dedc-468f-b9ca-6e60c338471f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a622b9e5-d68a-4383-bdcb-5bf181f2653b&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-a622b9e5-d68a-4383-bdcb-5bf181f2653b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a622b9e5-d68a-4383-bdcb-5bf181f2653b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-bd4fc336-6442-42f9-a543-1af833da33fe&quot;&gt;
&lt;h3 id=&quot;SE-e8342151-da50-4887-9a9c-3d17618fee63&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;랭체인 스타일로 프롬프트 작성하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f3ad8c6c-90a4-412d-98e0-dd274daa39d8&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-f3ad8c6c-90a4-412d-98e0-dd274daa39d8&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f3ad8c6c-90a4-412d-98e0-dd274daa39d8&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-8eced0dd-797f-4b45-b744-0988bd861ec4&quot;&gt;
&lt;p id=&quot;SE-61d779b8-cf06-4eaf-b1b5-10416bedfc30&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;template 를 지정해 특정 키워드만 입력 받아 질문하는 형태로 호출 가능&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0ed31ef7-89dc-4f39-a7fe-516a59cd4c1e&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-0ed31ef7-89dc-4f39-a7fe-516a59cd4c1e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-0ed31ef7-89dc-4f39-a7fe-516a59cd4c1e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from langchain_core.prompts import PromptTemplate

prompt_template = PromptTemplate(
    template=&quot;What is the capital of {country}?&quot;,
    input_variables=[&quot;country&quot;],
)

prompt = prompt_template.invoke({&quot;country&quot;: &quot;France&quot;})

print(prompt)

llm.invoke(prompt)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-78f33e9c-fdad-4ef3-ad65-c2b6188753df&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-78f33e9c-fdad-4ef3-ad65-c2b6188753df&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-78f33e9c-fdad-4ef3-ad65-c2b6188753df&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;text='What is the capital of France?'
AIMessage(content='The capital of France is Paris.', additional_kwargs={}, response_metadata={'model': 'llama3.2:1b', 'created_at': '2025-05-21T06:08:04.523554Z', 'done': True, 'done_reason': 'stop', 'total_duration': 3704320399, 'load_duration': 2664262712, 'prompt_eval_count': 32, 'prompt_eval_duration': 523720080, 'eval_count': 8, 'eval_duration': 508185854, 'model_name': 'llama3.2:1b'}, id='run--a96850e2-b204-4586-8a18-80378fd04052-0', usage_metadata={'input_tokens': 32, 'output_tokens': 8, 'total_tokens': 40})&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-0ef85266-263b-4f63-94f1-d698edf13ac8&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-0ef85266-263b-4f63-94f1-d698edf13ac8&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-0ef85266-263b-4f63-94f1-d698edf13ac8&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-55cb2dce-b0f8-4d4c-b5ce-3a4699747dfa&quot;&gt;
&lt;p id=&quot;SE-00e3ba9c-4d20-4dc6-8aac-1b7a84d9631e&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-0cf65e50-f030-497f-8b9d-00e3fb0b2c6e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;만약 내가 LLM 모델한테 더 정확한 질문을 하고 싶다?&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-24f204b8-e2cb-44c0-9725-77161692dd38&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그렇다면 비슷한 질문을 여러 번 문의할수록 대답의 수준을 올라간다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-143a0b8b-01c1-4b6c-9b7d-c3629a1a39cd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그걸 구현한 코드&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-bc4c1e63-f47a-4214-b7f9-1e5bbca7245a&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-bc4c1e63-f47a-4214-b7f9-1e5bbca7245a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-bc4c1e63-f47a-4214-b7f9-1e5bbca7245a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from langchain_core.messages import HumanMessage, SystemMessage, AIMessage

message_list = [
    SystemMessage(content=&quot;You are a helpful assostant!&quot;),
    HumanMessage(content=&quot;What is the capital of France?&quot;),
    AIMessage(content=&quot;The capital of France is Paris.&quot;),
    HumanMessage(content=&quot;What is the capital of Germany?&quot;),
    AIMessage(content=&quot;The capital of Germany is Berlin.&quot;),
    HumanMessage(content=&quot;What is the capital of Italy?&quot;),
    AIMessage(content=&quot;The capital of Italy is Rome.&quot;),
    HumanMessage(content=&quot;What is the capital of Korea?&quot;),
]

llm.invoke(message_list)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-dd074b0d-b1fb-425b-98a4-08824a968f03&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-dd074b0d-b1fb-425b-98a4-08824a968f03&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-dd074b0d-b1fb-425b-98a4-08824a968f03&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;AIMessage(content=&quot;The capital of Korea (South Korea) is Seoul, and the capital of North Korea is Pyongyang. However, if you're referring to the entire country of South Korea, the answer would be Seoul again.&quot;, additional_kwargs={}, response_metadata={'model': 'llama3.2:1b', 'created_at': '2025-05-21T06:56:04.457352Z', 'done': True, 'done_reason': 'stop', 'total_duration': 6902747881, 'load_duration': 2293908867, 'prompt_eval_count': 88, 'prompt_eval_duration': 1103628085, 'eval_count': 42, 'eval_duration': 3501599648, 'model_name': 'llama3.2:1b'}, id='run--4ce1ae19-16c3-4744-8758-420119b1ccd1-0', usage_metadata={'input_tokens': 88, 'output_tokens': 42, 'total_tokens': 130})&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-71ddfcd3-7a87-43ba-a969-1912fda1975e&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-71ddfcd3-7a87-43ba-a969-1912fda1975e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-71ddfcd3-7a87-43ba-a969-1912fda1975e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-4cf3b1d8-5c06-4899-b599-d4c8f8ab8308&quot;&gt;
&lt;p id=&quot;SE-fe4dd823-0e17-413d-9e29-d42dd249b2a9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-8e923b48-d9f3-4a7a-96cb-338da23fd9f2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;단 위와 같이 스트링 형태로 질문하는건 코드상 재가용성이 좋지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a084198a-76cc-4d21-a118-a1bc3ce33969&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같은 형태로 특정 키워드만 사용자에게 입력받는 형태로도 구현 가능 &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-4ce686ee-0489-4f0e-971e-770f64cff815&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-4ce686ee-0489-4f0e-971e-770f64cff815&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-4ce686ee-0489-4f0e-971e-770f64cff815&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from langchain_core.prompts import ChatPromptTemplate

chat_prompt_template = ChatPromptTemplate.from_messages([
    (&quot;system&quot;, &quot;You are a helpful assistant!&quot;),
    (&quot;human&quot;, &quot;What is the capital of {country}?&quot;)
])

chat_prompt = chat_prompt_template.invoke({&quot;country&quot;: &quot;Korea&quot;})

print(chat_prompt)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8d16b02e-5c32-496d-867a-641e506d7075&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-8d16b02e-5c32-496d-867a-641e506d7075&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8d16b02e-5c32-496d-867a-641e506d7075&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;messages=[SystemMessage(content='You are a helpful assistant!', additional_kwargs={}, response_metadata={}), HumanMessage(content='What is the capital of Korea?', additional_kwargs={}, response_metadata={})]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f50bc704-7527-47e6-a457-80ee92535be9&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-f50bc704-7527-47e6-a457-80ee92535be9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f50bc704-7527-47e6-a457-80ee92535be9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-a90f2da8-8c04-4e5e-8bd3-d0af7fc6c21c&quot;&gt;
&lt;p id=&quot;SE-64a14a81-c4ad-4662-9b76-a31282f814ea&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c5719d6f-6d21-479f-a242-0201ebbe3bad&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-c5719d6f-6d21-479f-a242-0201ebbe3bad&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c5719d6f-6d21-479f-a242-0201ebbe3bad&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-63ed921e-59b6-40b4-9513-a3e2f76cad07&quot;&gt;
&lt;h3 id=&quot;SE-459b1994-ce06-4e53-88de-02aee49a20d6&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;답변의 형식 컨트롤 하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f20bf96d-d9f4-4a2a-a68a-0c385b89c8a9&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-f20bf96d-d9f4-4a2a-a68a-0c385b89c8a9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f20bf96d-d9f4-4a2a-a68a-0c385b89c8a9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-0695edda-991b-4a9c-abcc-3acd0f4de1fe&quot;&gt;
&lt;p id=&quot;SE-db2cf0d2-427e-4186-9bcf-07b3e92a737b&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM으로부터 전달 받은 메세지의 date type이 string 인지, json 형태인지 처리를 할 때 중요함&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4337f847-34ce-42ad-8727-067a4b234da9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-0030ea8b-4e64-4a45-99c1-3d3cc9006225&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 string으로 응답 받을 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-123a55ad-cfe9-44e5-9e0a-d6c1358a04cf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;다만 코드 복잡성이 생김&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a6236b91-da00-485f-a9ed-3872ce9ca801&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-a6236b91-da00-485f-a9ed-3872ce9ca801&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a6236b91-da00-485f-a9ed-3872ce9ca801&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt_template = PromptTemplate(
    template=&quot;What is the capital of {country}? Return the name of the city only&quot;,
    input_variables=[&quot;country&quot;],
)

prompt = prompt_template.invoke({&quot;country&quot;: &quot;France&quot;})

print(prompt)

ai_message = llm.invoke(prompt_template.invoke({&quot;country&quot;: &quot;Korea&quot;}))

print(ai_message)

output_parser = StrOutputParser()

answer = output_parser.invoke(llm.invoke(prompt_template.invoke({&quot;country&quot;: &quot;Korea&quot;})))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-fe5ec51c-d15e-4d3b-89ef-07b6fe4680bf&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-fe5ec51c-d15e-4d3b-89ef-07b6fe4680bf&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-fe5ec51c-d15e-4d3b-89ef-07b6fe4680bf&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;text='What is the capital of France? Return the name of the city only'
content='Seoul' additional_kwargs={} response_metadata={'model': 'llama3.2:1b', 'created_at': '2025-05-21T07:16:10.635942Z', 'done': True, 'done_reason': 'stop', 'total_duration': 490699235, 'load_duration': 36104863, 'prompt_eval_count': 39, 'prompt_eval_duration': 265514208, 'eval_count': 3, 'eval_duration': 188342586, 'model_name': 'llama3.2:1b'} id='run--82267015-ec45-4528-8188-ac2b896b30ce-0' usage_metadata={'input_tokens': 39, 'output_tokens': 3, 'total_tokens': 42}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-52056504-cfbd-454d-b7ff-4ea2d5631482&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-52056504-cfbd-454d-b7ff-4ea2d5631482&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-52056504-cfbd-454d-b7ff-4ea2d5631482&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-1579bd5e-85ba-4ccd-b114-e69ff602ce52&quot;&gt;
&lt;p id=&quot;SE-397af43b-0fd5-4833-b06d-c4d15adba1ee&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-819c2692-f047-49ca-8a8e-b7f747d05e74&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그래서 아래와 같이 BaseModel을 통해 형태를 지정할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ee5daf45-3de4-42e9-8071-bf50721e446e&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-ee5daf45-3de4-42e9-8071-bf50721e446e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ee5daf45-3de4-42e9-8071-bf50721e446e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;from pydantic import BaseModel, Field

class CountryDetail(BaseModel):
    capital: str = Field(description=&quot;The capital of the country&quot;)
    population: int = Field(description=&quot;The population of the country&quot;)
    language: str = Field(description=&quot;The language of the country&quot;)
    currency: str = Field(description=&quot;The currency of the country&quot;)

structued_llm = llm.with_structured_output(CountryDetail)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-a68bbd4a-bb55-4414-8aa7-f784259d105f&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-a68bbd4a-bb55-4414-8aa7-f784259d105f&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-a68bbd4a-bb55-4414-8aa7-f784259d105f&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sml&quot;&gt;&lt;code&gt;first=RunnableBinding(bound=ChatOllama(model='llama3.2:1b'), kwargs={'format': {'properties': {'capital': {'description': 'The capital of the country', 'title': 'Capital', 'type': 'string'}, 'population': {'description': 'The population of the country', 'title': 'Population', 'type': 'integer'}, 'language': {'description': 'The language of the country', 'title': 'Language', 'type': 'string'}, 'currency': {'description': 'The currency of the country', 'title': 'Currency', 'type': 'string'}}, 'required': ['capital', 'population', 'language', 'currency'], 'title': 'CountryDetail', 'type': 'object'}, 'ls_structured_output_format': {'kwargs': {'method': 'json_schema'}, 'schema': &amp;lt;class '__main__.CountryDetail'&amp;gt;}}, config={}, config_factories=[]) middle=[] last=PydanticOutputParser(pydantic_object=&amp;lt;class '__main__.CountryDetail'&amp;gt;)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1f88ef8e-c9f7-4514-ad1e-11297e8a0e50&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-1f88ef8e-c9f7-4514-ad1e-11297e8a0e50&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-1f88ef8e-c9f7-4514-ad1e-11297e8a0e50&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-f3c4523f-8b0e-4491-9fd3-9d0505c94695&quot;&gt;
&lt;p id=&quot;SE-074c44b0-ce72-4fa9-8009-1d2ee79d09e6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-54ce8944-1410-411b-9ab2-d4c02235a3ca&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;string이 아닌 JSON 형태로 응답을 받아야 할 때&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e827c33d-7ad6-4770-a1f0-12f3b9b6650f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;JsonOutputParser를 이용해 JSON 형태로 전달 받을 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e5070400-35a3-402a-9d6a-95e386b8b6b0&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-e5070400-35a3-402a-9d6a-95e386b8b6b0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e5070400-35a3-402a-9d6a-95e386b8b6b0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from langchain_core.output_parsers import JsonOutputParser

country_detail_prompt = PromptTemplate(
    template=&quot;&quot;&quot;Give following information abount {country}:
    - Capital
    - Population
    - Language
    - Currency

    return it in JSON format. and return the JSON dictionary only
    &quot;&quot;&quot;,
    input_variables=[&quot;country&quot;],
)

country_detail_prompt.invoke({&quot;country&quot;: &quot;Korea&quot;})

#output_parser = JsonOutputParser()
json_ai_message = structued_llm.invoke(country_detail_prompt.invoke({&quot;country&quot;: &quot;Korea&quot;}))

#output_parser.invoke(json_ai_message)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5d2d1db1-2299-44ff-9ea5-450a3001cf7b&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-5d2d1db1-2299-44ff-9ea5-450a3001cf7b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5d2d1db1-2299-44ff-9ea5-450a3001cf7b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;json_ai_message.model_dump()&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8c0b895e-2574-436a-a3c9-966bced34dca&quot; data-a11y-title=&quot;코드&quot; data-compid=&quot;SE-8c0b895e-2574-436a-a3c9-966bced34dca&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8c0b895e-2574-436a-a3c9-966bced34dca&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;sml&quot;&gt;&lt;code&gt;{'capital': 'Seoul',
 'population': 51,
 'language': 'Korean',
 'currency': 'South Korean won'}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9e5d4449-7c9d-4080-8372-3647e24b419b&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-9e5d4449-7c9d-4080-8372-3647e24b419b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9e5d4449-7c9d-4080-8372-3647e24b419b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-9a00fa28-3086-4b89-aee3-6221048f19e9&quot;&gt;
&lt;p id=&quot;SE-957569b4-b6eb-4573-82b5-d352343f9c9a&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e3d87e33-10b7-424c-a98d-7b840b4b2abd&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-e3d87e33-10b7-424c-a98d-7b840b4b2abd&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e3d87e33-10b7-424c-a98d-7b840b4b2abd&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-81500ccc-9185-4628-a650-e3f7c4cc3555&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-e9fb1554-11d0-4619-a7e5-cfe69b8cb146&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-e9fb1554-11d0-4619-a7e5-cfe69b8cb146&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-e9fb1554-11d0-4619-a7e5-cfe69b8cb146&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-eac701eb-3103-49df-bf44-cb0bda64aed1&quot;&gt;
&lt;p id=&quot;SE-5ba3f73d-0d15-4ae1-9fee-7bd3967da38f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-caa0082f-d252-4841-b99c-5336549cac6b&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-caa0082f-d252-4841-b99c-5336549cac6b&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-caa0082f-d252-4841-b99c-5336549cac6b&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-91ed4294-6a31-4c9c-a2f8-a281f133763c&quot;&gt;
&lt;p id=&quot;SE-8aec7f6d-6f36-4448-b214-130622ae3216&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-01d9b335-d3bd-4848-85ab-caa609dce52d&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-01d9b335-d3bd-4848-85ab-caa609dce52d&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-01d9b335-d3bd-4848-85ab-caa609dce52d&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-eb673151-c512-4690-b112-17df77110513&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;LLM 은 &lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;knowledge&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt; cutoff 기한이 있기 때문에 최신 정보를 모르는 경우가 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555;&quot;&gt;이를 방지하고자 RAG 기법을 사용하여 최신 정보를 검색하여 LLM이 참고할 수 있도록 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;SE-af3f340e-3a82-421c-b001-057e4b85d135&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/20</guid>
      <comments>https://mingzhi24.tistory.com/20#entry20comment</comments>
      <pubDate>Tue, 8 Jul 2025 20:34:53 +0900</pubDate>
    </item>
    <item>
      <title>AI 핫한 키워드만 뽑아본다</title>
      <link>https://mingzhi24.tistory.com/19</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요새 핫한 AI&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 회사에서 업무에 엮어보라고 달달 볶아대서 요새 공부를 하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;챗지티피로 지브리 스타일로 바꿔줘 라고만 할 줄 알았지 개발이라니?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 고로 정리해본 AI 키워드와 개념 정리!&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;LLM&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Large Language Model 로 인간의 언어를 이해하고 생성하는 인공지능 모델로, 간단하게 말하면 챗지티피다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 ChatGPT 말고도 Google의 Gemini, Meta의 LLaMa 등등 우리가 익숙한 AI 서비스가 모두 여기에 해당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 반대로 비용과 배포 등 여러 이슈로 다양한 분야에서 학습 모델을 시키는게 아닌 특정 한 분야에 대해서만 학습 시키는 sLM(small Language Model)도 있다.&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;프롬프트(Prompt)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 등 AI 모델과 상호작용 할 때 사용자가 AI에게 제공하는 입력 텍스트를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해 AI에게 '지브리 스타일로 만들어줘' 라거나 '틀렸어, 너가 마치 미야자키 하야오인 것처럼 작업해줘' 라고 요청하는 문장이나 구절을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요새는 프롬프트 엔지니어라는 직업이 생겨서 미국에서 연봉이 몇억 한다는데 그만큼 질문을 하는 사용자가 어떻게 질문하냐에 따라서 대답의 수준이 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;랭체인(LangChain)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 기반의 애플리케이션 개발을 돕는 오픈 소스 프레임워크입니다. 쉽게 말해, LLM을 사용해서 복잡하고 유용한 프로그램을 만들 때 필요한 다양한 도구와 컴포넌트를 제공하는 일종의 '개발 키트'라고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 자체로도 다양한 기능을 제공하지만, 실제 서비스에 활용하려면 단순히 질문하고 답변받는 것을 넘어 외부 데이터와 연동하거나 여러 단계를 거쳐 작업을 수행해야 하는 경우가 많다. 랭체인은 이러한 복잡한 과정을 효율적으로 구축할 수 있도록 도와준다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 모델 I/O&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 LLM과 쉽게 연동할 수 있는 인터페이스를 제공&lt;/li&gt;
&lt;li&gt;프롬프트 템플릿으로 효과적인 프롬프트를 만들고 관리할 수 있도록 도와줌&lt;/li&gt;
&lt;li&gt;Output Parsers 로 LLM의 응답을 JSON, 리스트 등 구조화된 형태로 변환하여 다른 시스템에서 활용하기 쉽게 만듬&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 증강&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM이 최신 정보나 특정 도메인 지식에 접근할 수 있도록 도움&lt;/li&gt;
&lt;li&gt;Document Loaders로 PDF, 웹 페이지, 데이터베이스 등 다양한 형식의 문서를 불러옴&lt;/li&gt;
&lt;li&gt;Text Splitters로 긴 문서를 LLM이 처리하기 쉽게 작은 단위로 나눠줌&lt;/li&gt;
&lt;li&gt;Vectorstores로 임베딩된 문서를 저장하고 검색하는 데이터베이스를 통해 사용자의 질문과 관련된 문서를 찾아 LLM에 제공하는 LAG(Retrieval Augmented Generation) 패턴을 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 체인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 LLM 호출이나 다른 컴포넌트들을 연결하여 복잡한 작업을 순차적으로 수행하도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 에이전트&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM이 스스로 어떤 도구(Tool)를 사용해서 다음 작업을 수행할 지 '추론'하고 '결정' 할 수 있도록 함. 이는 LLM에게 '생각하고 행동하는' 능력을 부여하는 것과 같음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 메모리&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM 애플리케이션이 이전 대화 내용을 기억하고 현재 대화에 활용할 수 있도록 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;랭그래프(LangGraph)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MCP&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Model Context Protocol의 약자로 LLM이 외부 데이터 소스나 도구(Tool)와 원활하게 상호작용하고, 최신 정보나 특정 기능을 활용할 수 있도록 돕는 개방형 프로토콜이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어지게 된 배경은 LLM은 방대한 데이터를 학습했지만, 훈련 시점 이후의 최신 정보나 특정 도메인 지식, 혹은 외부 시스템의 기능을 직접적으로 활용할 수 없다. 랭체인과 같은 프레임워크가 이러한 외부 연동을 돕는다면, MCP는 이러한 연동의 표준화된 규칙을 제공하려는 시도라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 리소스 접근 : 웹 페이지, 데이터베이스, 파일 시스템 등 AI 모델이 접근해야 하는 다양한 외부 데이터를 컨텍스트로 제공&lt;/li&gt;
&lt;li&gt;도구 활용 : 계산기, 웹 검색, 이미지 생성 API 등 외부 프로그램을 AI 모델이 필요에 따라 호출하고 하숑할 수 있도록 함&lt;/li&gt;
&lt;li&gt;프롬프트 관리 : AI가 일관되고 유용한 응답을 생성하도록 돕는 프롬프트 탬플릿을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM의 한계(최신 정보 부족, 환각 현상, 제한된 기능)를 극복하고, AI가 더욱 폭넓게 활용될 수 있도록 돕는 것을 목표로 함&lt;/li&gt;
&lt;li&gt;AI 에이전트가 현실 세계와 더 잘 상호작용하고 복잡한 작업을 수행할 수 있도록 하는 다리 역할을 함&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/19</guid>
      <comments>https://mingzhi24.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 21 May 2025 19:59:24 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 백그라운드 쿼리 실행</title>
      <link>https://mingzhi24.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 작업하는 경우 터니멸 세션 Time out 으로 쿼리가 끊기는 현상이 종종 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 방지하고자 백그라운드로 쿼리가 실행하도록 설정하는 방법에 대해 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 백그라운드로 수행할 쉘 스크립트 작성&lt;/p&gt;
&lt;pre id=&quot;code_1675237406802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cat bg.sql
mysql -u&quot;계정&quot; -p&quot;비번&quot; -e &quot;source 230201_alter.sql&quot; -t &amp;gt; /tmp/230201_alter.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. MySQL에서 수행할 쿼리 .sql 파일 작성&lt;/p&gt;
&lt;pre id=&quot;code_1675237508744&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cat 230201_alter.sql
select now();

-- SET SESSION sql_log_bin=OFF;
SHOW VARIABLES LIKE 'sql_log_bin';

ALTER TABLE ~;

select now();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. nohup 으로 수행하기 위해 권한 부여&lt;/p&gt;
&lt;pre id=&quot;code_1675237566575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ chmod 755 bg.sql
$ chmod 755 230201_alter.sql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 백그라운드 수행&lt;/p&gt;
&lt;pre id=&quot;code_1675237600387&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ nohup ./bg.sql &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 작업 진행 상황 확인&lt;/p&gt;
&lt;pre id=&quot;code_1675237644290&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ tail -f /tmp/230201_alter.log&lt;/code&gt;&lt;/pre&gt;</description>
      <category>RDBMS/MySQL</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/18</guid>
      <comments>https://mingzhi24.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 1 Feb 2023 16:47:57 +0900</pubDate>
    </item>
    <item>
      <title>Linux 리눅스 환경에서 문자열 한번에 변경하기</title>
      <link>https://mingzhi24.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 환경에서 일하다 보면 한번에 문자열을 변경해야 하는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP가 변경된다거나 지정한 폴더명이 달라질 때 등 일일히 찾아서 변경해야 할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번거로운 작업을 한번에 해결할 수 있는 좋은 친구다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더 내에 파일들 모두 변경&lt;/p&gt;
&lt;pre id=&quot;code_1654135881508&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#17.78 변경 전 문자열
#17.50 변경 후 문자열

sed -i 's/17.78/17.50/g' *&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉘 스크립트 내에서 문자열 한번에 변경&lt;/p&gt;
&lt;pre id=&quot;code_1654136152653&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;%s/변경 전 문자열/변경 후 문자열

# 변경 문자에 '/'가 포함된 경우 아래처럼 수행 가능
%s:변경 전 문자열:변경 후 문자열&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Linux</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/17</guid>
      <comments>https://mingzhi24.tistory.com/17#entry17comment</comments>
      <pubDate>Thu, 2 Jun 2022 11:18:03 +0900</pubDate>
    </item>
    <item>
      <title>Linux 대소문자 전환 쉘 스크립트</title>
      <link>https://mingzhi24.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일을 하다보면 가끔 대소문자를 변경해야 하는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 쉘 스크립트에서 대소문자를 전환하는 명령어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1654135598931&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#소문자 -&amp;gt; 대문자
for i in $( ls | grep [a-z] ); do mv -i $i `echo $i | tr 'a-z' 'A-Z'`; done


#대문자 -&amp;gt; 소문자
for i in $( ls | grep [A-Z] ); do mv -i $i `echo $i | tr 'A-Z' 'a-z'`; done&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/16</guid>
      <comments>https://mingzhi24.tistory.com/16#entry16comment</comments>
      <pubDate>Thu, 2 Jun 2022 11:08:07 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 대용량 더미 데이터 생성 쿼리 (임시 데이터)</title>
      <link>https://mingzhi24.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리 테스트나 컬럼 추가 시 테스트 서버에 임시 데이터를 넣어 수행 시간이나 성능 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임시 데이터를 넣을 때 짠 SP 에 대해 간단하게 정리해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1654135451946&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELIMITER //
CREATE PROCEDURE `SP_IN_DUMMY_TB_EVENT`(
	IN `IN_START` INT, 
	IN `IN_END` INT
)
BEGIN
	DECLARE i INT DEFAULT IN_START;
	WHILE(i &amp;lt;= IN_END) DO
		INSERT INTO DB명.테이블명 (`TEST01`, `TEST02`, `TEST03`) 
		    VALUES ('TEST01', 'TEST02', 'TEST03');
		SET i = i + 1;
	END WHILE;
END//
DELIMITER ;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>RDBMS/MySQL</category>
      <category>MySQL</category>
      <category>MYSQL더미데이터</category>
      <category>MYSQL임시데이터</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/15</guid>
      <comments>https://mingzhi24.tistory.com/15#entry15comment</comments>
      <pubDate>Thu, 2 Jun 2022 11:05:23 +0900</pubDate>
    </item>
    <item>
      <title>주민번호 성별 구분 (국내, 외국인 포함)</title>
      <link>https://mingzhi24.tistory.com/14</link>
      <description>&lt;div&gt;데이터 추출을 하다보면 주민번호 7번째 자리로 성별을 구분해야 하는 경우가 많다.&lt;/div&gt;
&lt;div&gt;매번 검색하기 번거로워 블로그에 정리한다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;[주민번호 7번째 자리수 성별 구분]&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;931208-&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;X&lt;/b&gt;&lt;/span&gt;123456&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;9&amp;nbsp;: 1800 ~ 1899년에 태어난 남성(현재 대부분 사망)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;0&amp;nbsp;: 1800 ~ 1899년에 태어난 여성(현재 대부분 사망)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;1&amp;nbsp;: 1900 ~ 1999년에 태어난 남성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;2&amp;nbsp;: 1900 ~ 1999년에 태어난 여성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;3&amp;nbsp;: 2000 ~ 2099년에 태어난 남성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;4&amp;nbsp;: 2000 ~ 2099년에 태어난 여성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;5&amp;nbsp;: 1900 ~ 1999년에 태어난 외국인 남성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;6&amp;nbsp;: 1900 ~ 1999년에 태어난 외국인 여성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;7&amp;nbsp;: 2000 ~ 2099년에 태어난 외국인 남성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #202122;&quot;&gt;8&amp;nbsp;: 2000 ~ 2099년에 태어난 외국인 여성&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>업무 참고</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/14</guid>
      <comments>https://mingzhi24.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 2 Jun 2022 10:39:19 +0900</pubDate>
    </item>
    <item>
      <title>MySQL SQL 오류(1153): Got a packet bigger than 'max_allowed_packet' bytes</title>
      <link>https://mingzhi24.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;타 팀에서 데이터 추출 요청이 들어와 운영기에서 조회를 했는데 에러가 떴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회할 대상이 많고 string 값이 길었던 터라 한번에 안될꺼라 직감했는데 역시나 안됐다ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링을 해서 아래와 같이 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에러명 : Got&amp;nbsp;a&amp;nbsp;packet&amp;nbsp;bigger&amp;nbsp;than&amp;nbsp;'max_allowed_packet'&amp;nbsp;bytes&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에러 발생 원인 : 클라이언트에서 서버로 패킷 전송 시 지정된 패킷 용량보다 클 경우 발생하는 에러&lt;/b&gt;&lt;/p&gt;
&lt;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;해결 방법 :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 설정되어 있는 max_allowed_packet 용량 확인&lt;/p&gt;
&lt;pre id=&quot;code_1646706624151&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SHOW VARIABLES LIKE 'max_allowed_packet';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;my.cnf 파일에 별도로 지정을 안했거나, set으로 설정한게 아니라면 기본적으로 4M 로 설정되어 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfv4kR/btrvngmoxTC/0KrnOnrNW1DfKTNxbw4pSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfv4kR/btrvngmoxTC/0KrnOnrNW1DfKTNxbw4pSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfv4kR/btrvngmoxTC/0KrnOnrNW1DfKTNxbw4pSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfv4kR%2FbtrvngmoxTC%2F0KrnOnrNW1DfKTNxbw4pSK%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;657&quot; height=&quot;346&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;vi /etc/my.cnf&amp;nbsp; 파일에서 파라미터 설정&lt;/p&gt;
&lt;pre id=&quot;code_1646706745581&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[mysqld]
max_allowed_patcke = 20M&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할 점은 너무 높은 값으로 설정하면 서버에 부하가 갈 수 있으므로 적절하게 설정 필요&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고 자료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MySQL 5.7 매뉴얼 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646707005686&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;MySQL :: MySQL 5.7 Reference Manual :: 5.1.7 Server System Variables&quot; data-og-description=&quot;&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 5.7 Reference Manual :: 5.1.7 Server System Variables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646707007675&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;MySQL :: MySQL 5.7 Reference Manual :: 4.2.2.5 Using Options to Set Program Variables&quot; data-og-description=&quot;4.2.2.5&amp;nbsp;Using Options to Set Program Variables Many MySQL programs have internal variables that can be set at runtime using the SET statement. See Section&amp;nbsp;13.7.4.1, &amp;ldquo;SET Syntax for Variable Assignment&amp;rdquo;, and Section&amp;nbsp;5.1.8, &amp;ldquo;Using System Variables&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/program-variables.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 5.7 Reference Manual :: 4.2.2.5 Using Options to Set Program Variables&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;4.2.2.5&amp;nbsp;Using Options to Set Program Variables Many MySQL programs have internal variables that can be set at runtime using the SET statement. See Section&amp;nbsp;13.7.4.1, &amp;ldquo;SET Syntax for Variable Assignment&amp;rdquo;, and Section&amp;nbsp;5.1.8, &amp;ldquo;Using System Variables&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.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;</description>
      <category>RDBMS/MySQL</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/13</guid>
      <comments>https://mingzhi24.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 8 Mar 2022 11:37:53 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 프로시저 조회/생성/수정/실행 권한 부여</title>
      <link>https://mingzhi24.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SP 조회 권한 요청이 와서 구글링을 했는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에 검색했을 때 잘 나오지 않아서 정리했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- SP 조회 권한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRANT&amp;nbsp;&lt;b&gt;SELECT&amp;nbsp;&lt;/b&gt;ON&amp;nbsp;mysql.proc&amp;nbsp;TO&amp;nbsp;계정@'IP';&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;-- SP 생성, 수정 권한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRANT &lt;b&gt;CREATE, ALTER ROUTINE&lt;/b&gt; ON DB명.* TO 계정@'IP';&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;-- SP 실행 권한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRANT &lt;b&gt;EXECUTE ON PROCEDURE&lt;/b&gt; DB명.프로시저명 TO 계정@'IP';&lt;/p&gt;</description>
      <category>RDBMS/MySQL</category>
      <author>조맹지</author>
      <guid isPermaLink="true">https://mingzhi24.tistory.com/12</guid>
      <comments>https://mingzhi24.tistory.com/12#entry12comment</comments>
      <pubDate>Fri, 18 Feb 2022 17:53:32 +0900</pubDate>
    </item>
  </channel>
</rss>