<?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>Guardrails on jyukki's Blog</title><link>https://jyukki.com/tags/guardrails/</link><description>Recent content in Guardrails on jyukki's Blog</description><generator>Hugo -- 0.147.0</generator><language>ko-kr</language><lastBuildDate>Sun, 19 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jyukki.com/tags/guardrails/index.xml" rel="self" type="application/rss+xml"/><item><title>2026 개발 트렌드: Policy Shadow Rollout, 잘하는 팀은 에이전트 가드레일을 바로 강제하지 않고 shadow mode로 오탐과 누락을 같이 측정한다</title><link>https://jyukki.com/posts/2026-04-19-policy-shadow-rollout-agent-runtime-trend/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><guid>https://jyukki.com/posts/2026-04-19-policy-shadow-rollout-agent-runtime-trend/</guid><description>에이전트 정책을 바로 enforce하면 속도를 잃거나 오탐이 쌓이기 쉽습니다. 최근 팀들이 shadow mode와 단계적 rollout으로 가드레일 품질을 먼저 검증하는 이유를 정리합니다.</description><content:encoded><![CDATA[<p>에이전트 운영이 성숙할수록 새 정책을 만드는 일보다 <strong>새 정책을 어떻게 안전하게 배포할지</strong>가 더 어려워집니다. 툴 권한을 조이고 싶고, 외부 전송 전 검사를 넣고 싶고, 위험한 파일 수정은 더 빨리 승격시키고 싶지만, 규칙을 바로 강제하면 오탐 때문에 현업이 멈추기 쉽습니다. 반대로 느슨하게 두면 사고가 난 뒤에야 &ldquo;이 규칙을 미리 켰어야 했다&quot;는 얘기가 나옵니다. 그래서 최근 팀들은 policy를 feature flag처럼 다루기 시작했습니다. 만들자마자 enforce하지 않고, 먼저 <strong>shadow mode에서 실제 트래픽에 대입해 보는 방식</strong>입니다.</p>
<p>저는 이 흐름을 <code>Policy Shadow Rollout</code>이라고 보는 편이 가장 정확하다고 생각합니다. 새 guardrail이 실제로는 무엇을 막았을지, 무엇을 놓쳤을지, 누구에게 불필요한 friction을 만들었을지를 <strong>counterfactual verdict</strong>로 먼저 쌓는 구조입니다. 이 방향은 <a href="/posts/2026-04-04-schema-constrained-output-runtime-validator-trend/">Schema Constrained Output + Runtime Validator</a>가 만든 accept, repair, escalate 경계, <a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a>의 권한 선언, <a href="/posts/2026-04-15-change-intelligence-control-plane-trend/">Change Intelligence Control Plane</a>의 위험도 판단, <a href="/posts/2026-04-18-escalation-policy-ladder-agent-runtime-trend/">Escalation Policy Ladder</a>의 단계 승격과 자연스럽게 이어집니다. 이제 중요한 것은 &ldquo;정책을 더 추가할까&quot;가 아니라 <strong>정책을 어떤 순서로 현실에 올릴까</strong>입니다.</p>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>Policy Shadow Rollout이 왜 단순 feature flag나 dry-run 로그와 다른지 이해할 수 있습니다.</li>
<li>새 guardrail을 <code>shadow → warn → partial enforce → full enforce</code>로 올릴 때 어떤 숫자 기준을 써야 하는지 가져갈 수 있습니다.</li>
<li>false positive만이 아니라 missed high-risk block까지 같이 보지 않으면 왜 정책 품질이 왜곡되는지 설명할 수 있습니다.</li>
<li>execution receipt와 escalation 체계를 붙여 shadow verdict를 실무 의사결정으로 연결하는 방법을 잡을 수 있습니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-지금-병목은-정책-부족보다-정책-배포-방식-미성숙이다">1) 지금 병목은 &ldquo;정책 부족&quot;보다 &ldquo;정책 배포 방식 미성숙&quot;이다</h3>
<p>대부분 팀은 정책을 만들 때는 진지하지만, 배포할 때는 이분법으로 갑니다. 끄거나 켜거나, 허용하거나 차단하거나 둘 중 하나입니다. 그런데 에이전트 런타임에서는 이 방식이 잘 안 맞습니다. 같은 규칙이라도 문서 초안 작업에서는 과잉 차단이 될 수 있고, 운영 변경 작업에서는 오히려 늦게 막는 문제가 생길 수 있기 때문입니다.</p>
<p>그래서 shadow rollout은 규칙의 품질을 먼저 검증합니다. 핵심 질문은 아래 세 가지입니다.</p>
<ol>
<li>이 정책이 실제 트래픽에서 얼마나 자주 발동하는가</li>
<li>그 발동 중 몇 %가 쓸데없는 오탐인가</li>
<li>아직 enforce하지 않았기 때문에 놓치고 있는 high-risk 케이스가 있는가</li>
</ol>
<p>중요한 점은 <strong>정책 없는 자유 상태와, 나쁜 정책으로 인한 마찰 상태 둘 다 비용</strong>이라는 사실입니다. 성숙한 팀은 둘 중 하나를 감으로 고르지 않고 shadow 데이터를 쌓아 비교합니다.</p>
<h3 id="2-shadow-mode의-핵심은-로그-남기기가-아니라-counterfactual-verdict를-구조화하는-것이다">2) shadow mode의 핵심은 &ldquo;로그 남기기&quot;가 아니라 counterfactual verdict를 구조화하는 것이다</h3>
<p>단순 shadow logging은 &ldquo;이 규칙이 발동했음&rdquo; 정도에서 끝나기 쉽습니다. 하지만 실무에 필요한 것은 그보다 더 구조화된 기록입니다.</p>
<ul>
<li>어떤 입력과 실행 문맥에서 발동했는가</li>
<li>실제 실행 결과는 무엇이었는가</li>
<li>shadow 정책이 권장한 행동은 allow, repair, escalate, block 중 무엇이었는가</li>
<li>사람 리뷰 기준으로 그 판정이 맞았는가</li>
<li>같은 조건이 반복되면 어떤 계층으로 자동 승격할 것인가</li>
</ul>
<p>이 정보가 있어야 shadow mode가 단순 통계가 아니라 운영 의사결정 도구가 됩니다. 그래서 <a href="/posts/2026-04-14-execution-receipt-agent-operations-trend/">Execution Receipt</a>와 붙는 순간 가치가 커집니다. receipt가 없으면 shadow verdict가 남아도, 실제로 무슨 툴이 실행됐고 어떤 범위까지 갔는지 연결할 수 없습니다.</p>
<h3 id="3-좋은-shadow-rollout은-false-positive만-줄이지-않고-missed-block도-같이-본다">3) 좋은 shadow rollout은 false positive만 줄이지 않고 missed block도 같이 본다</h3>
<p>많은 팀이 오탐을 싫어하다 보니 shadow 실험의 성공 조건을 <code>false positive rate 감소</code> 하나로만 잡습니다. 그런데 이렇게 하면 위험한 작업을 놓치는 정책이 오히려 &ldquo;조용해서 좋은 정책&quot;처럼 보일 수 있습니다. 그래서 최소한 아래 네 지표를 같이 봐야 합니다.</p>
<ul>
<li><code>false_positive_rate</code>: 막지 말아야 할 작업을 막으려 한 비율</li>
<li><code>missed_high_risk_rate</code>: 막았어야 할 high-risk 작업을 놓친 비율</li>
<li><code>shadow_coverage</code>: 실제 고위험 작업 중 shadow verdict가 붙은 비율</li>
<li><code>explainability_coverage</code>: 왜 그렇게 판정했는지 사람이 읽을 수 있는 근거가 붙은 비율</li>
</ul>
<p>권장 출발 기준은 아래 정도가 실전적입니다.</p>
<ul>
<li>high-risk 작업 shadow coverage <strong>95% 이상</strong></li>
<li>explainability coverage <strong>90% 이상</strong></li>
<li>false positive rate <strong>5% 미만</strong></li>
<li>missed high-risk rate <strong>1% 미만</strong></li>
<li>rollback 또는 disable 결정 시간 <strong>15분 이내</strong></li>
</ul>
<p>핵심은 차단 건수를 늘리는 것이 아니라, <strong>놓치면 안 되는 것을 거의 안 놓치면서 현업 마찰은 감당 가능한 수준으로 유지하는 것</strong>입니다.</p>
<h3 id="4-rollout-단계는-최소-4단으로-나누는-편이-안전하다">4) rollout 단계는 최소 4단으로 나누는 편이 안전하다</h3>
<p>실무에서는 아래 4단이 가장 다루기 쉽습니다.</p>
<ol>
<li><strong>Shadow</strong>: 실제 실행에는 개입하지 않고 verdict와 근거만 수집</li>
<li><strong>Warn</strong>: 사용자나 리뷰어에게 경고만 보여 주고 실행은 계속 허용</li>
<li><strong>Partial Enforce</strong>: 특정 작업군, 특정 팀, 특정 리스크 클래스에만 강제</li>
<li><strong>Full Enforce</strong>: 전면 강제, 단 예외와 rollback 경로 유지</li>
</ol>
<p>이때 단계 승격 기준은 정책의 &ldquo;정확도 느낌&quot;이 아니라 <strong>작업군별 위험도와 증거 충족률</strong>로 정하는 편이 낫습니다. 예를 들어 외부 전송 정책은 문서 초안보다 먼저 enforce할 수 있고, 삭제 정책은 low-risk 리포지토리보다 production 경로에서 먼저 shadow coverage를 높여야 합니다. 이 구조는 <a href="/posts/2026-04-13-capability-lease-expiring-agent-permissions-trend/">Capability Lease</a>와도 잘 맞습니다. 정책을 전역으로 켜기보다, lease 범위 안에서 점진적으로 강제할 수 있기 때문입니다.</p>
<h3 id="5-결국-중요한-것은-정책-배포의-observability다">5) 결국 중요한 것은 &ldquo;정책 배포의 observability&quot;다</h3>
<p>Policy Shadow Rollout이 뜨는 이유는 에이전트 정책도 이제 소프트웨어 배포처럼 다뤄야 하기 때문입니다. 어떤 규칙이 언제 추가됐고, 어떤 팀에 먼저 적용됐고, 오탐이 어디서 늘었고, 어떤 런타임 업데이트 뒤에 판정이 흔들렸는지를 추적해야 합니다.</p>
<p>그래서 좋은 팀은 아래 연결을 같이 설계합니다.</p>
<ul>
<li>policy version</li>
<li>shadow verdict</li>
<li>execution receipt</li>
<li>escalation result</li>
<li>reviewer feedback</li>
<li>rollback event</li>
</ul>
<p>이 중 하나라도 빠지면 정책은 남는데 운영 지식이 안 쌓입니다. 특히 모델 버전이나 툴 체인이 바뀐 뒤 shadow 성능이 흔들리는지 보는 일은 중요합니다. 같은 규칙이어도 입력 구조가 바뀌면 false positive 패턴이 달라질 수 있기 때문입니다.</p>
<h3 id="6-운영-리뷰는-주간-scorecard-한-장으로-닫히는-편이-좋다">6) 운영 리뷰는 &ldquo;주간 scorecard 한 장&quot;으로 닫히는 편이 좋다</h3>
<p>shadow rollout이 길어질수록 흔히 생기는 문제가 있습니다. 데이터는 여러 대시보드에 흩어져 있고, 회의 때는 각 팀이 자기에게 편한 숫자만 가져오는 상황입니다. 이렇게 되면 false positive를 줄인 팀과 missed block을 줄인 팀이 서로 다른 성공을 주장하게 되고, 결국 정책을 올릴지 말지 합의가 느려집니다.</p>
<p>그래서 저는 주간 운영 리뷰를 <strong>한 장짜리 scorecard</strong>로 닫는 방식이 가장 실전적이라고 봅니다. 최소한 아래 다섯 줄은 같은 표에서 봐야 합니다.</p>
<ul>
<li>정책 버전과 대상 작업군</li>
<li>shadow coverage, false positive rate, missed high-risk rate</li>
<li>explainability coverage와 reviewer override 비율</li>
<li>warn 또는 partial enforce 이후 friction 증가 여부</li>
<li>rollback rehearsal 결과와 owner 확인 상태</li>
</ul>
<p>이 다섯 줄을 한 화면에서 보면, 어떤 정책이 &ldquo;정확해 보이지만 아직 설명 가능성이 부족한지&rdquo;, 어떤 정책이 &ldquo;조용하지만 사실 놓치는 비율이 높은지&quot;가 빨리 드러납니다. 여기에 <a href="/posts/2026-04-12-action-lineage-agent-observability-graph-trend/">Action Lineage</a> 같은 실행 추적을 붙이면 policy change와 downstream incident를 더 쉽게 묶을 수 있고, <a href="/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/">Test Evidence Pipeline</a>처럼 변경 근거를 증거 패킷으로 묶는 구조와도 잘 맞습니다.</p>
<p>중요한 점은 scorecard가 예쁜 보고서가 아니라 <strong>승격 결정을 빠르게 내리기 위한 운영 인터페이스</strong>여야 한다는 것입니다. 리뷰 회의가 끝났을 때 &ldquo;다음 주에도 더 보자&quot;가 아니라, warn으로 올릴지, partial enforce로 올릴지, 아니면 rollback 준비 상태부터 채울지를 바로 정할 수 있어야 합니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-의사결정-기준숫자조건우선순위">1) 의사결정 기준(숫자·조건·우선순위)</h3>
<p>정책 rollout 순서는 아래 우선순위가 안전합니다.</p>
<p><strong>1순위, high-risk 작업부터 shadow coverage 확보</strong></p>
<ul>
<li>외부 전송, 배포, 권한 변경, 삭제, 고객 데이터 접근</li>
<li>이 영역은 먼저 shadow verdict를 95% 이상 붙이는 것이 중요합니다.</li>
</ul>
<p><strong>2순위, explainability 확보</strong></p>
<ul>
<li>reviewer가 30초 안에 판정 근거를 읽을 수 있어야 합니다.</li>
<li>explainability coverage가 90% 미만이면 warn 이상으로 올리지 않는 편이 낫습니다.</li>
</ul>
<p><strong>3순위, missed high-risk rate 축소</strong></p>
<ul>
<li>missed high-risk가 1%를 넘으면 false positive를 조금 희생하더라도 먼저 보강합니다.</li>
</ul>
<p><strong>4순위, false positive 최적화</strong></p>
<ul>
<li>warn 단계에서 5% 미만, partial enforce에서 3% 미만 정도를 목표로 조정합니다.</li>
</ul>
<p>추천 정책 게이트 예시는 아래처럼 시작할 수 있습니다.</p>
<ul>
<li>Shadow → Warn: coverage 90% 이상, explainability 85% 이상</li>
<li>Warn → Partial Enforce: false positive &lt; 5%, missed high-risk &lt; 1%</li>
<li>Partial → Full Enforce: 2주 연속 안정, rollback 없이 운영 가능</li>
</ul>
<h3 id="2-4주-도입-순서">2) 4주 도입 순서</h3>
<p><strong>1주차: 상위 3개 고위험 정책만 shadow로 붙인다</strong><br>
욕심내서 20개 정책을 한 번에 shadow로 넣지 않는 편이 낫습니다. 먼저 외부 전송, 권한 변경, 삭제 정도만 잡습니다.</p>
<p><strong>2주차: receipt와 reviewer feedback를 연결한다</strong><br>
shadow verdict만 쌓지 말고, 실제 결과와 사람 판정을 붙여 오탐과 누락을 분류합니다.</p>
<p><strong>3주차: warn 단계로 올리고 friction 구간을 찾는다</strong><br>
어떤 팀, 어떤 작업군, 어떤 툴에서 경고가 과도하게 뜨는지 봅니다.</p>
<p><strong>4주차: partial enforce + rollback 훈련</strong><br>
한 작업군이나 한 팀부터 강제 적용하고, 15분 안에 정책을 끌 수 있는지 실제로 연습합니다.</p>
<h3 id="3-운영-테이블-예시">3) 운영 테이블 예시</h3>
<table>
  <thead>
      <tr>
          <th>정책 유형</th>
          <th>Shadow 진입 조건</th>
          <th>Warn/Enforce 기준</th>
          <th>주의점</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>외부 전송</td>
          <td>receipt 연결 가능, 대상 식별 가능</td>
          <td>missed high-risk 1% 미만이면 warn 우선</td>
          <td>사람 승인 경계와 섞지 말 것</td>
      </tr>
      <tr>
          <td>삭제/권한 변경</td>
          <td>변경 범위 추적 가능</td>
          <td>partial enforce부터 시작</td>
          <td>복구 난이도 큰 작업은 더 보수적으로</td>
      </tr>
      <tr>
          <td>민감 문맥 접근</td>
          <td>sensitivity 태그 일관성 확보</td>
          <td>explainability 90% 이상 후 warn</td>
          <td>context classification 품질이 낮으면 오탐 급증</td>
      </tr>
      <tr>
          <td>코드 수정 범위 정책</td>
          <td>diff/테스트 evidence 확보</td>
          <td>false positive 5% 미만 후 partial</td>
          <td>언어/저장소별 편차가 큼</td>
      </tr>
  </tbody>
</table>
<p>이 표에서 핵심은 정책별로 같은 rollout 속도를 강요하지 않는 것입니다. 민감 문맥 정책과 코드 수정 범위 정책은 전혀 다른 데이터 품질 문제를 가지기 때문입니다.</p>
<h3 id="4-shadow-verdict를-escalation과-연결하는-방식">4) Shadow verdict를 escalation과 연결하는 방식</h3>
<p>정책은 차단만 잘해도 끝나는 것이 아닙니다. 어떤 경우는 block보다 escalate가 더 맞습니다. 예를 들어 위험하지만 합법적일 수 있는 작업은 바로 차단하기보다 <a href="/posts/2026-04-18-escalation-policy-ladder-agent-runtime-trend/">Escalation Policy Ladder</a>로 올리는 편이 더 현실적입니다. 그래서 shadow verdict는 보통 아래 네 갈래를 가져가는 편이 좋습니다.</p>
<ul>
<li>allow</li>
<li>repair</li>
<li>escalate</li>
<li>block</li>
</ul>
<p>이 구조를 쓰면 오탐을 줄이기 위해 모든 것을 allow로 두는 극단도, 위험하다는 이유로 전부 block하는 극단도 피하기 쉽습니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<p>첫째, shadow mode를 오래 끌면 데이터는 예쁘게 쌓이는데 실제 위험은 계속 노출될 수 있습니다. high-risk 정책은 shadow를 길게 끌기보다 warn과 partial enforce로 빨리 올릴 기준을 같이 잡아야 합니다.</p>
<p>둘째, explainability 없는 shadow는 숫자만 남기고 신뢰를 잃습니다. 리뷰어가 이유를 이해할 수 없으면 false positive 조정이 늦어집니다.</p>
<p>셋째, rollout을 전역 기준 하나로 통일하면 팀별 편차를 놓칩니다. 저장소 유형, 작업군, 민감도에 따라 따로 봐야 합니다.</p>
<p>넷째, receipt 없이 policy만 남기면 &ldquo;왜 막았는지&quot;보다 &ldquo;그냥 막혔다&quot;만 남습니다. 운영 피로가 급격히 올라갑니다.</p>
<p>다섯째, rollback 훈련 없이 full enforce로 가면 첫 번째 대형 오탐에서 정책 전체에 대한 반감이 생길 수 있습니다.</p>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> 새 정책은 기본적으로 shadow부터 시작한다.</li>
<li><input disabled="" type="checkbox"> shadow verdict에 근거와 실제 실행 결과가 같이 남는다.</li>
<li><input disabled="" type="checkbox"> false positive와 missed high-risk를 분리 측정한다.</li>
<li><input disabled="" type="checkbox"> shadow, warn, partial enforce, full enforce 단계 기준이 문서화돼 있다.</li>
<li><input disabled="" type="checkbox"> 15분 이내 rollback 또는 disable 경로가 준비돼 있다.</li>
<li><input disabled="" type="checkbox"> block이 아닌 escalate가 더 적합한 정책을 별도로 분리했다.</li>
</ul>
<h3 id="연습-과제">연습 과제</h3>
<ol>
<li>현재 운영 중인 가드레일 3개를 골라 <code>shadow coverage / false positive / missed high-risk / explainability</code> 네 지표로 다시 평가해 보세요.</li>
<li>외부 전송이나 삭제처럼 복구 비용이 큰 작업군 하나를 골라, shadow에서 partial enforce로 올리는 기준을 숫자로 적어 보세요.</li>
<li>최근 오탐 사례 5개를 모아, 원인이 규칙 자체였는지 입력 분류 품질이 낮았는지 execution receipt 부족이었는지 나눠 보세요.</li>
</ol>
<h2 id="관련-글">관련 글</h2>
<ul>
<li><a href="/posts/2026-04-04-schema-constrained-output-runtime-validator-trend/">Schema Constrained Output + Runtime Validator</a></li>
<li><a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a></li>
<li><a href="/posts/2026-04-14-execution-receipt-agent-operations-trend/">Execution Receipt</a></li>
<li><a href="/posts/2026-04-15-change-intelligence-control-plane-trend/">Change Intelligence Control Plane</a></li>
<li><a href="/posts/2026-04-18-escalation-policy-ladder-agent-runtime-trend/">Escalation Policy Ladder</a></li>
<li><a href="/posts/2026-04-13-capability-lease-expiring-agent-permissions-trend/">Capability Lease</a></li>
</ul>
]]></content:encoded></item></channel></rss>