<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>hs-note</title>
    <link>https://hs-note.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 22 Jun 2026 11:00:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jerymy</managingEditor>
    <item>
      <title>AI 에이전트 프레임워크 선택 가이드: 목적별 추천과 학습 경로</title>
      <link>https://hs-note.tistory.com/34</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image Sep 15, 2025 at 01_29_56 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dopNJo/btsQAfrLj8Z/KYHtvSlVGoeHNmnXI76zik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dopNJo/btsQAfrLj8Z/KYHtvSlVGoeHNmnXI76zik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dopNJo/btsQAfrLj8Z/KYHtvSlVGoeHNmnXI76zik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdopNJo%2FbtsQAfrLj8Z%2FKYHtvSlVGoeHNmnXI76zik%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image Sep 15, 2025 at 01_29_56 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;83&quot; data-start=&quot;0&quot;&gt;AI 에이전트 프레임워크 심층 분석: Crew AI, Autogen, OpenAI Agents SDK, Google ADK, Langraph 비교&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;115&quot; data-start=&quot;85&quot; data-ke-size=&quot;size26&quot;&gt;서론: 왜 지금 AI 에이전트 프레임워크인가?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;320&quot; data-start=&quot;116&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트는 단순한 대화형 챗봇을 넘어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;도구 활용, 의사결정, 멀티 스텝 태스크 수행&lt;/b&gt;까지 가능하게 하며 차세대 애플리케이션 개발의 핵심 축으로 떠오르고 있습니다.&lt;br /&gt;하지만 아직 이 시장은 표준화되지 않았습니다. 어떤 프레임워크가 &amp;lsquo;정답&amp;rsquo;이라고 하기 어려운 상황에서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 솔루션의 특징과 한계를 이해하고 적재적소에 활용하는 능력&lt;/b&gt;이 중요합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;451&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 대표적인 5대 프레임워크(Crew AI, Autogen, OpenAI Agents SDK, Google ADK, Langraph)를 심층 분석해,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;누구에게 어떤 프레임워크가 적합한지&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가이드라인을 제시합니다.&lt;/p&gt;
&lt;hr data-end=&quot;456&quot; data-start=&quot;453&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;489&quot; data-start=&quot;458&quot; data-ke-size=&quot;size26&quot;&gt;1. Crew AI: 빠른 프로토타이핑의 최강자&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;518&quot; data-start=&quot;490&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드: 해커톤, 아이디어 검증, 최소 마찰&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;766&quot; data-start=&quot;520&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;570&quot; data-start=&quot;520&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: &amp;ldquo;에이전트 + 도구 + 작업&amp;rdquo;을 블록처럼 조합. 프롬프트 중심 개발.&lt;/li&gt;
&lt;li data-end=&quot;639&quot; data-start=&quot;571&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: 20분 안에 작동하는 에이전트 팀을 만들 수 있을 정도로 간단. POC(개념 증명)과 데모에 최적화.&lt;/li&gt;
&lt;li data-end=&quot;720&quot; data-start=&quot;640&quot;&gt;&lt;b&gt;단점&lt;/b&gt;: 구조적 유연성이 부족해 틀을 벗어난 시도를 하려면 난관 봉착. 내부 동작이 &amp;lsquo;마법&amp;rsquo;처럼 숨겨져 있어 커스터마이징이 어려움.&lt;/li&gt;
&lt;li data-end=&quot;766&quot; data-start=&quot;721&quot;&gt;&lt;b&gt;추천 사용처&lt;/b&gt;: 빠른 시연, 투자자 대상 데모, 내부 아이디어 검증.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;771&quot; data-start=&quot;768&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;824&quot; data-start=&quot;773&quot; data-ke-size=&quot;size26&quot;&gt;2. Autogen (Microsoft): 닷넷 개발자를 위한 사실상 유일한 선택지&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;860&quot; data-start=&quot;825&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드: 그룹 채팅 아키텍처, C# 친화적, 초기 선구자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1144&quot; data-start=&quot;862&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;938&quot; data-start=&quot;862&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 에이전트를 채팅방 참가자처럼 연결. Python뿐만 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;.NET 환경&lt;/b&gt;을 지원하는 거의 유일한 프레임워크.&lt;/li&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;939&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: Microsoft 기술 스택(C#)과의 자연스러운 통합. 2023년 선구자로 자리잡음.&lt;/li&gt;
&lt;li data-end=&quot;1073&quot; data-start=&quot;1000&quot;&gt;&lt;b&gt;단점&lt;/b&gt;: 구식 아키텍처 느낌. Studio는 버그가 많고, Core API는 과도하게 복잡. 그룹 채팅 패턴에 종속됨.&lt;/li&gt;
&lt;li data-end=&quot;1144&quot; data-start=&quot;1074&quot;&gt;&lt;b&gt;추천 사용처&lt;/b&gt;: .NET 생태계 기반 프로젝트. (Python 중심 프로젝트라면 다른 대안을 고려하는 편이 현명)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1149&quot; data-start=&quot;1146&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1194&quot; data-start=&quot;1151&quot; data-ke-size=&quot;size26&quot;&gt;3. OpenAI Agents SDK: 프로덕션 배포에 최적화된 툴킷&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1227&quot; data-start=&quot;1195&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드: 생산 준비, 음성 지원, OpenAI 통합&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1522&quot; data-start=&quot;1229&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1311&quot; data-start=&quot;1229&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 계층적 구조(메인 에이전트 &amp;harr; 서브 에이전트). 가드레일, 메모리, 로깅, 관찰 가능성 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;운영 환경 필수 기능 내장&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;1404&quot; data-start=&quot;1312&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: OpenAI 모델과 완벽히 통합. 웹 검색, 코드 실행 등 호스팅 도구를 단 한 줄 코드로 활성화 가능. Python/TypeScript 지원.&lt;/li&gt;
&lt;li data-end=&quot;1460&quot; data-start=&quot;1405&quot;&gt;&lt;b&gt;단점&lt;/b&gt;: OpenAI 생태계 종속성. 아키텍처 패턴이 고정적(에이전트-서브 에이전트).&lt;/li&gt;
&lt;li data-end=&quot;1522&quot; data-start=&quot;1461&quot;&gt;&lt;b&gt;추천 사용처&lt;/b&gt;: OpenAI 모델 중심의 프로덕션 서비스. 특히 실시간 음성 기반 에이전트 구현.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1527&quot; data-start=&quot;1524&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1566&quot; data-start=&quot;1529&quot; data-ke-size=&quot;size26&quot;&gt;4. Google ADK: &amp;ldquo;배터리 포함&amp;rdquo;형 올인원 솔루션&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1601&quot; data-start=&quot;1567&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드: 엔터프라이즈, UI 내장, 테스트/배포 편의성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;1897&quot; data-start=&quot;1603&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1690&quot; data-start=&quot;1603&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 다양한 프레임워크의 장점을 모아둔 느낌. 내장 웹 UI, 테스트 자동화, REST API 변환, Google Cloud와 원활한 통합.&lt;/li&gt;
&lt;li data-end=&quot;1767&quot; data-start=&quot;1691&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: 엔터프라이즈 수준의 안정성. Vertex AI 기반 완전 관리형 배포 가능. 다양한 모델 및 100+ 커넥터 지원.&lt;/li&gt;
&lt;li data-end=&quot;1831&quot; data-start=&quot;1768&quot;&gt;&lt;b&gt;단점&lt;/b&gt;: 프레임워크 규모가 크고 학습 곡선이 있음. Google 특유의 &amp;ldquo;서비스 중단 리스크&amp;rdquo; 존재.&lt;/li&gt;
&lt;li data-end=&quot;1897&quot; data-start=&quot;1832&quot;&gt;&lt;b&gt;추천 사용처&lt;/b&gt;: Google Cloud 기반 기업 환경. Gemini 모델 및 엔터프라이즈 애플리케이션.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1902&quot; data-start=&quot;1899&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1934&quot; data-start=&quot;1904&quot; data-ke-size=&quot;size26&quot;&gt;5. Langraph: 자유도와 제어의 끝판왕&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;1963&quot; data-start=&quot;1935&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드: 그래프 기반, 유연성, 고급 사용자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;2249&quot; data-start=&quot;1965&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2053&quot; data-start=&quot;1965&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 에이전트 구조를 그래프(노드+엣지)로 표현. 최소한의 런타임만 제공 &amp;rarr; 다른 프레임워크는 레고 블록, Langraph는 &amp;lsquo;점토&amp;rsquo;를 제공.&lt;/li&gt;
&lt;li data-end=&quot;2141&quot; data-start=&quot;2054&quot;&gt;&lt;b&gt;장점&lt;/b&gt;: 사실상&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 아키텍처 구현 가능&lt;/b&gt;. 투명한 동작 관찰 및 상태 관리. 실제 기업(JP Morgan, Uber 등)에서도 활용 중.&lt;/li&gt;
&lt;li data-end=&quot;2197&quot; data-start=&quot;2142&quot;&gt;&lt;b&gt;단점&lt;/b&gt;: 높은 학습 곡선. 초기 개발 속도가 느림. 그래프 사고 방식에 익숙해져야 함.&lt;/li&gt;
&lt;li data-end=&quot;2249&quot; data-start=&quot;2198&quot;&gt;&lt;b&gt;추천 사용처&lt;/b&gt;: 커스텀 아키텍처 구축, 복잡한 대규모 시스템, 독창적 프로젝트.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2254&quot; data-start=&quot;2251&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2283&quot; data-start=&quot;2256&quot; data-ke-size=&quot;size26&quot;&gt;결론: 어떤 프레임워크를 선택해야 할까?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2403&quot; data-start=&quot;2285&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트 프레임워크 선택은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;개발 목적&amp;middot;환경&amp;middot;요구 제어 수준&lt;/b&gt;에 따라 달라집니다.&lt;br /&gt;하나의 프레임워크에 묶이는 것은 현명하지 않으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&amp;ldquo;framework agnostic&amp;rdquo; 전략&lt;/b&gt;이 필요합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-end=&quot;2599&quot; data-start=&quot;2405&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2432&quot; data-start=&quot;2405&quot;&gt;&lt;b&gt;빠른 프로토타이핑&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; Crew AI&lt;/li&gt;
&lt;li data-end=&quot;2464&quot; data-start=&quot;2433&quot;&gt;&lt;b&gt;.NET/C# 기반 개발&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; Autogen&lt;/li&gt;
&lt;li data-end=&quot;2516&quot; data-start=&quot;2465&quot;&gt;&lt;b&gt;OpenAI 모델&amp;middot;음성 기능&amp;middot;프로덕션 배포&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; OpenAI Agents SDK&lt;/li&gt;
&lt;li data-end=&quot;2564&quot; data-start=&quot;2517&quot;&gt;&lt;b&gt;Google Cloud&amp;middot;Gemini&amp;middot;엔터프라이즈&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; Google ADK&lt;/li&gt;
&lt;li data-end=&quot;2599&quot; data-start=&quot;2565&quot;&gt;&lt;b&gt;완전한 제어&amp;middot;커스텀 아키텍처&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; Langraph&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2613&quot; data-start=&quot;2601&quot; data-ke-size=&quot;size23&quot;&gt;권장 학습 경로&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-end=&quot;2733&quot; data-start=&quot;2614&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2641&quot; data-start=&quot;2614&quot;&gt;Crew AI로 시작해 개념을 익힌 후,&lt;/li&gt;
&lt;li data-end=&quot;2691&quot; data-start=&quot;2642&quot;&gt;OpenAI Agents SDK나 Google ADK로 실제 제품을 만들어보고,&lt;/li&gt;
&lt;li data-end=&quot;2733&quot; data-start=&quot;2692&quot;&gt;최종적으로 Langraph로 졸업해 복잡한 아키텍처를 직접 설계.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;2738&quot; data-start=&quot;2735&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2752&quot; data-start=&quot;2740&quot; data-ke-size=&quot;size26&quot;&gt;요약 및 결론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2858&quot; data-start=&quot;2753&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트 프레임워크는 아직&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;승자가 없는 레이스&lt;/b&gt;에 가깝습니다. 각 프레임워크가 저마다 강점과 한계를 갖고 있으며, 개발자는 이를 이해하고 목적에 맞는 도구를 선택해야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2990&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;궁극적으로 중요한 것은 &amp;ldquo;&lt;b&gt;유연하게 배우고 선택할 수 있는 능력&lt;/b&gt;&amp;rdquo;입니다. 다양한 프레임워크 경험은 단일 프레임워크 종속의 위험을 줄이고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로젝트 요구사항에 가장 적합한 해답을 찾아낼 수 있는 역량&lt;/b&gt;을 키워줄 것입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2990&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2990&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2990&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2990&quot; data-start=&quot;2860&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 NotebookLM, chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>agent</category>
      <category>Ai</category>
      <category>ai agent</category>
      <category>AI Agent Framework</category>
      <category>Framework</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/34</guid>
      <comments>https://hs-note.tistory.com/34#entry34comment</comments>
      <pubDate>Mon, 15 Sep 2025 13:32:12 +0900</pubDate>
    </item>
    <item>
      <title>MCP로 보는 AI 생태계의 미래: 표준화, 확장성, 그리고 에이전트</title>
      <link>https://hs-note.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image Aug 23, 2025 at 09_42_07 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vLfu5/btsP27hORTE/F2J1KiGplfttHJXLFNhVLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vLfu5/btsP27hORTE/F2J1KiGplfttHJXLFNhVLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vLfu5/btsP27hORTE/F2J1KiGplfttHJXLFNhVLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvLfu5%2FbtsP27hORTE%2FF2J1KiGplfttHJXLFNhVLk%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image Aug 23, 2025 at 09_42_07 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;MCP(Model Context Protocol): AI와 세상을 연결하는 새로운 표준&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;서론: 왜 MCP가 주목받는가?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI가 점점 더 많은 산업과 일상에 스며들고 있습니다. 그러나 대규모 언어 모델(LLM)은 여전히 몇 가지 한계를 가지고 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;훈련 데이터에 의존 &amp;rarr; 최신 정보 부족&lt;/li&gt;
&lt;li&gt;외부 시스템과의 연동 방식 부재 &amp;rarr; 실질적 활용 제약&lt;/li&gt;
&lt;li&gt;다양한 툴과의 호환성 부족&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이런 상황에서 **MCP(Model Context Protocol)**는 AI와 외부 세계를 표준화된 방식으로 연결해주는 새로운 개방형 프로토콜로 떠오르고 있습니다. USB-C가 기기 연결의 범용 표준이 되었듯, MCP는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;AI 생태계의 범용 연결 포트&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;역할을 지향합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;MCP란 무엇인가?&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;**MCP(Model Context Protocol)**는 AI 모델이 외부 데이터 소스 및 다양한 도구와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;안전하고 표준화된 방식&lt;/b&gt;으로 연결될 수 있도록 하는 개방형 프로토콜입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;USB-C 비유&lt;/b&gt;: 스마트폰, 노트북, 이어폰을 하나의 케이블로 연결하듯, MCP는 AI가 여러 데이터 소스와 도구를 표준적으로 연결할 수 있게 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;양방향 통신 지원&lt;/b&gt;: 기존 REST API처럼 단방향 호출만 하는 것이 아니라, AI와 외부 시스템이 지속적으로 정보를 주고받을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개방형 표준&lt;/b&gt;: 특정 모델에 종속되지 않고, Claude, ChatGPT, Notion, VS Code 등 다양한 환경에서 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;왜 MCP가 필요한가?&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 기존 통합의 비효율성 해결&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;과거에는 M개의 AI 애플리케이션과 N개의 외부 시스템을 연결하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;M&amp;times;N 방식의 맞춤형 통합&lt;/b&gt;이 필요했습니다.&lt;br /&gt;MCP는 이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;M+N 구조&lt;/b&gt;로 단순화하여 통합 복잡성을 크게 줄입니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 개발 효율성 향상&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;커스텀 API 연동 대신 MCP 표준을 사용하면 개발자가 새로운 도구를 빠르고 쉽게 연결할 수 있습니다. 이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;비개발자도 손쉽게 AI 기능을 확장&lt;/b&gt;할 수 있는 환경을 만듭니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. AI 에이전트 시대의 기반&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI가 자율적으로 업무를 수행하려면 외부 데이터 접근과 시스템 연동이 필수입니다. MCP는 이를 위한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;표준 솔루션&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;MCP의 아키텍처&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MCP는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;클라이언트-서버 구조&lt;/b&gt;를 기반으로 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MCP 호스트(Host)&lt;/b&gt;: 사용자가 직접 접하는 인터페이스 (예: Claude Desktop, VS Code, Notion)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MCP 클라이언트(Client)&lt;/b&gt;: 호스트 내부에서 MCP 서버와 연결되는 중개자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MCP 서버(Server)&lt;/b&gt;: 실제 외부 도구&amp;middot;데이터를 노출하는 독립 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버는 세 가지 요소를 제공합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Tools&lt;/b&gt;: 실행 가능한 기능(API 호출, 파일 작업, DB 쿼리 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Resources&lt;/b&gt;: 읽기 전용 데이터(문서, DB 레코드 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Prompts&lt;/b&gt;: 모델 동작을 안내하는 템플릿&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;MCP의 작동 방식&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MCP는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;JSON-RPC 2.0 기반 프로토콜&lt;/b&gt;을 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;초기화(Initialize)&lt;/b&gt;: 클라이언트-서버 간 버전 및 기능 협상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구 탐색(List)&lt;/b&gt;: 사용 가능한 도구 목록 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구 실행(Call)&lt;/b&gt;: LLM이 필요할 때 도구 호출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실시간 알림(Notification)&lt;/b&gt;: 서버 측 변경 사항을 클라이언트에 푸시&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;기술적 구현&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SDK 지원&lt;/b&gt;: Python, TypeScript, Java, Kotlin 등 주요 언어용 SDK 제공&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;Stdio Transport&lt;/b&gt;: 로컬 환경에서 고성능 통신&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HTTP Transport&lt;/b&gt;: 원격 서버 연결, SSE 기반 실시간 스트리밍, OAuth 인증 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;활용 사례&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;개발 환경&lt;/b&gt;: Zed, Replit, Sourcegraph &amp;rarr; 코드 어시스턴트가 실시간 코드 컨텍스트에 접근&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기업 시스템&lt;/b&gt;: Block, Apollo &amp;rarr; 사내 문서&amp;middot;CRM&amp;middot;지식 베이스 연동&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데스크톱 어시스턴트&lt;/b&gt;: Claude Desktop &amp;rarr; 로컬 파일 요약&amp;middot;검색&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티툴 에이전트&lt;/b&gt;: 다양한 툴을 동시에 활용하는 AI 워크플로우&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주요 기업도 빠르게 MCP를 채택 중입니다. OpenAI, Google DeepMind, Anthropic이 대표적이며, MCP 서버 생태계도 빠르게 성장하고 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;MCP의 장점과 한계&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;표준화된 상호운용성&lt;/b&gt;: 한 번 구현하면 모든 MCP 호환 앱에서 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;확장성&lt;/b&gt;: 새로운 툴을 손쉽게 추가 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안 강화&lt;/b&gt;: OAuth 지원, 사용자 승인 기반 접근 제어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발 효율성&lt;/b&gt;: 툴 로직과 AI 앱 로직의 분리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;한계&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;: 기존 REST API 대비 복잡한 개념&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능&amp;middot;비용 부담&lt;/b&gt;: 다수의 상호작용으로 인한 지연&amp;middot;비용 증가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구 활용 한계&lt;/b&gt;: 연결은 가능하지만 AI가 올바르게 활용하지 못하는 경우 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;향후 전망&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;AI 연결 표준으로 성장&lt;/b&gt;: USB-C처럼 AI 생태계의 기본 규격이 될 가능성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티 에이전트 협업&lt;/b&gt;: 여러 AI가 역할을 분담해 복잡한 업무를 처리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 비즈니스 기회&lt;/b&gt;: MCP 기반 플랫폼, 마켓플레이스, SaaS 등장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티모달 확장&lt;/b&gt;: 텍스트뿐 아니라 음성&amp;middot;영상&amp;middot;이미지를 연결하는 허브로 진화&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MCP(Model Context Protocol)는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;AI가 실시간 데이터와 실제 업무 환경에 연결될 수 있도록 설계된 차세대 개방형 표준&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AI 에이전트 시대를 위한 필수 인프라&lt;/li&gt;
&lt;li&gt;개발 효율성과 확장성의 획기적 개선&lt;/li&gt;
&lt;li&gt;보안, 생태계 성장, 표준화의 잠재력&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MCP는 아직 초기 단계의 도전과제를 안고 있지만, AI와 외부 세계를 연결하는 주요한 방법으로 자리 잡을 가능성이 높습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;핵심 키워드&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;MCP, Model Context Protocol, AI 연결 표준, AI 에이전트, AI 툴 통합, AI 생태계, 표준화 프로토콜&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 NotebookLM, chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Ai</category>
      <category>MCP</category>
      <category>model context protocol</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/33</guid>
      <comments>https://hs-note.tistory.com/33#entry33comment</comments>
      <pubDate>Sat, 23 Aug 2025 21:44:53 +0900</pubDate>
    </item>
    <item>
      <title>AI 에이전트란 무엇인가: 자율적 인공지능의 현재와 미래</title>
      <link>https://hs-note.tistory.com/32</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image Aug 23, 2025 at 08_25_33 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9J4f4/btsP36ppUIc/VmT9dNoOd92ZOmgJqbkFj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9J4f4/btsP36ppUIc/VmT9dNoOd92ZOmgJqbkFj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9J4f4/btsP36ppUIc/VmT9dNoOd92ZOmgJqbkFj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9J4f4%2FbtsP36ppUIc%2FVmT9dNoOd92ZOmgJqbkFj0%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image Aug 23, 2025 at 08_25_33 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;AI 에이전트: 자율적 인공지능 시스템의 현재와 미래&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;서론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI 기술의 발전은 단순히 질문에 답변하거나 텍스트를 생성하는 수준을 넘어, **스스로 목표를 설정하고 문제 해결 과정을 설계하는 &amp;lsquo;AI 에이전트&amp;rsquo;**로 진화하고 있습니다. 기존의 LLM(Large Language Model)이 텍스트 입력에 반응하는 수동적 도구였다면, AI 에이전트는 다양한 도구와 메모리, 추론 능력을 결합하여 복잡한 목표를 자율적으로 달성하는 차세대 인공지능 시스템입니다. 본 글에서는 AI 에이전트의 개념, 구조, 구현 방식, 그리고 미래 전망까지 포괄적으로 살펴봅니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;AI 에이전트의 정의와 필요성&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트는 단순 응답을 넘어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;목표 설정 &amp;rarr; 가설 수립 &amp;rarr; 실행&lt;/b&gt;까지 수행하는 자율적 AI입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기존 LLM의 한계 극복&lt;/b&gt;: 초기 LLM은 텍스트 입력에 텍스트를 출력하는 구조에 머물렀습니다. 하지만 다양한 API와 시스템과 연결해 자율적 의사결정을 수행할 수 있는 에이전트 구조가 필요해졌습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡한 목표 달성&lt;/b&gt;: 단순 질의응답을 넘어 외부 DB 조회, 코드 실행, 검색, 분석 등 복잡한 작업을 자동으로 처리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자율성&lt;/b&gt;: 에이전트는 사전에 정해진 경로가 아닌, 스스로 필요한 도구를 선택하고 반복 실행하며 문제 해결 경로를 탐색합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;에이전트와 워크플로우의 차이&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Anthropic 연구팀은 AI 시스템을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;워크플로우&lt;/b&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;에이전트&lt;/b&gt;로 구분합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;: 주어진 목표를 위해 LLM이 스스로 도구 사용 여부와 실행 횟수를 결정합니다. 따라서 더 개방적이고 복잡한 문제 해결에 적합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 워크플로우는 사람이 통제하는 자동화라면, 에이전트는 자율적으로 진화하는 &amp;lsquo;AI 동료&amp;rsquo;에 가깝습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;AI 에이전트의 핵심 구성 요소 (머리&amp;middot;손&amp;middot;기억)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;머리(LLM)&lt;/b&gt;: 문제를 이해하고 추론하며, 어떤 행동을 할지 계획합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;손(툴)&lt;/b&gt;: LLM이 호출하는 외부 도구(API, 계산기, 검색기 등)입니다. 예: Tavily Search, SQL DB 툴, 파일 변환기.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기억(메모리)&lt;/b&gt;: 사용자 대화 기록과 내부 로그를 저장하여 개인화된 경험을 제공합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 세 요소가 유기적으로 작동할 때 에이전트는 단순한 자동화가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;지능적 의사결정&lt;/b&gt;을 수행할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;에이전트의 추론&amp;middot;행동 방식&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;에이전트는 다양한 프레임워크를 활용해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;생각하고(Reasoning), 행동하며(Acting)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;목표를 달성합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ReAct&lt;/b&gt;: 가장 널리 쓰이는 방식으로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Thought &amp;rarr; Action &amp;rarr; Observation &amp;rarr; Final Answer&lt;span&gt;&amp;nbsp;&lt;/span&gt;순환 구조를 따릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Chain of Thought (CoT)&lt;/b&gt;: 복잡한 문제를 단계별 추론 과정을 통해 풀어내는 방식.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tree of Thoughts (ToT)&lt;/b&gt;: 다양한 시나리오를 나무 구조로 탐색하며 복수의 해결책을 제시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 접근은 LLM이 단순히 답변을 생성하는 것이 아니라, 실제로 문제 해결 과정을 시뮬레이션하고 학습할 수 있도록 돕습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;AI 에이전트 구현 시 고려사항&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트 구축은 단순히 모델을 학습시키는 것을 넘어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;비즈니스 로직&amp;middot;데이터&amp;middot;도구&lt;/b&gt;를 통합하는 과정이 필요합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;도메인 지식 주입&lt;/b&gt;: RAG(Retrieval Augmented Generation) 기반으로 기업 데이터를 에이전트에 연결.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프롬프트 엔지니어링&lt;/b&gt;: 현업 전문가와 협업하여 에이전트의 답변 품질을 제어.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;맞춤형 툴 개발&lt;/b&gt;: 기업 내부 API, 분석 기능 등을 도구화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;피드백 루프&lt;/b&gt;: 지속적인 테스트와 UI 개선을 통한 성능 최적화.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;측정 가능한 결과&lt;/b&gt;: 정확도, 시간 절약 효과 등 성과 지표를 정의해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;현재와 미래 전망&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;: 반복 작업 자동화, 검색&amp;middot;코딩 보조 등은 빠르게 확산될 것으로 예상됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2025년 전망&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기업 내 반복 업무 자동화 가속화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티 에이전트 협업 환경&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연구 확산&lt;/li&gt;
&lt;li&gt;모델의 지능 향상과 함께 제품 수준 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;LangChain과 대안적 방법론&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;LangChain&lt;/b&gt;: 툴 통합, 메모리 관리, 프롬프트 체인 등을 구조화하는 대표 프레임워크.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LangGraph&lt;/b&gt;: 더 예측 가능한 워크플로우 기반 접근.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기타 방법론&lt;/b&gt;: ReAct, AutoGen, Multi-Agent, TaskWeaver 등 다양한 시도가 병행되고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AI 에이전트는 단순한 LLM을 넘어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;자율적 판단과 행동을 수행하는 차세대 AI&lt;/b&gt;로 자리매김하고 있습니다. 기업 환경에서는 반복 업무 자동화와 맞춤형 서비스에 큰 가치를 제공하며, LangChain 같은 프레임워크를 통해 빠르게 프로덕션 수준의 구현이 가능해지고 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;성공적인 도입을 위해서는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현업 데이터와 맥락의 이해,&lt;/li&gt;
&lt;li&gt;맞춤형 툴 설계,&lt;/li&gt;
&lt;li&gt;지속적인 피드백과 성능 측정&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 필수적입니다. 앞으로 AI 에이전트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기업 혁신의 핵심 동력&lt;/b&gt;으로 자리 잡을 것이며, 특히 금융&amp;middot;제조&amp;middot;IT 분야에서 더 큰 성과가 기대됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;source:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=j4LgIuY8qTM&quot;&gt;https://www.youtube.com/watch?v=j4LgIuY8qTM&lt;/a&gt;&lt;/h1&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=j4LgIuY8qTM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cmamBJ/hyZDaagJAp/q5CV0eeuwoAP4L2OBZTjm1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/H7mLS/hyZzC0dxQK/mMWdC3ziy2jK01iaJGpLDk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;25년 가장 핫한 AI Agent, 20분만 투자하세요!ㅣ개념, 활용사례, Toolㅣ 6년차 대기업 AI Engineer 현직자&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/j4LgIuY8qTM&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HujQhD8J2LQ&quot;&gt;https://www.youtube.com/watch?v=HujQhD8J2LQ&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=j4LgIuY8qTM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cmamBJ/hyZDaagJAp/q5CV0eeuwoAP4L2OBZTjm1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/H7mLS/hyZzC0dxQK/mMWdC3ziy2jK01iaJGpLDk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;25년 가장 핫한 AI Agent, 20분만 투자하세요!ㅣ개념, 활용사례, Toolㅣ 6년차 대기업 AI Engineer 현직자&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/j4LgIuY8qTM&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EDb37y_MhRw&quot;&gt;https://www.youtube.com/watch?v=EDb37y_MhRw&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=EDb37y_MhRw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/KDQ16/hyZCYAWKWE/kuCcUw3BvaG8k2c3eugIKK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=878_150_1116_410,https://scrap.kakaocdn.net/dn/hOHd7/hyZC3PL0nx/tFHhVO9iQKDmfEcIWI2xz0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=878_150_1116_410&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Generative vs Agentic AI: Shaping the Future of AI Collaboration&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/EDb37y_MhRw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CUB1JuH1UX8&quot;&gt;https://www.youtube.com/watch?v=CUB1JuH1UX8&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=CUB1JuH1UX8&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/qufHF/hyZCXotjnf/h5kHZkhRncbu3xkgQR5YCk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=330_288_556_534,https://scrap.kakaocdn.net/dn/XNFK9/hyZC7dxEwY/6HXuy8QDhpqTtkTJL47330/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=330_288_556_534&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;LLM부터 AI Agent 개념 한 방에 정리해 드립니다.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/CUB1JuH1UX8&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LP5OCa20Zpg&quot;&gt;https://www.youtube.com/watch?v=LP5OCa20Zpg&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=LP5OCa20Zpg&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bQpTNS/hyZC1EoL87/3wRxSLdEObsqTxRieXffmK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=520_260_588_336,https://scrap.kakaocdn.net/dn/d1L81C/hyZDUkA06A/k2R3Q8oy3rmKnlL9dOKlC1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=520_260_588_336&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Tips for building AI agents&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/LP5OCa20Zpg&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=F8NKVhkZZWI&quot;&gt;https://www.youtube.com/watch?v=F8NKVhkZZWI&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=F8NKVhkZZWI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bleOjI/hyZC4A7OtN/aI0U2d8oBJU0pDrcu3c52K/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=752_130_912_304,https://scrap.kakaocdn.net/dn/cpx9DL/hyZC4HR19b/xhcMaxRhS8PelhUHYkjltK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=752_130_912_304&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;What are AI Agents?&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/F8NKVhkZZWI&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 NotebookLM과 chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>ai agent</category>
      <category>COT</category>
      <category>react</category>
      <category>TOT</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/32</guid>
      <comments>https://hs-note.tistory.com/32#entry32comment</comments>
      <pubDate>Sat, 23 Aug 2025 20:43:41 +0900</pubDate>
    </item>
    <item>
      <title>LLM 활용의 핵심, 프롬프트 엔지니어링과 컨텍스트 엔지니어링 비교 분석</title>
      <link>https://hs-note.tistory.com/31</link>
      <description>&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;컨텍스트 엔지니어링 vs. 프롬프트 엔지니어링: LLM 활용의 두 축&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;source : &lt;a href=&quot;https://www.youtube.com/watch?v=vD0E3EUb8-8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=vD0E3EUb8-8&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image Aug 21, 2025 at 03_47_50 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lF6au/btsP1UBMga2/KgoiHC4228nYsUJLsFPTRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lF6au/btsP1UBMga2/KgoiHC4228nYsUJLsFPTRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lF6au/btsP1UBMga2/KgoiHC4228nYsUJLsFPTRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlF6au%2FbtsP1UBMga2%2FKgoiHC4228nYsUJLsFPTRK%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image Aug 21, 2025 at 03_47_50 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;서론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT 같은 대규모 언어 모델(LLM)은 다양한 산업 현장에서 빠르게 활용되고 있습니다. 하지만 같은 모델이라도 **&amp;ldquo;어떻게 질문하고, 어떤 환경을 제공하느냐&amp;rdquo;**에 따라 결과의 품질은 크게 달라집니다. 이를 이해하는 핵심 개념이 바로 **프롬프트 엔지니어링(Prompt Engineering)**과 **컨텍스트 엔지니어링(Context Engineering)**입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는 두 개념의 차이와 상호 보완적인 역할을 살펴보고, 실제 활용 사례를 통해 LLM 기반 시스템을 최적화하는 방법을 소개합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;프롬프트 엔지니어링: 더 나은 질문의 기술&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;정의와 목적&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프롬프트 엔지니어링은 LLM에 입력되는 텍스트를 정교하게 설계하는 과정입니다. 지시사항, 예시, 제약 조건 등을 포함해 모델이 원하는 방식으로 응답하도록 유도하는 기술이죠.&lt;br /&gt;즉, **&amp;ldquo;모델에게 어떻게 질문할 것인가?&amp;rdquo;**를 다루는 분야입니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 기법&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;역할 할당(Role Assignment)&lt;/b&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;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ldquo;당신은 보안 취약점을 검토하는 Python 선임 개발자입니다.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;소수 예시(Few-shot Examples)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2~3개의 입력/출력 쌍을 제공해 응답 형식과 스타일을 학습시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사고의 사슬(Chain of Thought, CoT)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;*&amp;ldquo;단계별로 설명하라&amp;rdquo;*와 같은 지시를 통해 모델이 논리 과정을 드러내도록 유도합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제약 조건 설정(Constraint Setting)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;응답 분량, 출처, 형식 등을 제한해 모델이 벗어나지 않도록 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;한계 사례&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, &amp;ldquo;Book me a hotel in Paris for the DevOps conference&amp;rdquo;라는 프롬프트는 불명확해&lt;span&gt;&amp;nbsp;&lt;/span&gt;파리, 프랑스가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;파리, 켄터키에 호텔을 예약하는 오류를 유발할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;컨텍스트 엔지니어링: 더 나은 시스템의 설계&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;정의와 목적&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프롬프트 엔지니어링이 질문을 잘 던지는 기술이라면, 컨텍스트 엔지니어링은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;LLM이 추론하는 전체 환경을 설계하는 시스템적 접근&lt;/b&gt;입니다.&lt;br /&gt;즉, **&amp;ldquo;모델이 작업을 잘 수행하기 위해 어떤 정보와 도구를 제공할 것인가?&amp;rdquo;**에 집중합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 구성 요소&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;메모리 관리 (Memory Management)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단기 메모리: 대화를 요약해 컨텍스트 윈도우에 보존&lt;/li&gt;
&lt;li&gt;장기 메모리: 벡터DB 기반 사용자 선호도, 과거 기록 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상태 관리 (State Management)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다단계 프로세스에서 현재 진행 상황 추적&lt;/li&gt;
&lt;li&gt;예: 항공권 예약 성공 후, 공항 교통편 예약 단계로 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;검색 증강 생성 (RAG, Retrieval Augmented Generation)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구 사용 (Tools Integration)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LLM 자체는 DB 조회, API 호출을 못함 &amp;rarr; 도구를 연결해 외부 작업 수행 가능&lt;/li&gt;
&lt;li&gt;예: 온라인 캘린더, 회사 정책 JSON 파일 참조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;개선 사례&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;앞선 호텔 예약 예시에서 컨텍스트 엔지니어링이 적용되면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;캘린더를 조회해 컨퍼런스 위치를 확인&lt;/li&gt;
&lt;li&gt;회사 여행 정책(JSON)을 불러와 예산 범위 확인&lt;/li&gt;
&lt;li&gt;최종적으로 &amp;ldquo;파리, 프랑스&amp;rdquo;에서 정책에 맞는 호텔 예약 성공&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;프롬프트 vs. 컨텍스트: 상호 보완 관계&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;프롬프트 엔지니어링 = 더 나은 질문&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨텍스트 엔지니어링 = 더 나은 시스템&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;둘은 경쟁 개념이 아니라 상호 보완적입니다. 성공적인 AI 시스템을 위해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정교한 프롬프트&lt;/b&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;체계적인 컨텍스트 설계&lt;/b&gt;가 함께 필요합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프롬프트 엔지니어링은 LLM의 단기적인 성능 향상에 유효하지만, 장기적으로는 컨텍스트 엔지니어링이 필수입니다.&lt;br /&gt;에이전트 기반 AI가 확산되는 지금, 두 접근법의 조합은 단순한 응답 품질 개선을 넘어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;신뢰할 수 있는 AI 시스템 구축&lt;/b&gt;의 핵심 전략이 될 것입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  결국 &amp;ldquo;좋은 질문&amp;rdquo;과 &amp;ldquo;좋은 시스템&amp;rdquo;이 만나야 진정한 AI 혁신이 시작됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Ai</category>
      <category>context engineering</category>
      <category>llm</category>
      <category>Prompt Engineering</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/31</guid>
      <comments>https://hs-note.tistory.com/31#entry31comment</comments>
      <pubDate>Thu, 21 Aug 2025 15:48:28 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 레포지토리 자동 분석 스크립트: 코드 품질&amp;middot;의존성&amp;middot;복잡도를 한 번에</title>
      <link>https://hs-note.tistory.com/30</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;  파이썬 레포지토리 자동 분석 스크립트: 실행 예시 + 상세 해설 + 전체 코드&lt;/h1&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;키워드:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파이썬 코드 분석, 레포지토리 헬스체크, LOC, 의존성 분석, 복잡도, 유지보수성, pytest, AST, 그래프 시각화&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 프로젝트의 상태를 한 번에 파악하고 싶을 때가 많죠. 이 글은 그런 순간을 위해 준비한 **자동 분석 스크립트(analyze_repo.sh)**의 실행 예시, 상세 동작 해설, 그리고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;전체 코드&lt;/b&gt;까지 한 번에 제공합니다. 스크립트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;pygount/radon/pydeps/pipreqs/pytest/ripgrep&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 도구를 조합해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;레포지토리 헬스 리포트&lt;/b&gt;를 생성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ChatGPT Image Aug 21, 2025 at 01_32_55 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDcFe/btsPYM6s849/A7zDtwRtNYkuQPDSPLp4C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDcFe/btsPYM6s849/A7zDtwRtNYkuQPDSPLp4C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDcFe/btsPYM6s849/A7zDtwRtNYkuQPDSPLp4C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDcFe%2FbtsPYM6s849%2FA7zDtwRtNYkuQPDSPLp4C0%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;ChatGPT Image Aug 21, 2025 at 01_32_55 PM.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  한눈에 보는 기능 요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;디렉터리 트리 &amp;amp; 파일 크기&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;tree / find,&lt;span&gt;&amp;nbsp;&lt;/span&gt;du&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LOC(코드 라인) 통계&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;pygount&lt;span&gt;&amp;nbsp;&lt;/span&gt;(언어별/주석/빈 줄)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존성 분석&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;pipreqs(추정),&lt;span&gt;&amp;nbsp;&lt;/span&gt;pipdeptree(실제 설치 트리)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡도/유지보수성&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;radon cc,&lt;span&gt;&amp;nbsp;&lt;/span&gt;radon mi&lt;/li&gt;
&lt;li&gt;&lt;b&gt;임포트 그래프&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;pydeps&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Graphviz&lt;span&gt;&amp;nbsp;&lt;/span&gt;SVG&lt;/li&gt;
&lt;li&gt;&lt;b&gt;테스트 수집&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;pytest --collect-only&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TODO/FIXME 스캔&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;ripgrep(또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;grep)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AST 인덱스&lt;/b&gt;: 함수/클래스를 JSON으로 색인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fallback 의존성 수집기&lt;/b&gt;: 문법 오류 파일도 관대하게 import 추출&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;⚙️ 설치 (1회)&lt;/h2&gt;
&lt;pre class=&quot;vala&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;python -m venv .venv &amp;amp;&amp;amp; source .venv/bin/activate
pip install --upgrade pip
pip install pipreqs pipdeptree radon pydeps pygount pytest

# 의존(권장)
# - graphviz: pydeps가 SVG/DOT 출력에 필요
# - tree: 디렉터리 맵 생성
# - ripgrep: TODO/FIXME 검색 가속(없으면 grep로 대체)
# Fedora/RHEL/CentOS:
#   sudo dnf install graphviz tree ripgrep -y
# Ubuntu/Debian:
#   sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install graphviz tree ripgrep -y
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;▶️ 사용 방법&lt;/h2&gt;
&lt;pre class=&quot;stata&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;chmod +x analyze_repo.sh
./analyze_repo.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;업로드 권장 세트(요약 리포트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;analysis_out/repo_map.txt,&lt;span&gt;&amp;nbsp;&lt;/span&gt;file_sizes.txt,&lt;span&gt;&amp;nbsp;&lt;/span&gt;loc_summary.txt&lt;/li&gt;
&lt;li&gt;pipdeptree.txt,&lt;span&gt;&amp;nbsp;&lt;/span&gt;complexity.json,&lt;span&gt;&amp;nbsp;&lt;/span&gt;maintainability.json&lt;/li&gt;
&lt;li&gt;imports.svg(생성 시),&lt;span&gt;&amp;nbsp;&lt;/span&gt;test_collection.txt,&lt;span&gt;&amp;nbsp;&lt;/span&gt;todos.txt,&lt;span&gt;&amp;nbsp;&lt;/span&gt;ast_index.json&lt;/li&gt;
&lt;li&gt;requirements_inferred.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;requirements_inferred_fallback.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  실행 예시 &amp;amp; 결과 해설 (요점)&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;레포 트리/파일 크기&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 구조 파악 &amp;amp; 용량 상위 파일 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LOC 통계&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 코드/주석/빈 줄 밸런스 진단&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &amp;ldquo;실제 설치 트리&amp;rdquo; vs &amp;ldquo;코드가 요구하는 패키지&amp;rdquo; 비교&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡도/유지보수성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 리팩터링 우선순위 선정 근거&lt;/li&gt;
&lt;li&gt;&lt;b&gt;임포트 그래프&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 결합도 높은 모듈 식별&lt;/li&gt;
&lt;li&gt;&lt;b&gt;테스트 수집&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 테스트 존재/명명 규칙 파악&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TODO/FIXME&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 작업 백로그 추출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AST 인덱스&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 함수/클래스 탐색 및 문서화 자동화 토대&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  실전 팁&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IGNORE_PIPREQS에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문법 오류/실험용 스크립트&lt;/b&gt;를 추가하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;pipreqs&lt;span&gt;&amp;nbsp;&lt;/span&gt;실패를 줄일 수 있습니다.&lt;/li&gt;
&lt;li&gt;--max-bacon=2로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;import 그래프 깊이 제한&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 복잡한 그래프 가독성 개선.&lt;/li&gt;
&lt;li&gt;CI 파이프라인에 이 스크립트를 연결해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정기 리포트&lt;/b&gt;를 만들면 팀 생산성이 올라갑니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  analyze_repo.sh&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드를 레포지토리 루트에&lt;span&gt;&amp;nbsp;&lt;/span&gt;analyze_repo.sh로 저장하세요.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

# === 설정 ===
OUT=&quot;analysis_out&quot;
IGNORE_PIPREQS=&quot;main_bat.py&quot;    # pipreqs가 깨지는 파일/폴더를 ,로 추가(예: &quot;main_bat.py,build,dist&quot;)
SKIP_DIRS=&quot;.git,.venv,__pycache__,.mypy_cache,.pytest_cache,${OUT}&quot;
PY_EXT=&quot;.py&quot;

mkdir -p &quot;$OUT&quot;

# === 유틸 ===
have() { command -v &quot;$1&quot; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; }

note() { echo -e &quot;\n[INFO] $*&quot;; }
warn() { echo -e &quot;\n[WARN] $*&quot; &amp;gt;&amp;amp;2; }
fail() { echo -e &quot;\n[ERROR] $*&quot; &amp;gt;&amp;amp;2; exit 1; }

# === 1) 레포 트리 &amp;amp; 파일 크기 ===
note &quot;레포 맵/파일 크기 수집...&quot;
{
  echo &quot;### REPO TREE&quot;
  if have tree; then
    tree -a -I &quot;$(echo &quot;$SKIP_DIRS&quot; | tr , '|')&quot; || true
  else
    warn &quot;'tree'가 없어 'find'로 대체합니다(간략 출력). 'sudo dnf/apt install tree' 권장.&quot;
    find . -path &quot;./.git&quot; -prune -o -path &quot;./${OUT}&quot; -prune -o -print
  fi
} &amp;gt; &quot;$OUT/repo_map.txt&quot;

du -ah --max-depth=2 2&amp;gt;/dev/null | sort -h &amp;gt; &quot;$OUT/file_sizes.txt&quot; || {
  warn &quot;du 옵션 미지원 환경. 대체 모드로 파일 크기 집계.&quot;
  find . -type f -not -path &quot;./${OUT}/*&quot; -not -path &quot;./.git/*&quot; -exec du -ah {} + | sort -h &amp;gt; &quot;$OUT/file_sizes.txt&quot; || true
}

# === 2) LOC/언어 통계 (pygount) ===
note &quot;LOC/언어 통계(pygount)...&quot;
pygount . \
  --format=summary \
  --folders-to-skip &quot;$SKIP_DIRS&quot; \
  &amp;gt; &quot;$OUT/loc_summary.txt&quot;

# (선택) 파일별 상세 필요 시 주석 해제
# pygount . \
#   --format=cloc-xml \
#   --folders-to-skip &quot;$SKIP_DIRS&quot; \
#   &amp;gt; &quot;$OUT/loc_by_file.cloc.xml&quot;

# === 3) 의존성(추정 + 실제 트리) ===
note &quot;의존성 추정(pipreqs) 및 설치 트리(pipdeptree)...&quot;
# pipreqs는 문법 에러 파일에서 중단될 수 있어 --ignore 사용, 실패해도 계속
pipreqs . \
  --force \
  --encoding=utf-8 \
  --ignore &quot;$IGNORE_PIPREQS&quot; \
  --savepath &quot;$OUT/requirements_inferred.txt&quot; || warn &quot;pipreqs 실패(무시하고 계속). --ignore 목록을 늘리거나 fallback 사용 권장.&quot;

# requirements.txt가 있다면 설치 후 의존 트리 출력(실패 허용)
if [[ -f requirements.txt ]]; then
  pip install -r requirements.txt || warn &quot;requirements 설치 중 경고 발생(계속 진행).&quot;
fi
pipdeptree &amp;gt; &quot;$OUT/pipdeptree.txt&quot; || warn &quot;pipdeptree 실패(계속).&quot;

# === 4) 복잡도/유지보수성 (radon) ===
note &quot;복잡도/유지보수성(radon)...&quot;
radon cc -s -a -j . &amp;gt; &quot;$OUT/complexity.json&quot;    || warn &quot;radon cc 실패(계속).&quot;
radon mi -s -j . &amp;gt; &quot;$OUT/maintainability.json&quot;  || warn &quot;radon mi 실패(계속).&quot;

# === 5) import 그래프 (pydeps) ===
note &quot;import 그래프(pydeps &amp;rarr; SVG)...&quot;
if have dot; then
  :
else
  warn &quot;graphviz(dot) 미설치. 'sudo dnf/apt install graphviz' 권장. 시도는 해봅니다.&quot;
fi
# 최신 pydeps: -T svg -o 파일
if have pydeps; then
  pydeps . --noshow --max-bacon=2 -T svg -o &quot;$OUT/imports.svg&quot; || warn &quot;pydeps 그래프 생성 실패(계속).&quot;
else
  warn &quot;pydeps 미설치. 'pip install pydeps' 후 재시도 가능.&quot;
fi

# === 6) 테스트 수집 (pytest) ===
note &quot;pytest 테스트 수집...&quot;
pytest --collect-only -q &amp;gt; &quot;$OUT/test_collection.txt&quot; || warn &quot;pytest 수집 실패(계속).&quot;

# === 7) TODO/FIXME/HACK/XXX 검색 ===
note &quot;TODO/FIXME/HACK/XXX 키워드 검색...&quot;
if have rg; then
  rg -n &quot;TODO|FIXME|HACK|XXX&quot; --glob &quot;!${OUT}/**&quot; --glob &quot;!.git/**&quot; &amp;gt; &quot;$OUT/todos.txt&quot; || true
else
  grep -RInE &quot;TODO|FIXME|HACK|XXX&quot; . \
    --exclude-dir=&quot;$OUT&quot; --exclude-dir=&quot;.git&quot; --exclude-dir=&quot;.venv&quot; \
    &amp;gt; &quot;$OUT/todos.txt&quot; || true
fi

# === 8) AST 인덱스(함수/클래스) ===
note &quot;AST 인덱스 생성(함수/클래스)...&quot;
python - &amp;lt;&amp;lt; 'PY' || warn &quot;AST 인덱스 생성 중 문제(계속).&quot;
import os, ast, json
skip = set(s.strip() for s in &quot;.git,.venv,__pycache__,.mypy_cache,.pytest_cache,analysis_out&quot;.split(&quot;,&quot;))
index=[]
for root,_,files in os.walk(&quot;.&quot;):
    if any(k in root for k in skip): 
        continue
    for f in files:
        if f.endswith(&quot;.py&quot;):
            p=os.path.join(root,f)
            try:
                with open(p,&quot;r&quot;,encoding=&quot;utf-8&quot;,errors=&quot;ignore&quot;) as fh:
                    src = fh.read()
                try:
                    m=ast.parse(src, filename=p)
                except SyntaxError as e:
                    # 문법 에러는 기록만 남기고 건너뜀
                    index.append({&quot;path&quot;:p,&quot;error&quot;:f&quot;SyntaxError: {e}&quot;})
                    continue
                funcs=[n.name for n in ast.walk(m) if isinstance(n,ast.FunctionDef)]
                clss=[n.name for n in ast.walk(m) if isinstance(n,ast.ClassDef)]
                index.append({&quot;path&quot;:p,&quot;functions&quot;:funcs,&quot;classes&quot;:clss})
            except Exception as e:
                index.append({&quot;path&quot;:p,&quot;error&quot;:str(e)})
open(&quot;analysis_out/ast_index.json&quot;,&quot;w&quot;,encoding=&quot;utf-8&quot;).write(json.dumps(index,ensure_ascii=False,indent=2))
PY

# === 9) (옵션) pipreqs Fallback: 관대한 import 수집기 ===
note &quot;pipreqs Fallback(관대한 import 수집기) 실행...&quot;
python - &amp;lt;&amp;lt; 'PY' || warn &quot;Fallback import 수집 실패(계속).&quot;
import os, ast, tokenize, io
root=&quot;.&quot;
skip=set(s.strip() for s in &quot;.git,.venv,__pycache__,.mypy_cache,.pytest_cache,analysis_out&quot;.split(&quot;,&quot;))
imports=set()
stdlib={&quot;os&quot;,&quot;sys&quot;,&quot;json&quot;,&quot;re&quot;,&quot;subprocess&quot;,&quot;pathlib&quot;,&quot;typing&quot;,&quot;logging&quot;,&quot;datetime&quot;,&quot;time&quot;,&quot;math&quot;,&quot;itertools&quot;,&quot;functools&quot;,&quot;collections&quot;,&quot;dataclasses&quot;,&quot;ast&quot;,&quot;tokenize&quot;,&quot;io&quot;,&quot;enum&quot;,&quot;statistics&quot;,&quot;decimal&quot;,&quot;random&quot;,&quot;uuid&quot;}

def tolerant_parse(text):
    try:
        return ast.parse(text)
    except SyntaxError:
        return None

for r,_,fs in os.walk(root):
    if any(k in r for k in skip): 
        continue
    for f in fs:
        if f.endswith(&quot;.py&quot;):
            p=os.path.join(r,f)
            try:
                txt=open(p,&quot;r&quot;,encoding=&quot;utf-8&quot;,errors=&quot;ignore&quot;).read()
            except Exception:
                continue
            m=tolerant_parse(txt)
            if m:
                for n in ast.walk(m):
                    if isinstance(n, ast.Import):
                        for a in n.names:
                            imports.add(a.name.split(&quot;.&quot;)[0])
                    elif isinstance(n, ast.ImportFrom) and n.module:
                        imports.add(n.module.split(&quot;.&quot;)[0])
            else:
                # 간단 라인 스캔(문법 에러 파일용)
                for line in txt.splitlines():
                    line=line.strip()
                    if line.startswith(&quot;import &quot;):
                        for part in line[len(&quot;import &quot;):].split(&quot;,&quot;):
                            imports.add(part.strip().split(&quot;.&quot;)[0])
                    elif line.startswith(&quot;from &quot;) and &quot; import &quot; in line:
                        mod=line.split()[1]
                        imports.add(mod.split(&quot;.&quot;)[0])

third=sorted(m for m in imports if m and m not in stdlib)
open(&quot;analysis_out/requirements_inferred_fallback.txt&quot;,&quot;w&quot;,encoding=&quot;utf-8&quot;).write(&quot;\n&quot;.join(third))
print(f&quot;[fallback] third-party candidates: {len(third)} &amp;rarr; analysis_out/requirements_inferred_fallback.txt&quot;)
PY

# === 완료 요약 ===
note &quot;완료! 산출물 목록:&quot;
ls -lh &quot;$OUT&quot; || true
echo
echo &quot;업로드 권장 파일:&quot;
echo &quot;- $OUT/repo_map.txt&quot;
echo &quot;- $OUT/file_sizes.txt&quot;
echo &quot;- $OUT/loc_summary.txt&quot;
echo &quot;- $OUT/pipdeptree.txt&quot;
echo &quot;- $OUT/complexity.json&quot;
echo &quot;- $OUT/maintainability.json&quot;
echo &quot;- $OUT/imports.svg (있으면)&quot;
echo &quot;- $OUT/test_collection.txt&quot;
echo &quot;- $OUT/todos.txt&quot;
echo &quot;- $OUT/ast_index.json&quot;
echo &quot;- $OUT/requirements_inferred.txt (있으면)&quot;
echo &quot;- $OUT/requirements_inferred_fallback.txt (보조)&quot;
&lt;/code&gt;&lt;/pre&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✅ 요약 &amp;amp; 결론&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 스크립트 하나로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로젝트 상태 진단&lt;/b&gt;을 자동화할 수 있습니다.&lt;/li&gt;
&lt;li&gt;CI에 붙이면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정기 건강 리포트&lt;/b&gt;를 자동 생성할 수 있고, 신규 인수/레거시 관리/리팩터링 기획에 탁월합니다.&lt;/li&gt;
&lt;li&gt;필요시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;파일별 LOC CSV&lt;/b&gt;나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;호출 그래프 생성기&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 확장도 손쉽게 추가 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>etc</category>
      <category>Python</category>
      <category>python 자동 분석</category>
      <category>repository 분석</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/30</guid>
      <comments>https://hs-note.tistory.com/30#entry30comment</comments>
      <pubDate>Thu, 21 Aug 2025 13:23:10 +0900</pubDate>
    </item>
    <item>
      <title>AI에게 원하는 답을 얻는 기술: 프롬프트 엔지니어링 실전 가이드북</title>
      <link>https://hs-note.tistory.com/29</link>
      <description>&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;프롬프트 엔지니어링: AI와 효과적으로 대화하는 기술&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;서론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;생성형 AI(ChatGPT, Claude, Gemini 등)의 등장은 우리의 일상과 업무 방식을 크게 바꾸고 있습니다. 하지만 AI가 언제나 정확하고 원하는 답을 주는 것은 아닙니다. 같은 질문을 해도 모호하거나 엉뚱한 답변이 나오곤 하죠. 그 차이를 만드는 핵심 요인이 바로 **프롬프트 엔지니어링(Prompt Engineering)**입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;ldquo;이 문장을 요약해줘&amp;rdquo; &amp;rarr; AI는 길고 애매한 요약을 할 수 있음&lt;/li&gt;
&lt;li&gt;&amp;ldquo;이 문장을 3줄로 요약하고, 핵심 키워드를 5개 뽑아줘&amp;rdquo; &amp;rarr; AI가 명확하고 구조적인 결과를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;프롬프트 엔지니어링이란?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정의&lt;/b&gt;: AI 모델에 최적의 입력을 제공해 원하는 결과를 이끌어내는 기술&lt;/li&gt;
&lt;li&gt;&lt;b&gt;목적&lt;/b&gt;: AI의 잠재력을 극대화하고, 오류(예: 환각 현상)를 줄이며, 사용자 의도에 맞는 답변을 얻는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순 질문: &amp;ldquo;신제품 홍보 아이디어를 알려줘&amp;rdquo;&lt;/li&gt;
&lt;li&gt;프롬프트 엔지니어링 적용:&lt;/li&gt;
&lt;li&gt;당신은 10년 경력의 디지털 마케팅 전문가입니다. 타겟은 20~30대 직장인이고, 플랫폼은 인스타그램입니다. &amp;lsquo;친환경 스마트 텀블러&amp;rsquo; 출시를 위한 홍보 아이디어 5가지를 제시해주세요. 각 아이디어는 50단어 이내로 설명해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;효과적인 프롬프트의 구성 요소&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;지시사항 (Instruction)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; AI가 해야 할 작업을 명확하게 전달&lt;/li&gt;
&lt;li&gt;&lt;b&gt;맥락 (Context)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 배경 정보 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;입력 데이터 (Input Data)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; AI가 처리할 구체적인 질문/텍스트&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출력 형식 (Output Format)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; JSON, 표, 글머리 기호 등 원하는 결과 형식&lt;/li&gt;
&lt;li&gt;&lt;b&gt;역할 지정 (Role Assignment)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 전문가, 교사, 마케터 등 특정 관점 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경계 조건 (Constraints)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;ndash; 하지 말아야 할 것 지정&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;awk&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;지시사항: 다음 문서를 요약해 주세요.  
맥락: 당신은 경영 컨설턴트입니다.  
입력 데이터: &quot;&quot;&quot;2024년 글로벌 AI 산업 동향 보고서 내용...&quot;&quot;&quot;  
출력 형식: 불릿 포인트 5개로 요약  
역할: 전략 기획 전문가  
경계 조건: 과장된 표현은 피하고, 숫자는 원문 그대로 유지
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;기본 프롬프트 기법&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Zero-shot&lt;/b&gt;: 예시 없이 바로 지시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Few-shot&lt;/b&gt;: 몇 가지 예시 제시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Step-by-step&lt;/b&gt;: 복잡한 문제를 단계별로 지시&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Zero-shot&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이 문장이 긍정, 부정, 중립 중 어디에 속하는지 분류해주세요: &quot;오늘 점심이 맛있었다.&quot;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Few-shot&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;입력: &quot;오늘 날씨가 좋아요.&quot; &amp;rarr; 긍정 입력: &quot;이 영화는 너무 지루했어.&quot; &amp;rarr; 부정 입력: &quot;버스가 10분 뒤에 도착한다.&quot; &amp;rarr; 중립 입력: &quot;이 제품은 기대 이상이었어.&quot; &amp;rarr; ?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Step-by-step&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;한 사과는 1,500원이고, 배 한 개는 사과 두 개 가격입니다. 사과 2개와 배 3개의 총 가격을 단계별로 계산해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;고급 프롬프트 기법 (상세 설명 포함)&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 기법들은 단순 요청 수준을 넘어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;더 정교하고 안정적인 결과&lt;/b&gt;를 이끌어내는 고급 전략입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1) Chain-of-Thought (CoT)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;모델이 답만 내놓지 않고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사고 과정을 단계별&lt;/b&gt;로 전개하도록 유도하는 기법. 복잡한 계산&amp;middot;추론&amp;middot;절차 문제에서 정답률을 높입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁 (체크리스트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;ldquo;단계별로&amp;rdquo;, &amp;ldquo;근거를 제시&amp;rdquo;, &amp;ldquo;중간 계산을 명시&amp;rdquo; 같은 표현 추가&lt;/li&gt;
&lt;li&gt;입력 데이터는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정리된 표/리스트&lt;/b&gt;로 제공&lt;/li&gt;
&lt;li&gt;마지막 줄에 &amp;ldquo;최종 답만 한 줄로 요약&amp;rdquo; 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흔한 함정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;너무 포괄적인 질문 &amp;rarr; 군더더기 많은 추론&lt;/li&gt;
&lt;li&gt;길이 제한 미설정 &amp;rarr; 장황한 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;템플릿&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;[역할/맥락]. 아래 문제를 단계별로 해결하세요.
1) 필요한 가정 명시  
2) 단계별 계산/추론  
3) 근거 요약  
4) 최종 답 한 줄
입력: &quot;&quot;&quot;[데이터/문제]&quot;&quot;&quot;
출력 형식: 
- reasoning: 단계별 사고
- answer: 최종 답
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실전 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;당신은 리테일 가격전략 분석가입니다.  
입력: 원가 35,000원, 유통수수료 8%, 광고비 2,000원/개, 목표 마진율 25%  
요구: 1) 판매가 2) 순이익 3) 수수료 &amp;plusmn;2% 민감도 분석  
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2) Tree-of-Thoughts (ToT)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;CoT를 확장해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 사고 경로&lt;/b&gt;를 가지치기처럼 생성&amp;middot;평가&amp;middot;선택하는 방식. 탐색적 기획&amp;middot;전략 선택에 적합.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대안이 여러 개이고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;트레이드오프&lt;/b&gt;가 명확한 문제&lt;/li&gt;
&lt;li&gt;전략/정책 선택, 기획안 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁 (체크리스트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대안 3~5개 생성&lt;/li&gt;
&lt;li&gt;평가기준 수치화(가중치 합계, 리스크 점수 등)&lt;/li&gt;
&lt;li&gt;지나친 브랜치 생성은 피함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흔한 함정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평가기준 불명확 &amp;rarr; 임의적 선택&lt;/li&gt;
&lt;li&gt;브랜치 과다 &amp;rarr; 산만함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;템플릿&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;[역할/맥락]. 아래 목표를 위해 3~4개 대안을 제시하세요.
평가기준: 비용(0.3), 시장임팩트(0.4), 리스크(0.3)
출력:
- options: 각 대안 요약
- scoring: 기준별 점수표
- tradeoffs: 장단점
- recommendation: 최적안 + 실행 첫 단계
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실전 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;목표: 분기 내 리드 30% 증가(예산 5천만 원)
대안: 검색광고 / 리타겟팅 / 웨비나 / 파트너십
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3) RAG (Retrieval-Augmented Generation)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;모델의 답변을 **외부 지식(문서&amp;middot;데이터)**로 보강해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;사실성&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;신뢰성&lt;/b&gt;을 높이는 방식.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 정보/사실 검증이 필요한 리서치&lt;/li&gt;
&lt;li&gt;사내 문서 기반 Q&amp;amp;A&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁 (체크리스트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출처 필드 분리&lt;/li&gt;
&lt;li&gt;답변 범위 제한(&amp;ldquo;문서 범위 밖=모름&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;요약 규칙 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흔한 함정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출처 미표기 &amp;rarr; 신뢰도 저하&lt;/li&gt;
&lt;li&gt;무관한 추론 &amp;rarr; 환각&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;템플릿&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;[역할/맥락]. 제공 문서 내 근거로만 답하세요.  
문서: &quot;&quot;&quot;[...]&quot;&quot;&quot;  
질문: [질문]  
출력: answer, evidence, sources
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실전 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;awk&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;당신은 보안 담당자입니다.  
질문: SaaS 도입 시 데이터 암호화 요건은?  
문서: &quot;&quot;&quot;회사 보안정책 v3.2&quot;&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4) Self-Consistency (자기 일관성)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;&lt;b&gt;여러 사고 경로/샘플&lt;/b&gt;을 생성한 뒤,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;가장 일관된 답&lt;/b&gt;을 선택.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁 (체크리스트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최소 3~5회 시도&lt;/li&gt;
&lt;li&gt;선정 기준 명시(다수결, 근거 충실성)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흔한 함정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 접근만 생성 &amp;rarr; 다양성 부족&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;템플릿&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;oxygene&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;문제를 5가지 방식으로 풀어주세요.  
각 시도: method, steps, result  
최종: best_result, 선정 근거
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실전 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;배송 경로 최적화: 도시 7곳, 차량 2대, 시간창 제약  
서로 다른 알고리즘으로 5회 시도 후 최적안 제시
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5) 프롬프트 체이닝 (Prompt Chaining)&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;복잡한 작업을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 단계 프롬프트&lt;/b&gt;로 나누어 순차 실행.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&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;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁 (체크리스트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 단계 입력&amp;middot;출력 포맷 고정&lt;/li&gt;
&lt;li&gt;중간 산출물 검증 규칙 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;흔한 함정&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단계 간 포맷 불일치 &amp;rarr; 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 (제품 백서 작성)&lt;/b&gt;&lt;br /&gt;1단계: 목차 추출(JSON)&lt;br /&gt;2단계: 본문 초안 작성&lt;br /&gt;3단계: 요약, 표, CTA 추가&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6) XML/태그 기반 지시&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;프롬프트를 태그 구조로 분리 &amp;rarr; 모델이 혼동 없이 처리.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 규칙, 금지어, 예시 포함해야 할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작성 팁&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;lt;instruction&amp;gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;context&amp;gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;input&amp;gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;lt;constraints&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;활용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;&amp;lt;instruction&amp;gt;중견기업 CTO 대상 블로그 작성&amp;lt;/instruction&amp;gt;
&amp;lt;context&amp;gt;톤=전문+친근, 길이=1200단어&amp;lt;/context&amp;gt;
&amp;lt;constraints&amp;gt;과장 금지, 통계 출처 필수&amp;lt;/constraints&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;7) Prefill &amp;amp; Few-Shot 결합&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;모델 답변의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;첫 문장/형식&lt;/b&gt;을 미리 채워 톤&amp;middot;구조를 고정.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;언제 쓰나&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브랜드 톤, 보고서 표준 서식 고정 필요할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;makefile&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;제목: [자동생성]
요약: [2문장]
본문: 1) ... 2) ...
결론: ...
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8) 도메인 특화 템플릿&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;산업&amp;middot;조직에 맞춘 반복 템플릿.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 (채용 공고)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;회사 소개(3문장)
주요 업무(3~5개)
자격 요건(필수&amp;middot;우대)
포용성 문구 포함
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;9) 메타 프롬프팅&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;br /&gt;프롬프트 자체를 평가&amp;middot;개선하거나 A/B 테스트.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시 (FAQ 최적화)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;프롬프트 A와 B를 동일 데이터에 적용해 테스트.  
평가 기준: 사실성, 톤, 구조 준수.  
승자와 개선 포인트 제시.
&lt;/code&gt;&lt;/pre&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;도전 과제와 해결 전략&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;편향(Bias)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 표현 균형 유지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환각(Hallucination)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 출처 요구, &amp;ldquo;모름&amp;rdquo; 허용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모델 한계&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 비판적 검토, 외부 데이터 결합&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;erlang&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;출처 없는 답변은 허용하지 말고, 
근거 없을 경우 &quot;알 수 없음&quot;이라고 답하세요.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프롬프트 엔지니어링은 단순한 기술이 아니라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;AI 활용 역량을 결정짓는 핵심 스킬&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명확하고 구체적인 프롬프트는 결과 품질을 극대화합니다.&lt;/li&gt;
&lt;li&gt;CoT, ToT, RAG 같은 고급 기법은 복잡한 문제 해결에 유용합니다.&lt;/li&gt;
&lt;li&gt;반복적 개선과 비판적 검토가 좋은 프롬프트를 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;최종 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;code&gt;당신은 채용 담당자입니다.  
20대 신입 개발자가 쓸 자기소개서 예시를 작성해주세요.  
항목: ① 성장 과정, ② 지원 동기, ③ 기술 역량, ④ 향후 포부  
각 항목은 300자 내외, 전문적이면서 진솔한 톤으로 작성
&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;본 글은 chatgpt를 활용하여 작성되었습니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>ChatGPT</category>
      <category>llm</category>
      <category>Prompt Engineering</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/29</guid>
      <comments>https://hs-note.tistory.com/29#entry29comment</comments>
      <pubDate>Thu, 21 Aug 2025 13:07:27 +0900</pubDate>
    </item>
    <item>
      <title>Install minikube with Driver none and cri-dockerd on CentOS 9</title>
      <link>https://hs-note.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;minikube start --driver=none 환경으로 실행하기 위한 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;driver=none 방식은 vm 같은곳에 설치하게되면 클러스터 접속을 위한 proxy가 필요없이 host의 IP로 바로 접근가능하여 k8s의 구조를 이해하는데 도움이 된다.&lt;/p&gt;
&lt;h1&gt;install minikube using docker, cri-dockerd on CentOS 9 stream&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2024-06-07 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;runtime을 crio로 설치는 가능하지만 minikube addons enable시 오류 발생함&lt;/li&gt;
&lt;li&gt;podman 설치하면 minikube start --driver=podman --force 실행가능함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어를 minikube kubectl get po 이런식으로 하거나 &lt;code&gt;alias kubectl=&quot;minikube kubectl --&quot;&lt;/code&gt; 를 주면됨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 방식은 클러스터에 접근히기 위해서는 proxy 를 통해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;crio를 설치하면 minikube start --driver=none --container-runtime=cri-o 시작가능함 -&amp;gt;&lt;/li&gt;
&lt;/ul&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;dnf update&lt;/li&gt;
&lt;li&gt;install docker&lt;/li&gt;
&lt;li&gt;install crio&lt;/li&gt;
&lt;li&gt;install conntrack&lt;/li&gt;
&lt;li&gt;install cri-dockerd
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/etc/crictl.yaml 내용 확인
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;container rumtime 위치 확인 -&amp;gt; &quot;runtime-endpoint: unix:///var/run/cri-dockerd.sock&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;copy /etc/crio/crio.conf.d/10-crio.conf --&amp;gt; /etc/crio/crio.conf.d/02-crio.conf&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;install kubectl&lt;/li&gt;
&lt;li&gt;install minikube
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;minikube start --driver=none --container-runtime=cri-o&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;update dnf&lt;/h2&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;dnf update&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;install docker&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo yum install -y yum-utils&lt;br /&gt;sudo yum-config-manager --add-repo &lt;a href=&quot;https://download.docker.com/linux/centos/docker-ce.repo&quot;&gt;https://download.docker.com/linux/centos/docker-ce.repo&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo systemctl start docker&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;install crio&lt;/h2&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;curl https://raw.githubusercontent.com/cri-o/packaging/main/get | bash
systemctl status crio
systemctl start crio
crio status info
crictl info

yum install -y conntrack
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;cri-dockerd 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 2개 모두 download필요함&lt;br /&gt;소스에는 cri-dockerd 파일이 없다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14.amd64.tgz
wget https://github.com/Mirantis/cri-dockerd/archive/refs/tags/v0.3.14.tar.gz


tar -xvf cri-dockerd-0.3.14.amd64.tgz
install -o root -g root -m 0755 ./cri-dockerd/cri-dockerd /usr/local/bin/cri-dockerd
install -o root -g root -m 0755 ./cri-dockerd/cri-dockerd /usr/bin/cri-dockerd

tar -xvf v0.3.14.tar.gz
install ./cri-dockerd-0.3.14/packaging/systemd/* /etc/systemd/system

systemctl daemon-reload
systemctl status cri-docker
systemctl enable cri-docker.service
systemctl start cri-docker.service


# /etc/crio/crio.conf.d/10-crio.conf 파일 복사
cp /etc/crio/crio.conf.d/10-crio.conf /etc/crio/crio.conf.d/02-crio.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Install kubectl&lt;/h2&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;curl -LO &quot;https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl&quot;

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kubectl version&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;install minikube&lt;/h2&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube


minikube start --driver=none 
# minikube start --driver=none  --container-runtime=cri-o --force

&lt;/code&gt;&lt;/pre&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;cri-dockerd 설치
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ minikube profile list
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes | Active Profile | Active Kubecontext |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|
| minikube | none      | docker  | 10.30.147.175 | 8443 | v1.30.0 | Running |     1 | *              | *                  |
|----------|-----------|---------|--------------|------|---------|---------|-------|----------------|--------------------|&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;troubleshooting&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;containerd 로 설정하는 방법 -&amp;gt; minikube에서는 안된다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo containerd config default | sudo tee /etc/containerd/config.toml&lt;br /&gt;sudo systemctl restart containerd&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;runtime을 docker로 사용하는 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cri-dockerd 설치 필수&lt;br /&gt;cni-plugin 필요 없음&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;runtime을 containerd, cri-o로 사용하는 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치는 되지만, minikube addons enable 하면 아래 오류 발생함&lt;br /&gt;Exiting due to MK_ADDON_ENABLE_PAUSED: enabled failed: check paused: list paused:&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;❌  Exiting due to MK_ADDON_ENABLE_PAUSED: enabled failed: check paused: list paused: crictl list: sudo -s eval &quot;crictl ps -a --quiet --label io.kubernetes.pod.namespace=kube-system&quot;: exit status 127
stdout:

stderr:
/bin/bash: line 1: crictl: command not found&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;crictl 설치 오류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;crictl 설치후 /etc/crictl.yaml 파일 생성 내용 추가 필요&lt;br /&gt;cri-dockerd 설치후 cri-dockerd.sock 오류 나면&lt;br /&gt;visudo의 default secure path 에 /usr/local/bin 추가 필요&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치시 오류 발생&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 minikube addons enable dashboard 에서 오류 발생함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;install docker, conntrack, minikube
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;minikube start --driver=none&lt;/li&gt;
&lt;li&gt;crictl 필요하다고 오류남. GUEST_MISSING_CONNTRACK -&amp;gt; conntrack은 설치했지만 오류가 난다?&lt;/li&gt;
&lt;li&gt;cni plugin 설치후 crictl info에서 오류 보임 /etc/cni/net.d/에 파일이 없다고&lt;/li&gt;
&lt;li&gt;minikube start --driver=none 하면 cri-docerd가 필요하다고 실행 실패&lt;/li&gt;
&lt;li&gt;containerd 를 기본으로 설정하고, crictl.yaml에 runtime-endpoint: unix:///var/run/containerd/containerd.sock 설정하고 minikube start --driver=none --container-runtime=containerd 해도 -&amp;gt; crictl 없다고 오류 발생&lt;/li&gt;
&lt;li&gt;install crio -&amp;gt; minikube start 헤도 같은 crictl 오류남&lt;/li&gt;
&lt;li&gt;crictl.yaml 내용을 crio.sock으로 변경&lt;/li&gt;
&lt;li&gt;minikube start --driver=none --container-runtime=cri-o -&amp;gt; 실행됨 addons enable 하면 오류남&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;instll cni-plugin&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;없어도 된다&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;CNI_PLUGIN_VERSION=&quot;&amp;lt;version_here&amp;gt;&quot;
CNI_PLUGIN_VERSION=&quot;v1.5.0&quot;

# change arch if not on amd64
CNI_PLUGIN_TAR=&quot;cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz&quot; 
CNI_PLUGIN_INSTALL_DIR=&quot;/opt/cni/bin&quot;

curl -LO &quot;https://github.com/containernetworking/plugins/releases/download/$CNI_PLUGIN_VERSION/$CNI_PLUGIN_TAR&quot;
sudo mkdir -p &quot;$CNI_PLUGIN_INSTALL_DIR&quot;
sudo tar -xf &quot;$CNI_PLUGIN_TAR&quot; -C &quot;$CNI_PLUGIN_INSTALL_DIR&quot;
rm &quot;$CNI_PLUGIN_TAR&quot;

# 설치후 crictl info 하면 아래 오류 보임
  &quot;lastCNILoadStatus&quot;: &quot;cni config load failed: no network config found in /etc/cni/net.d: cni plugin not initialized: failed to load cni config&quot;,
  &quot;lastCNILoadStatus.default&quot;: &quot;cni config load failed: no network config found in /etc/cni/net.d: cni plugin not initialized: failed to load cni config&quot;

&lt;/code&gt;&lt;/pre&gt;</description>
      <category>kubernetes</category>
      <category>--driver=podman</category>
      <category>cri-dockerd</category>
      <category>minikube</category>
      <category>minikube start --driver=none</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/28</guid>
      <comments>https://hs-note.tistory.com/28#entry28comment</comments>
      <pubDate>Fri, 7 Jun 2024 18:20:42 +0900</pubDate>
    </item>
    <item>
      <title>install containerd-based k8s using Ansible</title>
      <link>https://hs-note.tistory.com/27</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;CentOS 7.9 에 설치 확인(2022-12-09)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;참조 : &lt;a href=&quot;https://www.hostafrica.co.za/blog/kubernetes/kubernetes-ansible-centos-stream-containerd/&quot;&gt;https://www.hostafrica.co.za/blog/kubernetes/kubernetes-ansible-centos-stream-containerd/&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;containerd 기반 k8s 설치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;사전준비: yum update, ssh key생성 , ansible 설치&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;install-kube-v2.yml (설정변경 및 containerd, kubeadm 등 설치)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;master-setup.yml (kubeadm init)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;worker-setup.yml (kubeadm join)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1678409528959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# yum upgrade in all node
yum -y upgrade


# ssh keygen in master
ssh-keygen -b 4096 -f ~/.ssh/mysshkey_rsa


# ssh key copy to worker1,2
ssh-copy-id -i ~/.ssh/mysshkey_rsa.pub root@worker1
ssh-copy-id -i ~/.ssh/mysshkey_rsa.pub root@worker2


# host명, hosts 파일 수정 -&amp;gt; 각 노드에서 수행
hostnamectl set-hostname master
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2


# install ansible in master node
yum -y install epel-release 
yum -y install ansible

ansible --version


# edit ansible-hosts 파일수정 /etc/ansible/hosts
[masters]
control-plane ansible_host={MASTER IP} ansible_user=root

[workers]
worker1 ansible_host={WORDER1 IP} ansible_user=root
worker2 ansible_host={WORKER2 IP} ansible_user=root


# ansible 연결 확인
ansible all -m ping


# install-kube
ansible-playbook install-kube-v2.yml


# master-setup
ansible-playbook master-setup.yml


# worker-setup -&amp;gt; /etc/kube_join_command 파일 확인
ansible-playbook worker-setup.yml&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;install-kube-v2.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1717751189834&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---
- hosts: &quot;masters, workers&quot;
  remote_user: root
  become: yes
  become_method: sudo
  become_user: root
  gather_facts: yes
  connection: ssh

  tasks:
     - name: Stop and disable firewalld.
       service:
         name: firewalld
         state: stopped
         enabled: False       
  
     - name: disable SELinux
       shell: |
                sudo setenforce 0
                sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

     - name: disabling swap as its required for kubelet
       shell: |
               sudo swapoff -a
               sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
               sudo mount -a


     - name: Creating a configuration file for containerd, our container runtime
       shell: |
               cat &amp;lt;&amp;lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
               overlay
               br_netfilter
               EOF

     - name: setting up pre-requisites for containerd
       shell: |
               sudo modprobe overlay
               sudo modprobe br_netfilter
     
     - name: sysctl params required by setup, params persist across reboots
       shell: |
               cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
               net.bridge.bridge-nf-call-iptables  = 1
               net.bridge.bridge-nf-call-ip6tables = 1
               net.ipv4.ip_forward                 = 1
               EOF


     - name: make settings applicable without restart
       command: sudo sysctl --system

# ipv4 강제로 설정
     - name: set proc/sys/net/ipv4/ip_forward
       shell: |
               sudo sysctl -w net.ipv4.ip_forward=1

     - name: installing containerd and settings its config. restart as well.
       shell: |
               sudo yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
               sudo yum install -y containerd.io
               sudo mkdir -p /etc/containerd
               sudo containerd config default | sudo tee /etc/containerd/config.toml
               sudo systemctl restart containerd

     - name: Create a kube repo file
       file:
         path: &quot;/etc/yum.repos.d/kubernetes.repo&quot;
         state: &quot;touch&quot;

     - name: write repo information in kube repo file
       blockinfile:
         path: &quot;/etc/yum.repos.d/kubernetes.repo&quot;
         block: |
                [kubernetes]
                name=Kubernetes
                baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
                enabled=1
                gpgcheck=1
                repo_gpgcheck=1
                gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

     - name: install kubernetes
       shell: |
               sudo yum install -y kubelet kubeadm kubectl
               sudo systemctl enable --now kubelet
               sudo systemctl start kubelet&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;master-setup.yml&lt;/p&gt;
&lt;pre id=&quot;code_1717751271212&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- hosts: masters
  become: yes
  tasks:
    - name: start the cluster
      shell: kubeadm init --pod-network-cidr=192.168.0.0/16
      args:
        chdir: $HOME
      async: 60
      poll: 60

    - name: create a new directory to hold kube conf
      # ansible.builtin.file:
      #   path: /etc/kubernetes
      #   state: directory
      #   mode: '0755'
    
      become: yes
      become_user: root
      file:
        path: $HOME/.kube
        state: directory
        mode: 0755

    - name: copy configuration file to the newly created dir
      # become: true
      # become_user: root
      # ansible.builtin.copy:
      #   src: /etc/kubernetes/admin.conf
      #   dest: $HOME/.kube/config
      #   remote_src: true
    
      copy:
        src: /etc/kubernetes/admin.conf
        dest: $HOME/.kube/config
        remote_src: yes
        owner: root

    - name: set kubeconfig file permissions
      file:
        path: $HOME/.kube/config 
        owner: &quot;{{ ansible_effective_user_id }}&quot;
        group: &quot;{{ ansible_effective_group_id }}&quot;
        
    - name: Apply a calico manifset to init the pod network
      # args:
      #   chdir: $HOME
      # ansible.builtin.command: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
      become: yes
      become_user: root
      shell: |
              curl https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/calico.yaml -O
              kubectl apply -f calico.yaml 
      args:
        chdir: $HOME
        
    - name: Get the join command to be used by the worker
      become: yes
      become_user: root
      shell: kubeadm token create  --print-join-command
      register: kube_join_command

    - name: Save the join command to a local file
      become: yes
      local_action: copy content=&quot;{{ kube_join_command.stdout_lines[0] }}&quot; dest=&quot;/etc/kube_join_command&quot; mode=0777&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;Worker-setup.yaml&lt;/p&gt;
&lt;pre id=&quot;code_1717751288727&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- hosts: workers
  become: yes
  gather_facts: yes

  tasks:
   - name: Fetch the join command we wrote to a file in previous step and move it to the worker node.
     become: yes
     copy:
       src: /etc/kube_join_command
       dest: /etc/kube_join_command
       mode: 0777

   - name: Join the Worker node to the cluster.
     become: yes
     command: sh /etc/kube_join_command&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Trouble shoot&lt;/p&gt;
&lt;pre id=&quot;code_1678409574399&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 오류발생하면 kubeadm reset 하고 playbook 다시 실행.
kubeadm reset


# ipv4 에러 인 경우 master, worker 노드에서 아래 명령어 실행하고 kubelet 재시작하고 playbook 다시 실행하면 됨
modprobe br_netfilter
echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>kubernetes</category>
      <category>ansible</category>
      <category>containerd</category>
      <category>kubernetes</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/27</guid>
      <comments>https://hs-note.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 10 Mar 2023 09:54:00 +0900</pubDate>
    </item>
    <item>
      <title>jenkins pipeline build error</title>
      <link>https://hs-note.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;k8s에&amp;nbsp;jenkins&amp;nbsp;2.319.1&amp;nbsp;설치후&amp;nbsp;pipeline&amp;nbsp;생성해서&amp;nbsp;build&amp;nbsp;할때&lt;br /&gt;jenkins 화면의 build 로그에는 별 다른 에러 내용이 없으나 build 가 제대로 안되는 경우 발생&lt;br /&gt;&lt;br /&gt;jenkins&amp;nbsp;컨테이너&amp;nbsp;&amp;nbsp;로그를&amp;nbsp;확인해&amp;nbsp;보면&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;메세지가&amp;nbsp;보임&lt;/p&gt;
&lt;pre id=&quot;code_1641390792587&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;org.csanchez.jenkins.plugins.kubernetes.KubernetesClientProvider$UpdateConnectionCount@1bbc917c failed&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbeSuk/btrpRWzuALY/k8NhAHCrwAk9qGuMeLFUuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbeSuk/btrpRWzuALY/k8NhAHCrwAk9qGuMeLFUuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbeSuk/btrpRWzuALY/k8NhAHCrwAk9qGuMeLFUuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbeSuk%2FbtrpRWzuALY%2Fk8NhAHCrwAk9qGuMeLFUuK%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;1646&quot; height=&quot;690&quot; data-origin-width=&quot;1646&quot; data-origin-height=&quot;690&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;구글링 해보면 kubernetes-client-api plugin 최근 버전의 문제라고 나옴. 아래 페이지(&lt;a href=&quot;https://issues.jenkins.io/browse/JENKINS-67484&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://issues.jenkins.io/browse/JENKINS-67484&lt;/a&gt;)에 있는 이전 버전을 받아서 설치하면 해결됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3GZ2a/btrpWyRGEBZ/yb5razdNX5BpVAewhWpVjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3GZ2a/btrpWyRGEBZ/yb5razdNX5BpVAewhWpVjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3GZ2a/btrpWyRGEBZ/yb5razdNX5BpVAewhWpVjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3GZ2a%2FbtrpWyRGEBZ%2Fyb5razdNX5BpVAewhWpVjk%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;1118&quot; height=&quot;900&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;jenkins plugin 파일로 설치는 plugin manager 화면의 advanced 탭에서 (확장자가 hpi 인 파일 업로드)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzQtoz/btrpU2yPU7A/6LQanH1LQurEjdwGbINpR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzQtoz/btrpU2yPU7A/6LQanH1LQurEjdwGbINpR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzQtoz/btrpU2yPU7A/6LQanH1LQurEjdwGbINpR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzQtoz%2FbtrpU2yPU7A%2F6LQanH1LQurEjdwGbINpR0%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;1635&quot; height=&quot;830&quot; data-origin-width=&quot;1635&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Open Source</category>
      <category>error</category>
      <category>jenkins</category>
      <category>kubernetes</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/26</guid>
      <comments>https://hs-note.tistory.com/26#entry26comment</comments>
      <pubDate>Wed, 5 Jan 2022 22:57:20 +0900</pubDate>
    </item>
    <item>
      <title>docker install on CentOS 8.x</title>
      <link>https://hs-note.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;# install docker-ce, docker-ce-cli, containerd from &lt;a href=&quot;https://docs.docker.com/engine/install/centos/&quot;&gt;https://docs.docker.com/engine/install/centos/&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1632924080288&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Set up the repository
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo


# Install Docker Engine
- Install the latest version of Docker Engine and containerd, or go to the next step to install a specific version:

# 가이드에는 아래 명령어로 되어있음 -&amp;gt; 실행하면 dependency 오류로 설치 안됨 -&amp;gt; 아래 --allowerasing 옵션 주면 podman 등 package remove 하면서 설치됨.

sudo yum install docker-ce docker-ce-cli containerd.io
sudo yum install docker-ce docker-ce-cli containerd.io --allowerasing


# Start Docker.
sudo systemctl start docker

# Verify that Docker Engine is installed correctly by running the hello-world image.
sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1938&quot; data-origin-height=&quot;1546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpcnSg/btrgnr9Vw9H/m3GhbVXA4s9m6iiAIv8GEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpcnSg/btrgnr9Vw9H/m3GhbVXA4s9m6iiAIv8GEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpcnSg/btrgnr9Vw9H/m3GhbVXA4s9m6iiAIv8GEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpcnSg%2Fbtrgnr9Vw9H%2Fm3GhbVXA4s9m6iiAIv8GEK%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;1938&quot; height=&quot;1546&quot; data-origin-width=&quot;1938&quot; data-origin-height=&quot;1546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Uninstall Docker Engine&lt;/p&gt;
&lt;pre id=&quot;code_1632924109765&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. Uninstall the Docker Engine, CLI, and Containerd packages:

sudo yum remove docker-ce docker-ce-cli containerd.io


2. Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Open Source</category>
      <category>centOS</category>
      <category>docker</category>
      <author>jerymy</author>
      <guid isPermaLink="true">https://hs-note.tistory.com/25</guid>
      <comments>https://hs-note.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 29 Sep 2021 23:04:58 +0900</pubDate>
    </item>
  </channel>
</rss>