<?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>Data-Api-Builder | The .NET Blog</title><link>https://thedotnetblog.com/ko/tags/data-api-builder/</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/data-api-builder/index.xml" rel="self" type="application/rss+xml"/><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>SQL MCP Server — AI 에이전트에게 데이터베이스 접근을 제공하는 올바른 방법</title><link>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>Data API builder의 SQL MCP Server는 스키마를 노출하거나 NL2SQL에 의존하지 않고 AI 에이전트에게 안전하고 결정론적인 데이터베이스 접근을 제공합니다. RBAC, 캐싱, 다중 데이터베이스 지원 — 모두 기본 제공.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;이 글은 자동 번역되었습니다. 원문은 &lt;a href="https://thedotnetblog.com/ko/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;여기&lt;/a&gt;에서 확인하세요.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;솔직히 말합시다: 오늘날 사용 가능한 대부분의 데이터베이스 MCP 서버는 무섭습니다. 자연어 쿼리를 받아서 즉석에서 SQL을 생성하고 프로덕션 데이터에 대해 실행합니다. 뭐가 잘못될 수 있을까요? (전부요. 전부 잘못될 수 있습니다.)&lt;/p&gt;
&lt;p&gt;Azure SQL 팀이 방금 &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;SQL MCP Server를 발표&lt;/a&gt;했는데, 근본적으로 다른 접근 방식을 취합니다. Data API builder(DAB) 2.0의 기능으로 구축되어, AI 에이전트에게 구조화되고 결정론적인 데이터베이스 작업 접근을 제공합니다 — NL2SQL 없이, 스키마 노출 없이, 매 단계마다 완전한 RBAC와 함께.&lt;/p&gt;
&lt;h2 id="왜-nl2sql이-아닌가"&gt;왜 NL2SQL이 아닌가?&lt;/h2&gt;
&lt;p&gt;이것이 가장 흥미로운 설계 결정입니다. 모델은 결정론적이지 않으며, 복잡한 쿼리가 미묘한 오류를 생성할 가능성이 가장 높습니다. 사용자가 AI가 생성해주길 바라는 바로 그 쿼리가 비결정론적으로 생성될 때 가장 많은 검토가 필요한 쿼리이기도 합니다.&lt;/p&gt;
&lt;p&gt;대신, SQL MCP Server는 &lt;strong&gt;NL2DAB&lt;/strong&gt; 접근 방식을 사용합니다. 에이전트는 Data API builder의 엔티티 추상화 레이어와 내장 쿼리 빌더로 작업하여 정확하고 잘 형성된 T-SQL을 결정론적으로 생성합니다. 사용자에게는 같은 결과이지만, 환각된 JOIN이나 우발적인 데이터 노출 위험이 없습니다.&lt;/p&gt;
&lt;h2 id="7개의-도구-700개가-아닌"&gt;7개의 도구, 700개가 아닌&lt;/h2&gt;
&lt;p&gt;SQL MCP Server는 데이터베이스 크기에 관계없이 정확히 7개의 DML 도구를 노출합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — 사용 가능한 엔티티 및 작업 발견&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — 행 삽입&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — 테이블 및 뷰 쿼리&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — 행 수정&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — 행 삭제&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — 저장 프로시저 실행&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — 집계 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이것은 현명합니다. 컨텍스트 윈도우는 에이전트의 사고 공간이기 때문입니다. 수백 개의 도구 정의로 채우면 추론을 위한 공간이 줄어듭니다. 7개의 고정 도구는 에이전트를 &lt;em&gt;탐색&lt;/em&gt;이 아닌 &lt;em&gt;사고&lt;/em&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-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&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="nt"&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&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="nt"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&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="nt"&gt;&amp;#34;dml-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&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="nt"&gt;&amp;#34;describe-entities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;create-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;read-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;update-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;delete-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;execute-entity&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;aggregate-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="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;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;dab init &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --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;dab add Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&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;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이것으로 Customers 테이블을 노출하는 SQL MCP Server가 실행됩니다. 엔티티 추상화 레이어는 이름과 열에 별칭을 지정하고, 역할별로 필드를 제한하며, 에이전트가 보는 것을 정확히 제어할 수 있게 합니다 — 내부 스키마 세부 정보를 노출하지 않으면서.&lt;/p&gt;
&lt;h2 id="보안-이야기는-탄탄합니다"&gt;보안 이야기는 탄탄합니다&lt;/h2&gt;
&lt;p&gt;여기서 Data API builder의 성숙도가 빛을 발합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모든 계층에서 RBAC&lt;/strong&gt; — 각 엔티티가 어떤 역할이 읽기, 생성, 업데이트, 삭제할 수 있는지, 어떤 필드가 표시되는지 정의&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Key Vault 통합&lt;/strong&gt; — 연결 문자열과 비밀을 안전하게 관리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + 커스텀 OAuth&lt;/strong&gt; — 프로덕션 등급 인증&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Security Policy&lt;/strong&gt; — 에이전트는 원시 SQL이 아닌 통제된 계약을 통해 상호작용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;스키마 추상화는 특히 중요합니다. 내부 테이블 및 열 이름은 에이전트에게 절대 노출되지 않습니다. AI 상호작용에 의미 있는 엔티티, 별칭, 설명을 정의합니다 — 데이터베이스 ERD 다이어그램이 아니라.&lt;/p&gt;
&lt;h2 id="멀티-데이터베이스-및-멀티-프로토콜"&gt;멀티 데이터베이스 및 멀티 프로토콜&lt;/h2&gt;
&lt;p&gt;SQL MCP Server는 Microsoft SQL, PostgreSQL, Azure Cosmos DB, MySQL을 지원합니다. DAB의 기능이므로 동일한 구성에서 REST, GraphQL, MCP 엔드포인트를 동시에 얻을 수 있습니다. 동일한 엔티티 정의, 동일한 RBAC 규칙, 동일한 보안 — 세 가지 프로토콜 모두에서.&lt;/p&gt;
&lt;p&gt;DAB 2.0의 자동 구성은 빠른 프로토타이핑을 위해 추상화를 줄이고 싶다면 데이터베이스를 검사하고 구성을 동적으로 빌드할 수도 있습니다.&lt;/p&gt;
&lt;h2 id="제-의견"&gt;제 의견&lt;/h2&gt;
&lt;p&gt;이것이 AI 에이전트를 위한 엔터프라이즈 데이터베이스 접근이 작동해야 하는 방식입니다. &amp;ldquo;LLM아, SQL 좀 써줘, 프로덕션에 YOLO 할게&amp;quot;가 아닙니다. 대신: 잘 정의된 엔티티 레이어, 결정론적 쿼리 생성, 매 단계의 RBAC, 캐싱, 모니터링, 텔레메트리. 최고의 의미로 지루합니다.&lt;/p&gt;
&lt;p&gt;.NET 개발자에게 통합 이야기는 깔끔합니다 — DAB는 .NET 도구이고, MCP Server는 컨테이너로 실행되며, 대부분이 이미 사용하고 있는 Azure SQL과 함께 작동합니다. 데이터 접근이 필요한 AI 에이전트를 구축한다면 여기서 시작하세요.&lt;/p&gt;
&lt;h2 id="마무리"&gt;마무리&lt;/h2&gt;
&lt;p&gt;SQL MCP Server는 무료, 오픈소스이며 어디서나 실행됩니다. AI 에이전트에게 안전한 데이터베이스 접근을 제공하기 위한 Microsoft의 규범적 접근 방식입니다. 시작하려면 &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;전체 게시물&lt;/a&gt;과 &lt;a href="https://aka.ms/sql/mcp"&gt;문서&lt;/a&gt;를 확인하세요.&lt;/p&gt;</content:encoded></item></channel></rss>