<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Agents | The .NET Blog</title><link>https://thedotnetblog.com/ko/tags/ai-agents/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ko</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ko/tags/ai-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Agent Framework 3부: 도구에서 워크플로우까지 — 빌딩 블록이 딱 맞게 자리를 잡다</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</guid><description>.NET AI 빌딩 블록 시리즈 3부에서는 Microsoft Agent Framework를 다룹니다 — 도구가 있는 단일 에이전트부터 메모리를 갖춘 멀티 에이전트 워크플로우까지. 진짜 중요한 것이 무엇인지 살펴봅니다.</description><content:encoded>&lt;p&gt;&lt;em&gt;이 게시물은 자동으로 번역되었습니다. 원본 버전은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/"&gt;여기&lt;/a&gt;를 클릭하세요.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;.NET의 Building Blocks for AI 시리즈를 따라왔다면, 1부에서 &lt;code&gt;IChatClient&lt;/code&gt;(범용 모델 인터페이스)를, 2부에서 &lt;code&gt;Microsoft.Extensions.VectorData&lt;/code&gt;(시맨틱 검색 및 RAG)를 다뤘다는 것을 알 것입니다. 둘 다 기본적이고 각각 유용합니다. 하지만 여기서부터 모든 것이 연결되기 시작합니다.&lt;/p&gt;
&lt;p&gt;3부는 &lt;a href="https://github.com/microsoft/agent-framework"&gt;Microsoft Agent Framework&lt;/a&gt;에 관한 것입니다 — 솔직히 말하면, .NET에서 보고 싶었던 바로 그 피스입니다. 1.0은 4월에 출시되었습니다. API는 안정적입니다. 이제 진짜 에이전트를 만들 때가 됐습니다.&lt;/p&gt;
&lt;h2 id="에이전트란-무엇인가-vs-챗봇"&gt;에이전트란 무엇인가 (vs. 챗봇)&lt;/h2&gt;
&lt;p&gt;코드로 들어가기 전에 이 구분을 명확히 해봅시다. 챗봇은 입력을 받고, 모델을 호출하고, 출력을 반환합니다. 단순한 루프입니다.&lt;/p&gt;
&lt;p&gt;에이전트는 &lt;em&gt;자율성&lt;/em&gt;을 갖습니다. 작업에 대해 추론하고, 어떤 도구를 사용할지 결정하고, 그 도구를 호출하고, 결과를 평가하고, 다음에 무엇을 할지 결정할 수 있습니다 — 모든 시나리오에 대해 단계별 로직을 작성할 필요 없이. 도구와 지침을 주면, 오케스트레이션을 알아서 처리합니다.&lt;/p&gt;
&lt;p&gt;이렇게 생각해보세요: &lt;code&gt;IChatClient&lt;/code&gt;는 대화를 나누는 것과 같습니다. 에이전트는 누군가에게 할 일 목록을 위임하는 것과 같습니다.&lt;/p&gt;
&lt;h2 id="10줄로-첫-번째-에이전트-만들기"&gt;10줄로 첫 번째 에이전트 만들기&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Agents.AI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deploymentName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are good at telling jokes.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Joker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;.AsAIAgent()&lt;/code&gt; 확장 메서드가 다리 역할을 합니다. MEAI의 &lt;code&gt;.AsIChatClient()&lt;/code&gt;와 같은 패턴 — 프로바이더의 SDK를 안정적인 추상화로 래핑합니다. Azure OpenAI, OpenAI, GitHub Models, Microsoft Foundry 또는 로컬 모델과 함께 작동합니다.&lt;/p&gt;
&lt;p&gt;스트리밍도 가능합니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="에이전트에게-도구-제공하기"&gt;에이전트에게 도구 제공하기&lt;/h2&gt;
&lt;p&gt;여기서 에이전트가 정교한 챗봇에서 벗어납니다. 도구는 사용자의 요청에 따라 모델이 호출하기로 결정할 수 있는 함수입니다. 라우팅 로직이 필요 없습니다 — 모델이 스스로 파악합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Description(&amp;#34;Get the weather for a given location.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;GetWeather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;The location to get the weather for.&amp;#34;)]&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;$&amp;#34;The weather in {location} is cloudy with a high of 15°C.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chatClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are a helpful assistant&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AIFunctionFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetWeather&lt;/span&gt;&lt;span class="p"&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;두 가지에 주목하세요. 첫째, &lt;code&gt;AIFunctionFactory&lt;/code&gt;는 MEAI에서 옵니다 — 일반 &lt;code&gt;IChatClient&lt;/code&gt;와 함께 사용하는 것과 같은 도구 팩토리입니다. 채팅 시나리오용으로 이미 도구를 정의했다면 여기서도 작동합니다.&lt;/p&gt;
&lt;p&gt;둘째, &lt;code&gt;Description&lt;/code&gt; 속성이 매우 중요합니다. 이것이 모델이 도구가 무엇을 하는지, 언제 사용해야 하는지 이해하는 방법입니다. 인간이 아닌 AI를 위한 문서로 취급하세요.&lt;/p&gt;
&lt;h2 id="세션-진짜-기억하는-대화"&gt;세션: 진짜 기억하는 대화&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Now add some emojis and tell it in the voice of a pirate&amp;#39;s parrot.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;세션 없이는 각 &lt;code&gt;RunAsync&lt;/code&gt; 호출이 상태 비저장입니다. 세션이 있으면 에이전트는 어떤 농담을 말하는지 알고 있습니다. &lt;code&gt;AgentSession&lt;/code&gt;은 턴 사이에 대화 기록을 보존합니다.&lt;/p&gt;
&lt;p&gt;프로덕션 상태 비저장 서비스의 경우 세션은 깔끔하게 직렬화됩니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;JsonElement&lt;/span&gt; &lt;span class="n"&gt;sessionState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SerializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ... 어딘가에 저장 ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;restoredSession&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DeserializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sessionState&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;What were we just talking about?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;restoredSession&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;에이전트가 서버리스 또는 수평 확장 환경에서 실행되는 경우 매우 중요합니다.&lt;/p&gt;
&lt;h2 id="aicontextprovider-세션을-넘나드는-영구-메모리"&gt;AIContextProvider: 세션을 넘나드는 영구 메모리&lt;/h2&gt;
&lt;p&gt;세션은 세션 &lt;em&gt;내의&lt;/em&gt; 대화 기록을 보존합니다. 그렇다면 세션 간에 사용자에 대한 정보를 알고 있는 것은 어떨까요? &lt;code&gt;AIContextProvider&lt;/code&gt;가 이를 처리합니다.&lt;/p&gt;
&lt;p&gt;두 가지 훅이 있습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ProvideAIContextAsync&lt;/code&gt;&lt;/strong&gt; — 각 인터랙션 &lt;em&gt;이전에&lt;/em&gt; 실행되어 에이전트에 컨텍스트를 주입&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StoreAIContextAsync&lt;/code&gt;&lt;/strong&gt; — 각 인터랙션 &lt;em&gt;이후에&lt;/em&gt; 실행되어 학습하고 지속&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;패턴이 우아합니다: 여러 프로바이더를 쌓을 수 있습니다 — 사용자 선호도용, 최근 인터랙션용, 관련 문서를 위해 VectorData 스토어를 쿼리하는 것 등. 마지막 것이 바로 2부의 RAG 패턴이며, 이제 모든 에이전트 호출의 일부로 자동으로 실행됩니다.&lt;/p&gt;
&lt;h2 id="멀티-에이전트-워크플로우"&gt;멀티 에이전트 워크플로우&lt;/h2&gt;
&lt;p&gt;여기서 프레임워크가 이름값을 합니다. 익스큐터(에이전트, 함수, 무엇이든)가 엣지를 통해 연결되는 그래프 기반 워크플로우 시스템을 포함합니다.&lt;/p&gt;
&lt;p&gt;기본으로 지원되는 패턴:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;순차적&lt;/strong&gt;: 에이전트 A의 출력이 에이전트 B에게 흘러들어감&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동시(팬아웃/팬인)&lt;/strong&gt;: 여러 에이전트에 병렬 디스패치, 결과 수집&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;조건부 라우팅&lt;/strong&gt;: 출력에 따라 다른 에이전트에게 작업 라우팅&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작가-비평가 루프&lt;/strong&gt;: 한 에이전트가 쓰고, 다른 에이전트가 평가하고, 승인될 때까지 루프&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;서브 워크플로우&lt;/strong&gt;: 계층적으로 워크플로우 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;작가-비평가 예시:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;WorkflowBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithOutputFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;깔끔하고 읽기 쉬우며, 조건 기반 라우팅 덕분에 루프 로직을 직접 작성할 필요가 없습니다.&lt;/p&gt;
&lt;h2 id="휴먼-인-더-루프"&gt;휴먼-인-더-루프&lt;/h2&gt;
&lt;p&gt;모든 것이 완전 자율적으로 실행되어서는 안 됩니다. 민감한 작업 — 데이터베이스 쓰기, 금융 거래, 통신 발송 — 에는 에이전트가 실행하기 전에 사람의 승인이 필요합니다.&lt;/p&gt;
&lt;p&gt;프레임워크는 &lt;code&gt;FunctionApprovalRequestContent&lt;/code&gt;와 &lt;code&gt;FunctionApprovalResponseContent&lt;/code&gt;를 통해 이에 대한 내장 지원을 제공합니다. 에이전트가 도구 호출을 제안하면 애플리케이션 코드가 사용자에게 제시하고, 응답이 실행 계속 여부를 결정합니다.&lt;/p&gt;
&lt;p&gt;이것이 엔터프라이즈 환경에서 에이전트를 생각하는 올바른 방식입니다: 완전 자율이 아니라 &lt;em&gt;가드레일이 있는 자율성&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="전체-그림"&gt;전체 그림&lt;/h2&gt;
&lt;p&gt;한 발 물러서면:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MEAI&lt;/strong&gt;는 어떤 모델에도 범용 인터페이스를 제공&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VectorData&lt;/strong&gt;는 시맨틱 검색을 통해 에이전트가 조직의 지식에 접근하도록 지원&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Framework&lt;/strong&gt;는 모든 것을 오케스트레이션 — 내부적으로 &lt;code&gt;IChatClient&lt;/code&gt; 사용, 컨텍스트 프로바이더와 결합, 워크플로우를 통해 조율&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 부분은 다른 부분과 구성되도록 설계되었습니다. &lt;a href="https://devblogs.microsoft.com/dotnet/microsoft-agent-framework-building-blocks-for-ai-part-3/"&gt;Jeremy Likness의 원본 포스트&lt;/a&gt;와 &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet"&gt;Agent Framework GitHub 레포지토리&lt;/a&gt;에서 전체 샘플을 확인하세요.&lt;/p&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;Microsoft Agent Framework 3부 포스트는 빌딩 블록 시리즈의 루프를 닫습니다. 도구를 사용하고, 기억하고, 조율하는 진짜 AI 에이전트를 구축하고 싶은 .NET 개발자라면 이것이 바로 앞으로 나아가는 길입니다.&lt;/p&gt;
&lt;p&gt;안정적인 1.0 릴리스는 프로덕션에서 이것을 기반으로 구축할 수 있음을 의미합니다. .NET에서 에이전트 개발에 뛰어들 기회를 기다리고 있었다면, 지금이 바로 그 시입니다.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server를 Azure App Service에서 실행하기 — 컨테이너 불필요</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>SQL MCP Server가 이제 Docker나 Kubernetes 없이 Azure App Service에서 실행됩니다. SQL 데이터베이스와 통신하는 AI 에이전트를 구축하는 .NET 개발자에게 무엇을 의미하는지 살펴봅니다.</description><content:encoded>&lt;p&gt;&lt;em&gt;이 게시물은 자동으로 번역되었습니다. 원본 버전은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;여기&lt;/a&gt;를 클릭하세요.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;솔직히 말하면, 튜토리얼에서 &amp;ldquo;컨테이너 필요&amp;quot;라는 말을 볼 때마다 속으로 한숨이 나옵니다. 컨테이너는 훌륭하지만, 팀에 컨테이너 전략이 없으면 단순해 보이는 기능이 예상치 못한 오케스트레이션 복잡성에 막히게 됩니다.&lt;/p&gt;
&lt;p&gt;그래서 이것이 눈에 띄었습니다. SQL MCP Server가 이제 Azure App Service에서 실행될 수 있습니다 — Docker도, Kubernetes도 없이, MCP, REST, GraphQL을 통해 SQL 데이터베이스를 공개하는 동일한 Data API Builder(DAB) 구성 파일만으로 동작합니다.&lt;/p&gt;
&lt;h2 id="sql-mcp-server란"&gt;SQL MCP Server란?&lt;/h2&gt;
&lt;p&gt;아직 모르신다면 간단히 설명드립니다. SQL MCP Server는 AI 에이전트와 SQL 데이터베이스 사이에 위치합니다. 에이전트에게 직접적인 데이터베이스 접근 권한을 주는 것(끔찍한 아이디어) 대신, 테이블과 뷰를 정의된 권한이 있는 엔티티 추상화 레이어로 공개합니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/ko-kr/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt; 위에 구축되어 있어, 단일 구성 파일이 MCP &lt;em&gt;와&lt;/em&gt; REST &lt;em&gt;와&lt;/em&gt; GraphQL을 동시에 관리합니다. 에이전트는 MCP 엔드포인트와 통신하고, 기존 애플리케이션은 REST 또는 GraphQL과 통신합니다. 동일한 설정, 동일한 런타임, 다른 인터페이스.&lt;/p&gt;
&lt;p&gt;이것은 정말 유용합니다. 두 개의 별도 API 레이어를 관리할 필요가 없습니다.&lt;/p&gt;
&lt;h2 id="컨테이너-문제-및-해결책"&gt;컨테이너 문제 (및 해결책)&lt;/h2&gt;
&lt;p&gt;SQL MCP Server의 원래 배포 모델은 컨테이너였습니다. 많은 팀에서는 잘 작동하지만, 모든 팀에 해당하지는 않습니다. 많은 .NET 팀이 Azure App Service나 VM을 표준으로 사용합니다. SQL 엔드포인트 하나를 공개하기 위해 컨테이너 런타임이 필요하다는 것은 불필요한 마찰을 만듭니다.&lt;/p&gt;
&lt;p&gt;새로운 연습 가이드는 컨테이너를 완전히 건너뛰는 방법을 보여줍니다. 모든 것이 &lt;code&gt;dab start&lt;/code&gt; 명령으로 실행되며, 표준 .NET 8 웹 프로세스로 App Service에 호스팅됩니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Data API Builder 설치&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 구성 초기화&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 엔티티 추가&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# App Service 인증 공급자 구성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 서버 시작&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 시점에서 &lt;code&gt;/mcp&lt;/code&gt;에 MCP, 동일한 프로세스에서 REST와 GraphQL을 사용할 수 있으며, 컨테이너에서 실행되는 것은 아무것도 없습니다.&lt;/p&gt;
&lt;h2 id="공유-api-키-없는-인증"&gt;공유 API 키 없는 인증&lt;/h2&gt;
&lt;p&gt;제가 가장 좋아하는 부분입니다. App Service에 배포할 때 Microsoft Entra ID를 인증 공급자로 구성합니다. 구성 파일에 공유 비밀이 없고, API 키를 교체할 필요도 없습니다.&lt;/p&gt;
&lt;p&gt;연결 문자열은 App Service 환경 변수에 보관되며(&lt;code&gt;dab-config.json&lt;/code&gt;에는 없음), MCP 엔드포인트는 플랫폼 인증으로 보호됩니다. Azure 워크로드에서 이미 Entra ID를 사용하고 있다면 자연스럽게 통합됩니다.&lt;/p&gt;
&lt;p&gt;로컬 개발 시에는 &lt;code&gt;Simulator&lt;/code&gt; 모드와 STDIO 전송으로 전환합니다. 배포 전에 &lt;code&gt;AppService&lt;/code&gt; 모드로 돌아옵니다. 깔끔하고 명확합니다.&lt;/p&gt;
&lt;h2 id="app-service에-배포"&gt;App Service에 배포&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;그런 다음 팀이 이미 사용하는 코드 배포 방법으로 DAB 프로젝트를 배포합니다. 핵심 사항: &lt;strong&gt;코드&lt;/strong&gt; 배포이지, 컨테이너 배포가 아닙니다.&lt;/p&gt;
&lt;h2 id="net-개발자에게-중요한-이유"&gt;.NET 개발자에게 중요한 이유&lt;/h2&gt;
&lt;p&gt;.NET에서 AI 에이전트를 구축하고 있다면, 에이전트는 결국 데이터베이스와 통신해야 합니다. SQL MCP Server는 원시 연결 문자열을 노출하거나 커스텀 API 레이어를 작성하지 않고도 이를 수행하는 구조화된 방법을 제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;원본 블로그 게시물&lt;/a&gt;과 &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;GitHub 샘플 저장소&lt;/a&gt;에서 전체 가이드를 확인하세요.&lt;/p&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;App Service의 SQL MCP Server는 컨테이너 전략 없이 에이전트에게 구조화된 SQL 데이터 접근을 제공하려는 .NET 팀에게 실용적인 선택입니다. 직접 사용해 보세요 — 에이전트가 깔끔한 API 인터페이스를 좋아할 것입니다.&lt;/p&gt;</content:encoded></item><item><title>Agent Governance Toolkit euro .NET MCP dogu ho chul geobeoneonseu jeogyong</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</guid><description>"Agent Governance Toolkit euro .NET MCP dogu ho chul geobeoneonseu jeogyong"reul .NET tim gwanjeomeseo silmujeogeuro jeongrihago unyeong geomto dangyereul damassseubnida.</description><content:encoded>&lt;p&gt;&lt;em&gt;I geul-eun jadong beonyeokdoeeossseubnida. wonmun yeongeo boneun &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/"&gt;yeogi&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;Agent Governance Toolkit euro .NET MCP dogu ho chul geobeoneonseu jeogyong&lt;/a&gt;neun .NET siseutemeul unyeonghaneun timiramyeon hwaginhal gachi ga issseubnida.&lt;/p&gt;
&lt;p&gt;Jega boneun haeksimeun sae gineung jacheboda ireul eolmana ppalli jaesayong ganeunghan enjinieoring paeteon euro jeonhwanhaneunya imnida.&lt;/p&gt;
&lt;h2 id="net-tim-e-jungyohan-iyu"&gt;.NET tim-e jungyohan iyu&lt;/h2&gt;
&lt;p&gt;Ireon eobdeiteuneun jeondal sokdo peullaetpom ilgwanseong geobeoneonseu sai ui gyunhyeongeul matchuneun de doumi doebnida.&lt;/p&gt;
&lt;h2 id="silmu-jeogyong-dangye"&gt;Silmu jeogyong dangye&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Unyeonggwa yusaham deiteoro jageun .NET pailreoseseo meonjeo geomjeunhabnida.&lt;/li&gt;
&lt;li&gt;hwakjang baepo jeon-e gwancheukseonggwa rollbaeg gijuneul jeong-uihabnida.&lt;/li&gt;
&lt;li&gt;guhyeon paeteoneul naebu tempeullis-euro munseohwahayeo dareun tim-i jaesayonghage habnida.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="source"&gt;Source&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Original article: &lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Visual Studio 4wol eobdeiteu .NET weokeupeullo yong Cloud Agent tonghap</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</guid><description>"Visual Studio 4wol eobdeiteu .NET weokeupeullo yong Cloud Agent tonghap"reul .NET tim gwanjeomeseo silmujeogeuro jeongrihago unyeong geomto dangyereul damassseubnida.</description><content:encoded>&lt;p&gt;&lt;em&gt;I geul-eun jadong beonyeokdoeeossseubnida. wonmun yeongeo boneun &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/"&gt;yeogi&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;Visual Studio 4wol eobdeiteu .NET weokeupeullo yong Cloud Agent tonghap&lt;/a&gt;neun .NET siseutemeul unyeonghaneun timiramyeon hwaginhal gachi ga issseubnida.&lt;/p&gt;
&lt;p&gt;Jega boneun haeksimeun sae gineung jacheboda ireul eolmana ppalli jaesayong ganeunghan enjinieoring paeteon euro jeonhwanhaneunya imnida.&lt;/p&gt;
&lt;h2 id="net-tim-e-jungyohan-iyu"&gt;.NET tim-e jungyohan iyu&lt;/h2&gt;
&lt;p&gt;Ireon eobdeiteuneun jeondal sokdo peullaetpom ilgwanseong geobeoneonseu sai ui gyunhyeongeul matchuneun de doumi doebnida.&lt;/p&gt;
&lt;h2 id="silmu-jeogyong-dangye"&gt;Silmu jeogyong dangye&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Unyeonggwa yusaham deiteoro jageun .NET pailreoseseo meonjeo geomjeunhabnida.&lt;/li&gt;
&lt;li&gt;hwakjang baepo jeon-e gwancheukseonggwa rollbaeg gijuneul jeong-uihabnida.&lt;/li&gt;
&lt;li&gt;guhyeon paeteoneul naebu tempeullis-euro munseohwahayeo dareun tim-i jaesayonghage habnida.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="source"&gt;Source&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Original article: &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>