<?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>MDM on jyukki's Blog</title><link>https://jyukki.com/tags/mdm/</link><description>Recent content in MDM on jyukki's Blog</description><generator>Hugo -- 0.147.0</generator><language>ko-kr</language><lastBuildDate>Thu, 09 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jyukki.com/tags/mdm/index.xml" rel="self" type="application/rss+xml"/><item><title>2026 개발 트렌드: Managed Dev-Tool Telemetry Plane, AI 개발 도구 관측성이 엔드포인트 정책으로 내려온다</title><link>https://jyukki.com/posts/2026-07-09-managed-dev-tool-telemetry-plane-trend/</link><pubDate>Thu, 09 Jul 2026 10:06:00 +0900</pubDate><guid>https://jyukki.com/posts/2026-07-09-managed-dev-tool-telemetry-plane-trend/</guid><description>GitHub Copilot의 enterprise-managed OpenTelemetry export와 MDM 기반 managed settings 흐름을 바탕으로, AI 개발 도구 관측성과 정책이 서버 대시보드가 아니라 개발자 엔드포인트까지 내려오는 이유를 정리합니다.</description><content:encoded><![CDATA[<p>2026년 7월 8일 GitHub Changelog에는 작지만 중요한 두 가지 흐름이 같이 올라왔습니다. 하나는 GitHub Copilot이 VS Code와 Copilot CLI agent host process에서 OpenTelemetry 데이터를 enterprise가 지정한 collector로 내보낼 수 있게 하는 기능입니다. 다른 하나는 Copilot managed settings를 MDM, Group Policy, Jamf, Intune, Chef, Puppet, Ansible, file-based configuration 같은 디바이스 관리 경로로 배포할 수 있게 하는 기능입니다.</p>
<p>이 조합은 단순한 관리 편의 기능이 아닙니다. AI 개발 도구가 IDE와 CLI 안에서 코드를 바꾸고, 브라우저를 열고, PR을 만들고, 장기 실행 작업을 수행하는 순간 관측성과 정책은 서버 대시보드만으로 부족해집니다. 개발자 장비의 확장, CLI, agent host, local config가 모두 실행 표면이 됩니다. 저는 이 흐름을 <strong>Managed Dev-Tool Telemetry Plane</strong>으로 보는 편이 맞다고 봅니다.</p>
<p>이 글은 <a href="/posts/2026-06-22-ai-agent-observability-evidence-contract-trend/">AI Agent Observability Evidence Contract</a>, <a href="/posts/2026-07-03-agent-session-ledger-ai-credit-controls-trend/">Agent Session Ledger</a>, <a href="/posts/2026-07-05-ide-browser-agent-permission-plane-trend/">IDE Browser Agent Permission Plane</a>, <a href="/posts/2026-07-01-opentelemetry-native-data-plane-trend/">OpenTelemetry Native Data Plane</a>과 이어집니다. 기존 글들이 세션과 실행 증거를 다뤘다면, 이번 글은 그 증거가 어디서 강제되고 어디로 흘러가야 하는지를 다룹니다.</p>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>AI 개발 도구 관측성이 usage metrics에서 IDE·CLI OTel export로 확장되는 이유를 이해할 수 있습니다.</li>
<li>server-managed settings와 MDM/file-based managed settings가 왜 같이 필요한지 판단할 수 있습니다.</li>
<li>telemetry endpoint, model, plugin, marketplace, bypass permission 같은 설정을 조직 정책으로 고정하는 기준을 잡을 수 있습니다.</li>
<li>민감정보와 개발자 프라이버시를 해치지 않으면서 에이전트 실행 증거를 수집하는 체크리스트를 얻을 수 있습니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-ai-개발-도구는-이제-서버-서비스가-아니라-엔드포인트-실행-표면이다">1) AI 개발 도구는 이제 서버 서비스가 아니라 엔드포인트 실행 표면이다</h3>
<p>예전 개발 도구 관리는 비교적 단순했습니다. SaaS 계정 권한, repository permission, CI secret, IDE extension allowlist 정도를 관리하면 됐습니다. 하지만 AI 코딩 에이전트는 더 많은 경로에서 실행됩니다. VS Code extension, CLI agent host, GitHub web, mobile notification, PR review bot, Actions runner가 서로 이어집니다. 같은 사용자가 같은 조직 정책 아래 있어도 실행 위치가 다르면 남는 로그와 적용되는 설정이 달라질 수 있습니다.</p>
<p>문제는 이 drift입니다.</p>
<ul>
<li>웹에서는 정책이 적용되지만 로컬 CLI는 다른 model setting을 쓴다.</li>
<li>VS Code는 telemetry export가 켜졌지만 agent host process는 빠져 있다.</li>
<li>개발자가 <code>OTEL_*</code> 환경변수를 직접 설정해야 해서 collector가 제각각이다.</li>
<li>server-managed 설정은 로그인 계정에 따라 적용되지만 공유 장비나 로컬 파일이 우회 경로가 된다.</li>
<li>plugin marketplace allowlist가 IDE와 CLI에서 다르게 동작한다.</li>
</ul>
<p>GitHub의 7월 8일 발표는 이 문제를 직접 겨냥합니다. OTel export 설정을 enterprise-managed settings의 <code>telemetry</code> block으로 전달하고, VS Code Copilot Chat extension과 Copilot CLI agent host process에 적용한다고 설명합니다. 또 MDM과 file-based configuration으로 device-level managed settings를 배포해, 개발자가 어떻게 로그인하든 VS Code와 CLI에서 정책이 일관되게 적용되도록 하는 방향을 제시합니다.</p>
<h3 id="2-otel-export는-모든-것을-기록이-아니라-승인된-collector로-경로를-고정하는-문제다">2) OTel export는 &ldquo;모든 것을 기록&quot;이 아니라 승인된 collector로 경로를 고정하는 문제다</h3>
<p>OpenTelemetry export가 가능해지면 팀은 곧바로 많은 것을 보고 싶어 합니다. 모델 호출, tool execution, token, latency, error, retry, agent step 같은 데이터는 운영에 유용합니다. 하지만 개발 도구 telemetry는 코드, 파일 경로, prompt, tool result, repository context, 사용자 행동이 섞일 수 있습니다. 그래서 첫 질문은 &ldquo;무엇을 더 볼까&quot;가 아니라 <strong>어디로, 어떤 형태로, 얼마나 오래 보낼까</strong>여야 합니다.</p>
<p>실무 기준은 아래처럼 잡을 수 있습니다.</p>
<table>
  <thead>
      <tr>
          <th>항목</th>
          <th>기본 기준</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>collector</td>
          <td>조직 승인 OTel collector만 허용</td>
      </tr>
      <tr>
          <td>endpoint</td>
          <td>public arbitrary endpoint 금지, allowlist 기반</td>
      </tr>
      <tr>
          <td>headers</td>
          <td>secret 직접 저장 금지, device secret manager 또는 managed config 사용</td>
      </tr>
      <tr>
          <td>content</td>
          <td>prompt/file content 원문 기본 비수집</td>
      </tr>
      <tr>
          <td>sampling</td>
          <td>state-changing action, failure, permission use는 100% 보존 후보</td>
      </tr>
      <tr>
          <td>retention</td>
          <td>저위험 사용량 30일, 상태 변경 evidence 90~180일</td>
      </tr>
      <tr>
          <td>redaction</td>
          <td>path, email, token, raw prompt, tool result에 별도 policy 적용</td>
      </tr>
  </tbody>
</table>
<p>이 기준은 <a href="/posts/2026-07-01-opentelemetry-native-data-plane-trend/">OpenTelemetry Native Data Plane</a>에서 다룬 관측 데이터 플레인 기준과 같습니다. 차이는 데이터 생산자가 서버 애플리케이션이 아니라 개발자 도구라는 점입니다.</p>
<h3 id="3-managed-settings는-모델-선택보다-실행-경계-정책이다">3) Managed settings는 모델 선택보다 실행 경계 정책이다</h3>
<p>관리형 설정을 단순히 &ldquo;기본 모델을 무엇으로 할까&quot;로 보면 너무 좁습니다. GitHub 발표의 supported settings 예시는 <code>permissions.disableBypassPermissionsMode</code>, <code>model</code>, <code>enabledPlugins</code>, <code>extraKnownMarketplaces</code>, <code>strictKnownMarketplaces</code>, <code>telemetry.*</code> 같은 키를 포함합니다. 이 목록은 모델 품질보다 실행 경계를 먼저 떠올리게 합니다.</p>
<p>운영 관점에서 중요한 설정은 아래 네 그룹입니다.</p>
<ul>
<li>모델: 기본 모델, auto model selection 허용 여부, 고비용 모델 사용 제한</li>
<li>권한: bypass permission mode 차단, 외부 쓰기 승인, 브라우저 권한</li>
<li>공급망: enabled plugins, known marketplaces, custom registry allowlist</li>
<li>관측성: OTel endpoint, sampling, trace/export enablement, session data policy</li>
</ul>
<p>즉 managed settings는 생산성 설정이 아니라 <strong>개발자 도구 control plane</strong>입니다. 어떤 모델을 쓰는지보다, 에이전트가 어떤 도구를 호출할 수 있고 어떤 플러그인을 설치할 수 있으며 어떤 collector로 증거를 보낼지가 더 중요해집니다.</p>
<h3 id="4-endpoint-policy와-server-policy는-서로-대체재가-아니다">4) Endpoint policy와 server policy는 서로 대체재가 아니다</h3>
<p>server-managed 설정은 조직 계정과 repository 정책을 묶는 데 강합니다. 반면 MDM/file-based 설정은 장비와 로컬 실행 표면을 잡습니다. 둘은 경쟁 관계가 아니라 보완 관계입니다.</p>
<table>
  <thead>
      <tr>
          <th>정책 경로</th>
          <th>잘하는 일</th>
          <th>놓치기 쉬운 지점</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Server-managed</td>
          <td>계정, org, repo 기준 정책</td>
          <td>로컬 실행 drift, device trust</td>
      </tr>
      <tr>
          <td>MDM/Group Policy</td>
          <td>장비 기준 강제, 기업 표준 배포</td>
          <td>개인 장비, BYOD 예외</td>
      </tr>
      <tr>
          <td>File-based config</td>
          <td>빠른 배포, IaC 친화적</td>
          <td>파일 변조, 소유권/권한 관리</td>
      </tr>
      <tr>
          <td>CLI env vars</td>
          <td>실험과 로컬 override</td>
          <td>표준화와 감사에 약함</td>
      </tr>
  </tbody>
</table>
<p>기업 환경에서는 서버 정책과 endpoint 정책을 함께 둬야 합니다. 예를 들어 server-managed 설정으로 조직의 allowed model을 정하고, MDM으로 VS Code와 CLI가 같은 설정을 읽게 하며, OTel collector는 네트워크 egress policy로 한 번 더 제한하는 식입니다. 한 계층만 믿으면 우회가 아니라 &ldquo;구성 불일치&quot;만으로도 빈틈이 생깁니다.</p>
<h3 id="5-관측성은-개발자-감시가-아니라-실행-책임-분리여야-한다">5) 관측성은 개발자 감시가 아니라 실행 책임 분리여야 한다</h3>
<p>개발자 도구 telemetry는 민감합니다. 잘못 설계하면 감시 도구처럼 받아들여지고, 실제로 개인정보나 코드 조각을 과하게 모을 수 있습니다. 그래서 수집 목적을 명확히 해야 합니다.</p>
<p>좋은 목적:</p>
<ul>
<li>고위험 tool call과 권한 사용의 audit trail 확보</li>
<li>agent failure와 token/cost spike 분석</li>
<li>plugin/marketplace 정책 drift 감지</li>
<li>상태 변경 action의 evidence 보존</li>
<li>security incident 때 영향 경로 복원</li>
</ul>
<p>나쁜 목적:</p>
<ul>
<li>개인별 생산성 순위화</li>
<li>raw prompt와 파일 내용을 무기한 저장</li>
<li>모든 키 입력과 브라우저 행동을 수집</li>
<li>정책 목적 없이 &ldquo;나중에 쓸 수도 있으니&rdquo; 전량 저장</li>
</ul>
<p>이 경계가 없으면 Managed Dev-Tool Telemetry Plane은 신뢰를 잃습니다. 최소 수집, 목적 제한, retention, 접근 권한, 감사 로그를 같이 설계해야 합니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-ai-개발-도구-설정-inventory를-만든다">1) AI 개발 도구 설정 inventory를 만든다</h3>
<p>먼저 현재 팀의 실행 표면을 적습니다.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">dev_tool_surface</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">ide</span>:
</span></span><span style="display:flex;"><span>    - vscode_copilot
</span></span><span style="display:flex;"><span>    - jetbrains_plugin
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cli</span>:
</span></span><span style="display:flex;"><span>    - copilot_cli
</span></span><span style="display:flex;"><span>    - codex_cli
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">web</span>:
</span></span><span style="display:flex;"><span>    - github_copilot_agent
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">automation</span>:
</span></span><span style="display:flex;"><span>    - github_actions_agent_runner
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">policy_sources</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">server_managed</span>: <span style="color:#ff79c6">true</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">mdm</span>: partial
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">file_based_config</span>: <span style="color:#ff79c6">false</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">env_vars_allowed</span>: experimental_only
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">telemetry</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">approved_collector</span>: <span style="color:#f1fa8c">&#34;otel-collector.devtools.internal:4318&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">raw_prompt_storage</span>: <span style="color:#ff79c6">false</span>
</span></span></code></pre></div><p>이 inventory에서 가장 먼저 볼 것은 &ldquo;도구 수&quot;가 아니라 정책 출처의 불일치입니다. IDE는 관리되는데 CLI는 자유롭거나, CLI는 OTel을 내보내는데 extension은 빠져 있으면 운영 증거가 끊깁니다.</p>
<h3 id="2-telemetry-policy를-collector-중심으로-고정한다">2) telemetry policy를 collector 중심으로 고정한다</h3>
<p>개발자가 각자 <code>OTEL_EXPORTER_OTLP_ENDPOINT</code>를 설정하는 방식은 실험에는 괜찮지만 운영 표준으로는 약합니다. 팀 기준은 아래처럼 둡니다.</p>
<ul>
<li>approved collector는 1~2개로 제한</li>
<li>collector는 development, staging, production repo context를 분리 수집</li>
<li>raw prompt/content는 기본 비수집</li>
<li>tool call name, schema version, status, duration, error code는 수집</li>
<li>state-changing action은 <code>approval_id</code>, <code>repo</code>, <code>commit_sha</code>, <code>tool_call_id</code>를 포함</li>
<li>외부 전송, 파일 삭제, 배포, 권한 변경은 100% evidence 보존 후보</li>
</ul>
<p>초기 sampling은 과하게 복잡할 필요가 없습니다. 실패와 상태 변경은 전량, 단순 Q&amp;A와 코드 설명은 샘플링으로 시작하면 됩니다.</p>
<h3 id="3-managed-settings-rollout은-3단계로-나눈다">3) managed settings rollout은 3단계로 나눈다</h3>
<p>1단계는 관측 전용입니다. telemetry endpoint와 raw content 비수집, retention, redaction을 고정합니다.</p>
<p>2단계는 공급망입니다. enabled plugins, known marketplaces, strict marketplace policy를 정하고, custom marketplace는 owner review를 거치게 합니다.</p>
<p>3단계는 실행 권한입니다. bypass permission mode 차단, 고위험 tool 승인, production domain deny, model/cost limit을 붙입니다.</p>
<p>각 단계마다 canary 그룹을 둡니다. 예를 들어 개발자 10명 또는 repo 3개에서 1주일 운영하고, false block, missing telemetry, latency, complaint, policy drift를 봅니다. 조직 전체 강제는 drift가 보이지 않는다는 증거가 아니라 canary에서 문제가 낮다는 증거가 있을 때 진행합니다.</p>
<h3 id="4-drift-감지를-운영-지표로-둔다">4) drift 감지를 운영 지표로 둔다</h3>
<p>정책은 설정했다고 끝이 아닙니다. 로컬 파일, extension version, CLI version, MDM 적용 실패, 네트워크 우회, 개인 장비 때문에 drift가 생깁니다.</p>
<p>초기 지표:</p>
<ul>
<li>managed settings applied rate: 95% 이상</li>
<li>telemetry export success rate: 99% 이상</li>
<li>unknown collector endpoint: 0건 목표</li>
<li>unapproved plugin enabled: 0건 목표</li>
<li>bypass permission mode attempted: 주간 추세 확인</li>
<li>missing session evidence for state-changing action: 0건 목표</li>
<li>policy version lag: 7일 초과 장비 5% 미만</li>
</ul>
<p>이 지표는 사람을 혼내기 위한 것이 아니라 blind spot을 찾기 위한 것입니다. 특히 unknown collector와 missing evidence는 보안 이슈로 분류하는 편이 좋습니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<p>첫째, telemetry를 많이 모을수록 비용과 민감정보 위험이 커집니다. AI 개발 도구는 코드와 업무 맥락을 많이 다루므로 서버 metric보다 더 보수적으로 수집해야 합니다. 원문 저장은 기본값이 아니라 예외여야 합니다.</p>
<p>둘째, MDM과 managed settings를 강하게 걸면 개발자 경험이 나빠질 수 있습니다. 특히 실험 도구를 자주 바꾸는 플랫폼 팀은 별도 sandbox policy가 필요합니다. 다만 sandbox도 approved collector와 secret scanning은 예외로 빼지 않는 편이 안전합니다.</p>
<p>셋째, endpoint 정책만으로는 계정 권한을 대체할 수 없습니다. 장비가 관리돼도 GitHub org 권한, repository ruleset, CODEOWNERS, secret scope가 느슨하면 실행 경계는 여전히 약합니다. 반대로 서버 정책만 강해도 로컬 CLI drift가 남습니다.</p>
<p>넷째, 관측성 데이터를 개인 평가에 쓰기 시작하면 팀은 우회 경로를 찾습니다. 정책의 목적은 생산성 감시가 아니라 고위험 실행 증거와 비용·보안 통제라는 점을 명확히 해야 합니다.</p>
<p>의사결정 우선순위는 <strong>민감정보 최소화 &gt; 승인된 collector 고정 &gt; 실행 경계 강제 &gt; drift 감지 &gt; 사용량 최적화</strong>입니다. 더 많은 그래프보다 먼저 안전한 수집 경로가 필요합니다.</p>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> IDE, CLI, web agent, CI agent의 실행 표면 inventory가 있다.</li>
<li><input disabled="" type="checkbox"> server-managed, MDM, file-based config, env var 중 정책 출처가 정리돼 있다.</li>
<li><input disabled="" type="checkbox"> OTel export endpoint가 승인된 collector로 고정돼 있다.</li>
<li><input disabled="" type="checkbox"> raw prompt, file content, token, email, path 같은 민감 데이터 redaction 정책이 있다.</li>
<li><input disabled="" type="checkbox"> model, plugin, marketplace, bypass permission, telemetry 설정 drift를 볼 수 있다.</li>
<li><input disabled="" type="checkbox"> state-changing action에는 <code>tool_call_id</code>, <code>approval_id</code>, <code>repo</code>, <code>commit_sha</code>가 남는다.</li>
<li><input disabled="" type="checkbox"> unknown collector와 unapproved plugin은 알람으로 올라온다.</li>
<li><input disabled="" type="checkbox"> 개발자 개인 생산성 감시 목적으로 telemetry를 쓰지 않는다는 정책이 명시돼 있다.</li>
</ul>
<h3 id="연습">연습</h3>
<ol>
<li>현재 팀에서 쓰는 AI 개발 도구 3개를 골라 server policy와 endpoint policy가 각각 어디서 적용되는지 표로 정리해 보세요.</li>
<li>Copilot CLI나 유사 CLI 에이전트가 파일 수정과 PR 생성을 수행한다고 가정하고, 반드시 남겨야 할 OTel attribute 10개를 적어 보세요.</li>
<li>approved collector가 아닌 endpoint로 telemetry가 나가는 상황을 가정하고, 탐지·차단·예외 승인 절차를 5단계로 나눠 보세요.</li>
<li>raw prompt를 저장하지 않으면서도 사고 재현에 필요한 evidence를 남기려면 어떤 hash, schema version, tool result summary가 필요한지 설계해 보세요.</li>
</ol>
<h2 id="참고한-흐름">참고한 흐름</h2>
<ul>
<li>GitHub Changelog: Enterprise-managed OpenTelemetry export for VS Code and CLI - <a href="https://github.blog/changelog/2026-07-08-enterprise-managed-opentelemetry-export-for-vs-code-and-cli/">https://github.blog/changelog/2026-07-08-enterprise-managed-opentelemetry-export-for-vs-code-and-cli/</a></li>
<li>GitHub Changelog: Deploy managed Copilot settings via MDM in VS Code and CLI - <a href="https://github.blog/changelog/2026-07-08-deploy-managed-copilot-settings-via-mdm-in-vs-code-and-cli/">https://github.blog/changelog/2026-07-08-deploy-managed-copilot-settings-via-mdm-in-vs-code-and-cli/</a></li>
<li>Visual Studio Code Docs: Monitor agent usage with OpenTelemetry - <a href="https://code.visualstudio.com/docs/agents/guides/monitoring-agents">https://code.visualstudio.com/docs/agents/guides/monitoring-agents</a></li>
</ul>
]]></content:encoded></item></channel></rss>