<?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>Azd | The .NET Blog</title><link>https://thedotnetblog.com/ko/tags/azd/</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>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ko/tags/azd/index.xml" rel="self" type="application/rss+xml"/><item><title>Python, TypeScript, .NET으로 azd 훅 작성하기: 셸 스크립트와의 작별</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI가 이제 Python, JavaScript, TypeScript, .NET으로 훅 작성을 지원합니다. 마이그레이션 스크립트 하나 때문에 Bash로 전환할 필요가 없어집니다.</description><content:encoded>&lt;p&gt;&lt;em&gt;이 게시물은 자동으로 번역되었습니다. 원본 버전을 보려면 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;여기를 클릭하세요&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;완전히 .NET으로 구성된 프로젝트에서 azd 훅을 위해 Bash 스크립트를 작성해야 했던 경험이 있다면, 그 불편함을 잘 알 것이다. 프로젝트의 모든 것이 C#인데, 왜 pre-provisioning 단계 하나 때문에 셸 문법으로 전환해야 하는가.&lt;/p&gt;
&lt;p&gt;그 불만이 이제 공식적으로 해결됐다. Azure Developer CLI가 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;훅의 멀티 언어 지원을 출시&lt;/a&gt;했으며, 기대했던 것만큼 훌륭하다.&lt;/p&gt;
&lt;h2 id="훅이란"&gt;훅이란&lt;/h2&gt;
&lt;p&gt;훅은 &lt;code&gt;azd&lt;/code&gt; 라이프사이클의 핵심 지점에서 실행되는 스크립트다 — 프로비저닝 전, 배포 후 등. &lt;code&gt;azure.yaml&lt;/code&gt;에 정의되며 CLI를 수정하지 않고 커스텀 로직을 주입할 수 있게 해준다.&lt;/p&gt;
&lt;p&gt;기존에는 Bash와 PowerShell만 지원됐다. 이제 &lt;strong&gt;Python, JavaScript, TypeScript 또는 .NET&lt;/strong&gt;을 사용할 수 있으며, &lt;code&gt;azd&lt;/code&gt;가 나머지를 자동으로 처리한다.&lt;/p&gt;
&lt;h2 id="감지-방식"&gt;감지 방식&lt;/h2&gt;
&lt;p&gt;훅을 파일로 가리키기만 하면 &lt;code&gt;azd&lt;/code&gt;가 파일 확장자에서 언어를 추론한다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&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;kind: python&lt;/code&gt; (또는 해당 언어)을 명시적으로 지정할 수 있다.&lt;/p&gt;
&lt;h2 id="언어별-주요-세부-사항"&gt;언어별 주요 세부 사항&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;스크립트 옆 (또는 상위 디렉토리)에 &lt;code&gt;requirements.txt&lt;/code&gt;나 &lt;code&gt;pyproject.toml&lt;/code&gt;을 놓으면 &lt;code&gt;azd&lt;/code&gt;가 자동으로 가상 환경을 생성하고 의존성을 설치한 후 스크립트를 실행한다.&lt;/p&gt;
&lt;h3 id="javascript와-typescript"&gt;JavaScript와 TypeScript&lt;/h3&gt;
&lt;p&gt;같은 패턴 — 스크립트 근처에 &lt;code&gt;package.json&lt;/code&gt;을 두면 &lt;code&gt;azd&lt;/code&gt;가 먼저 &lt;code&gt;npm install&lt;/code&gt;을 실행한다. TypeScript의 경우 컴파일 단계나 &lt;code&gt;tsconfig.json&lt;/code&gt; 없이 &lt;code&gt;npx tsx&lt;/code&gt;를 사용한다.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;두 가지 모드 지원:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;프로젝트 모드&lt;/strong&gt;: 스크립트 옆에 &lt;code&gt;.csproj&lt;/code&gt;가 있으면 &lt;code&gt;azd&lt;/code&gt;가 자동으로 &lt;code&gt;dotnet restore&lt;/code&gt;와 &lt;code&gt;dotnet build&lt;/code&gt;를 실행한다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;단일 파일 모드&lt;/strong&gt;: .NET 10+에서 독립 &lt;code&gt;.cs&lt;/code&gt; 파일을 &lt;code&gt;dotnet run script.cs&lt;/code&gt;로 직접 실행 가능하다. 프로젝트 파일 불필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="실행기별-설정"&gt;실행기별 설정&lt;/h2&gt;
&lt;p&gt;각 언어는 선택적 &lt;code&gt;config&lt;/code&gt; 블록을 지원한다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="net-개발자에게-중요한-이유"&gt;.NET 개발자에게 중요한 이유&lt;/h2&gt;
&lt;p&gt;훅은 azd 기반 프로젝트에서 언어 전환을 강제하는 마지막 장소였다. 이제 앱 코드, 인프라 스크립트, 라이프사이클 훅을 포함한 전체 배포 파이프라인이 하나의 언어로 살 수 있다. 기존 .NET 유틸리티를 훅에서 재사용하고, 공유 라이브러리를 참조하고, 셸 스크립트 유지보수에서 해방될 수 있다.&lt;/p&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;작은 변화처럼 보이지만 azd 일상 워크플로우에서 많은 마찰을 제거하는 변화 중 하나다. 훅의 멀티 언어 지원은 지금 바로 사용 가능하다 — &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;공식 게시물&lt;/a&gt;에서 전체 문서를 확인해 보자.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: AI 기반 프로젝트 설정과 스마트 오류 해결</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI가 GitHub Copilot과 통합되어 프로젝트 인프라를 생성하고 배포 오류를 해결합니다 — 터미널을 벗어날 필요 없이.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;이 글은 자동 번역되었습니다. 영어 원문은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;여기&lt;/a&gt;에서 확인할 수 있습니다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;기존 앱을 Azure에 배포하려고 할 때, 빈 &lt;code&gt;azure.yaml&lt;/code&gt; 파일을 보며 Express API가 Container Apps를 써야 할지 App Service를 써야 할지 떠올리려 했던 경험 있으신가요? 그런 순간이 이제 훨씬 짧아집니다.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI(&lt;code&gt;azd&lt;/code&gt;)가 GitHub Copilot과 두 가지 방식으로 통합되었습니다: &lt;code&gt;azd init&lt;/code&gt; 실행 시 AI 지원 프로젝트 스캐폴딩, 그리고 배포 실패 시 지능형 오류 트러블슈팅. 두 기능 모두 터미널 안에서 완전히 동작합니다 — 딱 원하는 방식입니다.&lt;/p&gt;
&lt;h2 id="azd-init에서-copilot-설정"&gt;azd init에서 Copilot 설정&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt;을 실행하면 이제 &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo; 옵션이 나타납니다. 선택하면 Copilot이 코드베이스를 분석하여 실제 코드를 기반으로 &lt;code&gt;azure.yaml&lt;/code&gt;, 인프라 템플릿, Bicep 모듈을 생성합니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# 선택: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;필요한 것들:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 이상&lt;/strong&gt; — &lt;code&gt;azd version&lt;/code&gt;으로 확인하거나 &lt;code&gt;azd update&lt;/code&gt;로 업데이트&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;활성 GitHub Copilot 구독&lt;/strong&gt; (Individual, Business 또는 Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — 필요 시 &lt;code&gt;azd&lt;/code&gt;가 로그인을 요청함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;정말 유용한 점은 양방향으로 동작한다는 것입니다. 처음부터 빌드한다면? Copilot이 처음부터 올바른 Azure 서비스를 설정하도록 도와줍니다. 배포하고 싶은 기존 앱이 있다면? Copilot을 그쪽으로 지향하면 코드 구조를 바꾸지 않고도 설정을 생성해 줍니다.&lt;/p&gt;
&lt;h3 id="실제로-무엇을-하나"&gt;실제로 무엇을 하나&lt;/h3&gt;
&lt;p&gt;PostgreSQL 의존성이 있는 Node.js Express API가 있다고 합시다. Container Apps와 App Service 중 무엇을 선택할지 수동으로 결정하고 Bicep을 처음부터 작성하는 대신, Copilot이 스택을 감지하고 다음을 생성합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;올바른 &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt; 설정이 담긴 &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Azure Container Apps를 위한 Bicep 모듈&lt;/li&gt;
&lt;li&gt;Azure Database for PostgreSQL을 위한 Bicep 모듈&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;그리고 무언가를 변경하기 전에 사전 검사를 실행합니다 — git 작업 디렉토리가 깨끗한지 확인하고, MCP 서버 도구 동의를 미리 요청합니다. 무엇이 바뀌는지 정확히 알고 난 뒤에만 진행됩니다.&lt;/p&gt;
&lt;h2 id="copilot-기반-오류-트러블슈팅"&gt;Copilot 기반 오류 트러블슈팅&lt;/h2&gt;
&lt;p&gt;배포 오류는 피할 수 없습니다. 누락된 파라미터, 권한 문제, SKU 가용성 문제 — 그리고 오류 메시지는 정작 필요한 것을 알려주지 않습니다: &lt;em&gt;어떻게 고치는가&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Copilot 없이는: 오류 복사 → 문서 검색 → 관련 없는 Stack Overflow 답변 3개 읽기 → &lt;code&gt;az&lt;/code&gt; CLI 명령어 실행 → 다시 시도하며 기도. &lt;code&gt;azd&lt;/code&gt;에 Copilot이 통합되면 이 루프가 사라집니다. &lt;code&gt;azd&lt;/code&gt; 명령이 실패하면 즉시 4가지 옵션을 제공합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — 무엇이 잘못됐는지 알기 쉬운 설명&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — 수정을 위한 단계별 지침&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — 완전한 분석 + Copilot이 수정 적용 (승인 후) + 선택적 재시도&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — 직접 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;핵심: Copilot은 이미 프로젝트, 실패한 명령, 오류 세부 정보의 컨텍스트를 갖고 있습니다. 제안은 &lt;em&gt;여러분의 상황&lt;/em&gt;에 맞게 구체적입니다.&lt;/p&gt;
&lt;h3 id="기본-동작-설정"&gt;기본 동작 설정&lt;/h3&gt;
&lt;p&gt;항상 같은 옵션을 선택한다면, 인터랙티브 프롬프트를 건너뛸 수 있습니다:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;값: &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. 자동 수정 및 재시도도 활성화할 수 있습니다:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;언제든지 인터랙티브 모드로 되돌리기:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt;로 최신 버전을 받고 다음 프로젝트에서 &lt;code&gt;azd init&lt;/code&gt;을 써보세요. 진정한 가치를 주는 Copilot 통합입니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;원문 발표를 여기서 읽어보세요&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd update — 모든 패키지 매니저를 지배하는 하나의 명령어</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI에 설치 방법에 관계없이 작동하는 범용 업데이트 명령어가 추가되었습니다 — winget, Homebrew, Chocolatey, 설치 스크립트 모두 지원.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;이 글은 자동 번역되었습니다. 원문은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;여기&lt;/a&gt;를 참조하세요.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;몇 주마다 뜨는 &amp;ldquo;새로운 버전의 azd를 사용할 수 있습니다&amp;rdquo; 메시지 아시죠? &lt;code&gt;azd&lt;/code&gt;를 winget으로 설치했는지, Homebrew인지, 아니면 6개월 전에 실행한 curl 스크립트인지 기억이 안 나서 그냥 무시하게 되는 그 메시지요. 드디어 해결됐습니다.&lt;/p&gt;
&lt;p&gt;Microsoft가 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt;를 출시했습니다 — 원래 어떤 방법으로 설치했든 상관없이 Azure Developer CLI를 최신 버전으로 업데이트하는 단 하나의 명령어입니다. Windows, macOS, Linux — 상관없습니다. 명령어 하나면 됩니다.&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이게 전부입니다. 새로운 기능을 미리 체험하고 싶다면 일일 Insiders 빌드로 전환할 수 있습니다:&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;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 명령어는 현재 설치 방법을 감지하고 내부적으로 적절한 업데이트 메커니즘을 사용합니다. 더 이상 &amp;ldquo;잠깐, 이 컴퓨터에서 winget을 썼었나, choco였나?&amp;rdquo; 고민할 필요 없습니다.&lt;/p&gt;
&lt;h2 id="한-가지-참고사항"&gt;한 가지 참고사항&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt;는 버전 1.23.x부터 제공됩니다. 이전 버전을 사용 중이라면 원래 설치 방법으로 마지막 수동 업데이트를 한 번만 해주면 됩니다. 그 이후로는 &lt;code&gt;azd update&lt;/code&gt;가 모든 것을 처리합니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;azd version&lt;/code&gt;으로 현재 버전을 확인하세요. 새로 설치가 필요하다면 &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;설치 문서&lt;/a&gt;를 참고하세요.&lt;/p&gt;
&lt;h2 id="왜-중요한가"&gt;왜 중요한가&lt;/h2&gt;
&lt;p&gt;작은 삶의 질 개선이지만, AI 에이전트와 Aspire 앱을 Azure에 배포하기 위해 매일 &lt;code&gt;azd&lt;/code&gt;를 사용하는 우리에게 최신 상태를 유지한다는 것은 &amp;ldquo;그 버그는 최신 버전에서 이미 수정됐습니다&amp;quot;라는 순간이 줄어든다는 의미입니다. 신경 쓸 일이 하나 줄어드는 거죠.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;전체 발표&lt;/a&gt;와 Jon Gallant의 &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;상세 분석&lt;/a&gt;에서 자세한 내용을 확인하세요.&lt;/p&gt;</content:encoded></item><item><title>azd로 AI 에이전트를 로컬에서 실행하고 디버깅할 수 있게 됐다 — 2026년 3월 변경사항 정리</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI가 2026년 3월에 7개 릴리스를 발행했습니다. 하이라이트: AI 에이전트의 로컬 실행 및 디버그 루프, GitHub Copilot 프로젝트 설정 통합, Container App Jobs 지원.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;이 글은 자동 번역되었습니다. 원본은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;여기&lt;/a&gt;에서 확인하세요.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;한 달에 7개 릴리스. Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) 팀이 2026년 3월에 발행한 것이며, 메인 기능은 제가 기다리던 것입니다: &lt;strong&gt;AI 에이전트를 위한 로컬 실행 및 디버그 루프&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;PC Chan이 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;전체 요약을 게시&lt;/a&gt;했는데, 내용이 많지만 AI 기반 앱을 구축하는 .NET 개발자에게 실제로 중요한 것만 걸러보겠습니다.&lt;/p&gt;
&lt;h2 id="배포-없이-ai-에이전트-실행-및-디버깅"&gt;배포 없이 AI 에이전트 실행 및 디버깅&lt;/h2&gt;
&lt;p&gt;이것이 핵심입니다. 새로운 &lt;code&gt;azure.ai.agents&lt;/code&gt; 확장이 AI 에이전트를 위한 적절한 이너 루프 경험을 제공하는 명령을 추가합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — 에이전트를 로컬에서 시작&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — 메시지 전송 (로컬 또는 배포된 에이전트)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — 컨테이너 상태 및 건강 표시&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — 컨테이너 로그를 실시간 스트리밍&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이전에는 AI 에이전트 테스트가 변경할 때마다 Microsoft Foundry로 배포하는 것을 의미했습니다. 이제 로컬에서 반복하고, 에이전트 동작을 테스트하고, 준비가 되면 배포할 수 있습니다.&lt;/p&gt;
&lt;h2 id="github-copilot이-azd-프로젝트를-설정"&gt;GitHub Copilot이 azd 프로젝트를 설정&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt;에 &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo; 옵션이 추가됐습니다. 프로젝트 구조에 대한 프롬프트에 수동으로 답하는 대신, Copilot 에이전트가 구성을 생성합니다. 명령이 실패하면 &lt;code&gt;azd&lt;/code&gt;가 AI 지원 문제 해결을 제공합니다.&lt;/p&gt;
&lt;h2 id="container-app-jobs-및-배포-개선"&gt;Container App Jobs 및 배포 개선&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt;가 기존 &lt;code&gt;host: containerapp&lt;/code&gt; 설정으로 &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; 배포&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;설정 가능한 배포 타임아웃&lt;/strong&gt;: &lt;code&gt;azd deploy&lt;/code&gt;의 새 &lt;code&gt;--timeout&lt;/code&gt; 플래그와 &lt;code&gt;azure.yaml&lt;/code&gt;의 &lt;code&gt;deployTimeout&lt;/code&gt; 필드&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;원격 빌드 폴백&lt;/strong&gt;: ACR 빌드 실패 시 로컬 Docker/Podman 빌드로 자동 폴백&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로컬 프리플라이트 검증&lt;/strong&gt;: 배포 전 Bicep 매개변수를 로컬에서 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="dx-개선"&gt;DX 개선&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;자동 pnpm/yarn 감지&lt;/strong&gt; — JS/TS 프로젝트용&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pyproject.toml 지원&lt;/strong&gt; — Python 패키징용&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로컬 템플릿 디렉토리&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt;이 파일시스템 경로 허용&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;개선된 오류 메시지&lt;/strong&gt; — &lt;code&gt;--no-prompt&lt;/code&gt; 모드&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;빌드 환경 변수&lt;/strong&gt; — 모든 프레임워크 빌드 서브프로세스에 주입 (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;로컬 AI 에이전트 디버그 루프가 이번 릴리스의 스타이지만, 배포 개선과 DX 폴리시의 축적으로 &lt;code&gt;azd&lt;/code&gt;가 그 어느 때보다 성숙해졌습니다. Azure에 .NET 앱을 배포하고 있다면 — 특히 AI 에이전트라면 — 이번 업데이트는 가치가 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;전체 릴리스 노트&lt;/a&gt;에서 모든 세부사항을 확인하세요.&lt;/p&gt;</content:encoded></item><item><title>노트북에서 프로덕션까지: 두 개의 명령으로 AI 에이전트를 Microsoft Foundry에 배포</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI에 'azd ai agent' 명령이 추가되어 AI 에이전트를 로컬 개발에서 몇 분 만에 Foundry 프로덕션 엔드포인트로 가져갑니다. 전체 워크플로를 소개합니다.</description><content:encoded>&lt;p&gt;&amp;ldquo;내 컴퓨터에서는 되는데&amp;quot;와 &amp;ldquo;배포되어 트래픽을 처리 중&amp;rdquo;—이 사이의 간극을 아시나요? AI 에이전트의 경우 이 간극은 고통스럽게 넓었습니다. 리소스 프로비저닝, 모델 배포, ID 설정, 모니터링 구축 — 이 모든 것이 누군가가 실제로 에이전트를 호출할 수 있기 전에 필요한 작업입니다.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI가 이것을 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;두 개의 명령으로 해결&lt;/a&gt;했습니다.&lt;/p&gt;
&lt;h2 id="새로운-azd-ai-agent-워크플로"&gt;새로운 &lt;code&gt;azd ai agent&lt;/code&gt; 워크플로&lt;/h2&gt;
&lt;p&gt;실제로 어떤 모습인지 보여드리겠습니다. AI 에이전트 프로젝트가 있다고 합시다 — 호텔 컨시어지 에이전트라고 하죠. 로컬에서 동작합니다. Microsoft Foundry에서 실행하고 싶습니다.&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;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;끝입니다. 두 개의 명령. &lt;code&gt;azd ai agent init&lt;/code&gt;이 저장소에 Infrastructure as Code를 생성하고, &lt;code&gt;azd up&lt;/code&gt;이 Azure에서 모든 것을 프로비저닝하고 에이전트를 퍼블리시합니다. Foundry 포털에서 에이전트로의 직접 링크를 받게 됩니다.&lt;/p&gt;
&lt;h2 id="내부에서-일어나는-일"&gt;내부에서 일어나는 일&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;init&lt;/code&gt; 명령은 저장소에 실제 검사 가능한 Bicep 템플릿을 생성합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Foundry Resource&lt;/strong&gt; (최상위 컨테이너)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundry Project&lt;/strong&gt; (에이전트가 존재하는 곳)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;모델 배포&lt;/strong&gt; 설정 (GPT-4o 등)&lt;/li&gt;
&lt;li&gt;적절한 RBAC 역할 할당이 있는 &lt;strong&gt;관리 ID&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;서비스 맵용 &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;에이전트 메타데이터와 환경 변수가 있는 &lt;code&gt;agent.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;핵심 포인트: 이 모든 것은 여러분 것입니다. 저장소에 버전 관리되는 Bicep입니다. 검사하고, 커스터마이즈하고, 에이전트 코드와 함께 커밋할 수 있습니다. 마법의 블랙박스는 없습니다.&lt;/p&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이것으로 에이전트를 로컬에서 시작합니다. &lt;code&gt;azd ai agent invoke&lt;/code&gt;와 결합하여 테스트 프롬프트를 보내면 빠른 피드백 루프를 얻습니다. 코드 편집, 재시작, 호출, 반복.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;invoke&lt;/code&gt; 명령은 라우팅도 똑똑합니다 — 로컬 에이전트가 실행 중이면 자동으로 그쪽을 타겟합니다. 실행 중이 아니면 원격 엔드포인트로 갑니다.&lt;/p&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-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;에이전트를 통과하는 모든 요청과 응답이 실시간으로 터미널에 스트리밍됩니다. 프로덕션 문제를 디버깅하는 데 이것은 값으로 매길 수 없습니다. Log Analytics를 뒤질 필요 없이, 메트릭이 집계되길 기다릴 필요 없이 — 지금 무슨 일이 일어나고 있는지 볼 수 있습니다.&lt;/p&gt;
&lt;h2 id="전체-명령-세트"&gt;전체 명령 세트&lt;/h2&gt;
&lt;p&gt;빠른 참조:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;명령&lt;/th&gt;
&lt;th&gt;기능&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IaC로 Foundry 에이전트 프로젝트 스캐폴드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Azure 리소스 프로비저닝 및 에이전트 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;원격 또는 로컬 에이전트에 프롬프트 전송&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;개발용으로 에이전트를 로컬에서 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;퍼블리시된 에이전트의 실시간 로그 스트리밍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;에이전트 상태 및 건강 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;모든 Azure 리소스 정리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="net-개발자에게-왜-중요한가"&gt;.NET 개발자에게 왜 중요한가&lt;/h2&gt;
&lt;p&gt;공지의 예제는 Python 기반이지만, 인프라 이야기는 언어에 구애받지 않습니다. .NET 에이전트도 동일한 Bicep 스캐폴딩, 동일한 관리 ID 설정, 동일한 모니터링 파이프라인을 받습니다. 그리고 이미 .NET Aspire 앱이나 Azure 배포에 &lt;code&gt;azd&lt;/code&gt;를 사용하고 있다면, 기존 워크플로에 바로 통합됩니다.&lt;/p&gt;
&lt;p&gt;AI 에이전트의 배포 간극은 생태계에서 가장 큰 마찰 포인트 중 하나였습니다. 작동하는 프로토타입에서 적절한 ID, 네트워킹, 모니터링을 갖춘 프로덕션 엔드포인트로 전환하는 데 일주일의 DevOps 작업이 필요해서는 안 됩니다. 이제 두 개의 명령과 몇 분이면 됩니다.&lt;/p&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt;는 지금 사용할 수 있습니다. 인프라 설정이 너무 많은 작업처럼 보여서 AI 에이전트 배포를 미루고 있었다면 시도해 보세요. 프론트엔드 채팅 앱 통합을 포함한 완전한 단계별 가이드는 &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;전체 워크스루&lt;/a&gt;를 확인하세요.&lt;/p&gt;</content:encoded></item></channel></rss>