<?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>Harness Engineering on jyukki's Blog</title><link>https://jyukki.com/tags/harness-engineering/</link><description>Recent content in Harness Engineering on jyukki's Blog</description><generator>Hugo -- 0.147.0</generator><language>ko-kr</language><lastBuildDate>Sat, 11 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jyukki.com/tags/harness-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>2026 개발 트렌드: Stateful Sandbox Snapshot, 에이전트 개발은 '다시 재현 가능한 작업공간'으로 이동한다</title><link>https://jyukki.com/posts/2026-04-11-stateful-sandbox-snapshot-environment-replay-trend/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://jyukki.com/posts/2026-04-11-stateful-sandbox-snapshot-environment-replay-trend/</guid><description>좋은 팀들은 에이전트가 한 번 잘 푸는 것보다, 같은 작업공간을 1분 안에 다시 살리고 검증하는 능력에 투자하고 있습니다. 상태 있는 샌드박스 스냅샷과 환경 재현이 왜 새 운영 기준이 되는지 정리합니다.</description><content:encoded><![CDATA[<p>AI 코딩 에이전트를 팀 단위로 굴려 보면 의외로 자주 막히는 지점이 있습니다. 모델이 답을 못 내는 순간보다, <strong>방금 되던 작업공간이 30분 뒤에는 다시 안 되는 순간</strong>입니다. 패키지 버전이 달라졌고, 임시 파일이 사라졌고, 캐시가 깨졌고, 어느 세션에서는 통과하던 테스트가 다른 세션에서는 실패합니다. 이쯤 되면 문제는 모델 품질보다 환경 재현성에 가깝습니다.</p>
<p>그래서 최근 개발팀의 관심이 &ldquo;에이전트에게 더 긴 컨텍스트를 줄까&quot;에서 한 단계 더 넘어가고 있습니다. 이제는 <strong>작업이 성공한 상태의 샌드박스를 얼마나 빠르게 다시 꺼내고, 다른 사람과 검증 가능한 형태로 넘길 수 있는가</strong>가 더 중요한 경쟁 포인트가 되고 있습니다. 저는 이 흐름을 <code>Stateful Sandbox Snapshot + Environment Replay</code>라고 보는 편이 맞다고 생각합니다.</p>
<p>핵심은 세션을 오래 붙잡는 것이 아닙니다. 오히려 반대입니다. <strong>언제든 버리고, 1분 안에 다시 살릴 수 있는 작업공간</strong>을 만드는 쪽이 더 강합니다. 이 관점은 최근의 <a href="/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/">Harness Engineering</a>, <a href="/posts/2026-03-31-deterministic-replay-flight-recorder-trend/">Deterministic Replay + Flight Recorder</a>, <a href="/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/">Test Evidence Pipeline</a> 흐름과 자연스럽게 이어집니다.</p>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>왜 에이전트 운영에서 세션 지속성보다 샌드박스 재현성이 더 중요한지 이해할 수 있습니다.</li>
<li>sandbox snapshot을 단순 파일 백업이 아니라 실행 가능한 작업 단위로 설계하려면 무엇을 포함해야 하는지 기준을 잡을 수 있습니다.</li>
<li>restore 시간, replay 성공률, 환경 드리프트 허용치 같은 실무 숫자를 바로 운영 기준으로 가져갈 수 있습니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-에이전트-품질은-답변-정확도보다-같은-조건-재현에서-먼저-무너진다">1) 에이전트 품질은 답변 정확도보다 &ldquo;같은 조건 재현&quot;에서 먼저 무너진다</h3>
<p>한 번 성공한 작업이 다음 시도에서 바로 재현되지 않으면 팀은 두 가지 비용을 동시에 냅니다. 첫째, 사람은 무엇이 바뀌었는지 다시 추적해야 합니다. 둘째, 에이전트는 원인과 무관한 재시도를 반복합니다. 이때 드는 비용은 단순 토큰 비용이 아니라 <strong>리뷰 지연, 디버깅 중복, 신뢰 하락</strong>입니다.</p>
<p>실무에서 흔한 실패 패턴은 아래와 같습니다.</p>
<ul>
<li>세션 A에서는 설치된 의존성이 세션 B에는 없다.</li>
<li>로컬 캐시나 생성 산출물에 기대던 테스트가 새 샌드박스에서는 깨진다.</li>
<li>권한, 환경 변수, feature flag 상태가 기록되지 않아 동일 재현이 안 된다.</li>
<li>작업 도중 만든 임시 인덱스, fixture, 데이터 snapshot이 사라져 후속 검증이 막힌다.</li>
</ul>
<p>이 때문에 최근 팀들은 &ldquo;에이전트가 잘 풀었는가&quot;보다 <strong>그 상태를 다른 실행자도 다시 불러와 검증할 수 있는가</strong>를 먼저 보기 시작했습니다. 이 관점은 <a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a>과도 맞닿아 있습니다. 재현 가능한 환경이 되려면 파일 상태뿐 아니라 실행 권한과 도구 조건도 같이 남아야 하기 때문입니다.</p>
<h3 id="2-좋은-sandbox-snapshot은-파일-시스템-덤프가-아니라-작업-계약이다">2) 좋은 sandbox snapshot은 파일 시스템 덤프가 아니라 &ldquo;작업 계약&quot;이다</h3>
<p>샌드박스 스냅샷을 단순 압축 파일 정도로 생각하면 금방 한계가 옵니다. 실무에서 필요한 건 아래 요소가 묶인 <strong>재실행 계약</strong>에 가깝습니다.</p>
<ol>
<li><strong>workspace state</strong>: 수정 파일, 생성 산출물, 필요한 fixture</li>
<li><strong>dependency state</strong>: 패키지 버전, lockfile, 설치 방식, 빌드 캐시 힌트</li>
<li><strong>execution state</strong>: 실행한 명령, 통과/실패한 검증, 중간 결과물</li>
<li><strong>capability state</strong>: 쓰기 가능 경로, 외부 호출 허용 여부, 권한 티어</li>
<li><strong>replay hints</strong>: 어떤 순서로 복원하고 무엇을 먼저 검증해야 하는지</li>
</ol>
<p>즉 snapshot은 &ldquo;이 폴더를 복사해 둠&quot;이 아니라, <strong>이 상태를 같은 조건으로 다시 실행할 수 있다는 계약 묶음</strong>이어야 합니다. 그래서 <a href="/posts/2026-04-04-schema-constrained-output-runtime-validator-trend/">Schema-Constrained Output + Runtime Validator</a>가 중요합니다. 스냅샷 메타데이터가 자유 서술이면 결국 사람이 다시 읽어 해석해야 하고, 그 순간 재현성이 떨어집니다.</p>
<h3 id="3-세션을-오래-살리는-전략보다-빨리-복원하는-전략이-더-운영-친화적이다">3) 세션을 오래 살리는 전략보다, 빨리 복원하는 전략이 더 운영 친화적이다</h3>
<p>처음에는 누구나 persistent session 쪽으로 기울기 쉽습니다. 방금까지 맥락을 알고 있으니 편해 보이기 때문입니다. 그런데 팀 규모가 커질수록 persistent session은 다른 비용을 부릅니다.</p>
<ul>
<li>상태가 쌓일수록 왜 성공하는지 설명이 어려워진다.</li>
<li>누가 어떤 임시 조치를 했는지 추적이 어려워진다.</li>
<li>세션 내부 캐시와 실제 저장소 상태가 어긋난다.</li>
<li>실패 시 초기화보다 정리가 더 오래 걸린다.</li>
</ul>
<p>그래서 좋은 팀은 세션 수명을 늘리는 대신, 아래 기준을 먼저 맞춥니다.</p>
<ul>
<li>cold restore 60초 이내</li>
<li>snapshot 생성 30초 이내</li>
<li>replay 성공률 85% 이상</li>
<li>환경 드리프트 허용치 24시간 이하</li>
<li>민감 정보 포함 스냅샷 비율 0%</li>
</ul>
<p>이 숫자가 맞춰지면 세션이 죽는 것 자체는 큰 문제가 아닙니다. 오히려 <strong>죽어도 금방 복구되는 구조</strong>가 온콜과 협업에 더 유리합니다.</p>
<h3 id="4-snapshot이-가치-있으려면-검증-시점이-같이-기록돼야-한다">4) snapshot이 가치 있으려면 &ldquo;검증 시점&quot;이 같이 기록돼야 한다</h3>
<p>작업공간만 복사해 두고, 그 상태가 마지막으로 언제 검증됐는지 모르면 실무 가치는 크게 떨어집니다. 예를 들어 테스트가 통과한 커밋과 파일 상태가 어긋나거나, 스냅샷 당시엔 유효하던 캐시가 이미 낡았는데도 그대로 복원하면 잘못된 신뢰를 줄 수 있습니다.</p>
<p>그래서 snapshot에는 최소한 아래 메타데이터가 같이 있어야 합니다.</p>
<ul>
<li>마지막 검증 시각과 통과한 검증 목록</li>
<li>기준 commit SHA 또는 content hash</li>
<li>사용한 런타임 버전과 패키지 lock 기준</li>
<li>외부 의존 서비스 상태 또는 mock 여부</li>
<li>복원 후 반드시 다시 확인해야 할 smoke check</li>
</ul>
<p>이 지점에서 <a href="/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/">Test Evidence Pipeline</a>이 연결됩니다. 좋은 팀은 snapshot을 &ldquo;작업 이어하기&rdquo; 용도로만 보지 않고, <strong>검증 가능한 변경 증거를 재현하는 매체</strong>로 같이 봅니다.</p>
<h3 id="5-상태-있는-샌드박스가-강해질수록-비밀과-권한-분리는-더-엄격해져야-한다">5) 상태 있는 샌드박스가 강해질수록, 비밀과 권한 분리는 더 엄격해져야 한다</h3>
<p>여기서 가장 위험한 착각은 &ldquo;재현 가능해야 하니 다 저장하자&quot;입니다. 그렇게 가면 얼마 안 가서 비밀값, 토큰, 민감 로그까지 스냅샷에 섞입니다. 이건 운영 편의보다 위험이 훨씬 큽니다.</p>
<p>실무 원칙은 단순합니다.</p>
<ul>
<li>비밀값 원문은 snapshot에 저장하지 않는다.</li>
<li>secret reference와 mount 규칙만 저장한다.</li>
<li>외부 자격 증명은 replay 시 재주입한다.</li>
<li>스냅샷 공유 범위는 작업 등급에 따라 분리한다.</li>
<li>민감 경로가 touched되면 기본 공유가 아니라 승인 게이트로 넘긴다.</li>
</ul>
<p>즉 stateful sandbox는 상태를 다 보존하는 기술이 아니라, <strong>보존해도 되는 상태와 재주입해야 하는 상태를 구분하는 기술</strong>에 가깝습니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-최소-sandbox-snapshot-스펙">1) 최소 sandbox snapshot 스펙</h3>
<p>처음부터 거대한 플랫폼을 만들 필요는 없습니다. 아래 7개 항목만 고정해도 체감 차이가 큽니다.</p>
<ul>
<li><code>workspace_hash</code>: 복원 기준 파일 상태</li>
<li><code>base_commit</code>: 저장소 기준점</li>
<li><code>dependency_lock</code>: lockfile 또는 의존성 해시</li>
<li><code>commands_executed</code>: 핵심 명령 5~20개</li>
<li><code>validation_status</code>: 마지막 검증 결과</li>
<li><code>capability_profile</code>: 쓰기/네트워크/비밀 접근 권한</li>
<li><code>replay_checklist</code>: 복원 후 3단계 smoke check</li>
</ul>
<p>이 정도만 있어도 &ldquo;이 상태가 왜 유효한가&quot;를 다시 설명하기 쉬워집니다.</p>
<h3 id="2-의사결정-기준숫자조건우선순위">2) 의사결정 기준(숫자·조건·우선순위)</h3>
<p>권장 우선순위는 <strong>재현성 &gt; 비밀 분리 &gt; 검증 가능성 &gt; 복원 속도 &gt; 저장 비용</strong> 입니다.</p>
<p>운영 기준 예시는 아래 정도로 시작하면 현실적입니다.</p>
<ul>
<li><code>restore_time_p95</code>: 60초 이내</li>
<li><code>snapshot_create_time_p95</code>: 30초 이내</li>
<li><code>replay_success_rate</code>: 85% 이상</li>
<li><code>stale_snapshot_rate</code>: 15% 미만</li>
<li><code>secret_leak_incidents</code>: 0건</li>
<li><code>manual_reconstruction_rate</code>: 10% 미만</li>
<li><code>post_restore_smoke_pass_rate</code>: 90% 이상</li>
</ul>
<p>자동 게이트 예시:</p>
<ul>
<li>검증 기록 없는 snapshot은 handoff 금지</li>
<li>민감 경로 포함 + capability profile 누락이면 공유 차단</li>
<li>24시간 이상 지난 snapshot은 restore 가능하더라도 재검증 필수</li>
<li>replay 2회 연속 실패 시 세션 연장보다 환경 정의 갱신을 우선</li>
</ul>
<h3 id="3-어떤-작업부터-도입하면-효과가-큰가">3) 어떤 작업부터 도입하면 효과가 큰가</h3>
<p>특히 아래 작업에서 효과가 큽니다.</p>
<p><strong>코드 리뷰 전 handoff</strong><br>
에이전트가 만든 변경을 다른 리뷰어나 다른 실행 환경에서 바로 재현해야 할 때</p>
<p><strong>장애 분석/버그 재현</strong><br>
실패한 상태를 다시 열어 원인을 좁혀야 할 때</p>
<p><strong>장시간 작업 분할</strong><br>
하루짜리 작업을 여러 세션과 사람 사이에 넘겨야 할 때</p>
<p><strong>정책 검증 재실행</strong><br>
같은 변경을 다른 권한 티어에서 다시 검증해야 할 때</p>
<p>반대로 5분짜리 read-only 조사, 단순 요약, 임시 메모 생성 같은 작업에는 과할 수 있습니다.</p>
<h3 id="4-4주-도입-플랜">4) 4주 도입 플랜</h3>
<p><strong>1주차: 재현 실패 원인 분류</strong><br>
최근 에이전트 작업 20건에서 실패 원인이 코드 자체인지 환경 드리프트인지 나눕니다.</p>
<p><strong>2주차: 최소 snapshot 메타데이터 고정</strong><br>
workspace hash, base commit, dependency lock, validation status를 필수화합니다.</p>
<p><strong>3주차: restore + smoke check 자동화</strong><br>
복원 후 1분 안에 실행되는 smoke check를 붙입니다.</p>
<p><strong>4주차: handoff 정책과 보존 주기 정의</strong><br>
민감 작업, 일반 작업, 장기 작업별 공유 범위와 TTL을 나눕니다.</p>
<p>이 순서가 좋은 이유는 처음부터 스토리지 최적화나 증분 스냅샷에 매달리지 않고, <strong>재현 가능한 최소 단위</strong>를 먼저 만들 수 있기 때문입니다.</p>
<h3 id="5-운영-대시보드는-세션-수보다-replay-품질을-먼저-보여줘야-한다">5) 운영 대시보드는 세션 수보다 replay 품질을 먼저 보여줘야 한다</h3>
<p>많은 팀이 active session 수, 작업 완료 수, 평균 처리 시간을 먼저 봅니다. 하지만 stateful sandbox 단계로 가면 더 중요한 지표는 따로 있습니다.</p>
<ul>
<li>restore 후 첫 smoke pass 비율</li>
<li>스냅샷 기반 handoff 후 추가 질문 발생률</li>
<li>수동 환경 재구성 시간 절감량</li>
<li>stale snapshot 때문에 재검증된 비율</li>
<li>capability profile 누락으로 차단된 건수</li>
</ul>
<p>이 수치가 보여야 snapshot 시스템이 실제로 팀 비용을 줄이는지 판단할 수 있습니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<ol>
<li>
<p><strong>상태를 많이 저장할수록 복원은 쉬워지지만, 관리 복잡도도 커집니다.</strong><br>
그래서 전체 보존보다 &ldquo;다시 실행에 필요한 최소 상태&quot;를 고르는 기준이 먼저 필요합니다.</p>
</li>
<li>
<p><strong>캐시를 함께 스냅샷하면 속도는 좋아지지만, 낡은 성공 상태를 재사용할 위험이 있습니다.</strong><br>
캐시는 성능 자산이지 진실의 원천이 아닙니다. 검증 시각과 분리해서 봐야 합니다.</p>
</li>
<li>
<p><strong>persistent session 편의성은 중독성이 있습니다.</strong><br>
하지만 편한 구조가 항상 협업 친화적인 구조는 아닙니다. 인수인계와 감사 가능성까지 같이 봐야 합니다.</p>
</li>
<li>
<p><strong>비밀 분리를 설계하지 않으면 snapshot 시스템은 오래 못 갑니다.</strong><br>
한 번의 유출 사고가 생산성 이득을 전부 뒤집을 수 있습니다.</p>
</li>
</ol>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> snapshot에 workspace, dependency, validation, capability 정보가 함께 담긴다.</li>
<li><input disabled="" type="checkbox"> restore 후 1분 이내 smoke check가 가능하다.</li>
<li><input disabled="" type="checkbox"> 민감 정보는 참조 형태로만 저장되고 원문은 제외된다.</li>
<li><input disabled="" type="checkbox"> 24시간 이상 지난 snapshot은 재검증 규칙이 있다.</li>
<li><input disabled="" type="checkbox"> replay 성공률과 수동 재구성 비율을 같이 추적한다.</li>
</ul>
<h3 id="연습-과제">연습 과제</h3>
<ol>
<li>최근 반복 작업 1개를 골라, 현재는 어떤 환경 상태를 사람 기억에 의존하는지 적어 보세요.</li>
<li>그 작업에 필요한 최소 snapshot 메타데이터 7개를 정의하고, restore 후 smoke check 3개를 설계해 보세요.</li>
<li>2주간 <code>restore_time_p95</code>, <code>replay_success_rate</code>, <code>manual_reconstruction_rate</code>를 측정해 persistent session 의존도를 줄일 수 있는지 평가해 보세요.</li>
</ol>
<h2 id="관련-글">관련 글</h2>
<ul>
<li><a href="/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/">Harness Engineering, 에이전트 품질은 모델보다 실행 프레임에서 더 빨리 갈린다</a></li>
<li><a href="/posts/2026-03-31-deterministic-replay-flight-recorder-trend/">Deterministic Replay + Flight Recorder</a></li>
<li><a href="/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/">Test Evidence Pipeline</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-04-schema-constrained-output-runtime-validator-trend/">Schema-Constrained Output + Runtime Validator</a></li>
</ul>
]]></content:encoded></item><item><title>2026 개발 트렌드: Test Evidence Pipeline, AI가 만든 변경은 코드보다 '증거 묶음'으로 리뷰된다</title><link>https://jyukki.com/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://jyukki.com/posts/2026-04-10-test-evidence-pipeline-ai-change-review-trend/</guid><description>AI가 생성하는 코드와 문서 변경이 늘면서, 좋은 팀들은 diff 자체보다 테스트 증거, 정책 통과, 위험 태그, 복구 계획이 함께 묶인 evidence pipeline을 먼저 설계하고 있습니다.</description><content:encoded><![CDATA[<p>요즘 팀들이 AI를 코드 작성에 붙이면서 제일 빨리 체감하는 건 생성 속도입니다. PR 초안은 전보다 훨씬 빨리 나옵니다. 그런데 운영 단계로 가면 다른 문제가 바로 튀어나옵니다. 리뷰어가 봐야 할 변경 수는 늘었는데, 각 변경이 정말 안전한지 판단하는 데 필요한 정보는 오히려 더 부족한 경우가 많다는 점입니다. 테스트를 무엇을 돌렸는지, 어떤 파일이 위험 경로인지, 정책 검증은 통과했는지, 실패하면 어떻게 되돌릴지 같은 정보가 빠진 채 &ldquo;요약 잘 쓴 PR&quot;만 쌓이면 리뷰 속도는 오히려 느려집니다.</p>
<p>그래서 최근 개발팀의 관심은 &ldquo;AI가 더 잘 쓰게 만들기&quot;에서 한 걸음 더 가서, <strong>AI가 만든 변경을 어떤 증거와 함께 통과시킬 것인가</strong>로 이동하고 있습니다. 이 흐름을 저는 <code>Test Evidence Pipeline</code>이라고 보는 편이 맞다고 생각합니다. 핵심은 단순 테스트 자동화가 아닙니다. 변경 하나를 <strong>코드 diff + 실행 증거 + 정책 결과 + 위험 태그 + 복구 힌트</strong>로 묶어서 리뷰 가능한 단위로 만드는 것입니다.</p>
<p>즉 2026년의 실무 경쟁력은 PR 설명 문구보다, <strong>변경이 왜 통과돼도 되는지 증거를 구조화해서 보여 주는 파이프라인</strong>에 더 많이 걸려 있습니다.</p>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>Test Evidence Pipeline이 왜 AI 코딩 도입 이후 별도 설계 과제가 됐는지 이해할 수 있습니다.</li>
<li>어떤 증거를 최소 단위로 묶어야 리뷰어의 판단 비용이 실제로 내려가는지 기준을 잡을 수 있습니다.</li>
<li>증거 완전성, 재작업률, 위험 태그 정확도 같은 실무 지표를 숫자로 어떻게 잡을지 바로 적용할 수 있습니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-생성량이-늘수록-리뷰-병목은-읽기가-아니라-신뢰-판단으로-이동한다">1) 생성량이 늘수록 리뷰 병목은 &ldquo;읽기&quot;가 아니라 &ldquo;신뢰 판단&quot;으로 이동한다</h3>
<p>사람이 직접 코드를 쓸 때는 작성 속도와 리뷰 속도가 어느 정도 같이 움직였습니다. 하지만 AI가 초안을 빠르게 만들기 시작하면서 리뷰어는 다른 질문을 하게 됩니다.</p>
<ul>
<li>이 변경이 실제로 어떤 테스트를 통과했는가</li>
<li>테스트가 전체가 아니라 변경 경로를 제대로 덮었는가</li>
<li>위험한 디렉터리나 설정 파일을 건드렸는가</li>
<li>정책상 금지된 호출이나 권한 상승이 있었는가</li>
<li>실패 시 롤백이 쉬운가, 아니면 운영자 개입이 필요한가</li>
</ul>
<p>즉 리뷰어는 코드를 읽는 사람이라기보다 <strong>증거를 보고 신뢰 수준을 판정하는 사람</strong>이 됩니다. 이 점에서 최근의 <a href="/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/">Harness Engineering</a>은 단지 실행 프레임 설계가 아니라, 어떤 증거 없이는 다음 단계로 못 넘어가게 하는 구조와 맞닿아 있습니다.</p>
<h3 id="2-좋은-evidence-pipeline은-테스트-로그-저장소가-아니라-변경-계약이다">2) 좋은 evidence pipeline은 테스트 로그 저장소가 아니라 &ldquo;변경 계약&quot;이다</h3>
<p>단순히 CI 로그 링크 하나 붙이는 걸 evidence pipeline이라고 부르긴 어렵습니다. 실무에서 필요한 건 &ldquo;이번 변경이 어떤 계약을 만족했는가&quot;를 짧게 판단할 수 있는 구조입니다.</p>
<p>최소 묶음은 보통 아래 다섯 가지입니다.</p>
<ol>
<li><strong>변경 범위</strong>: 어떤 파일, 어떤 시스템, 어떤 위험 경로를 건드렸는가</li>
<li><strong>검증 증거</strong>: 테스트, 린트, 스키마 검증, 정책 체크 결과</li>
<li><strong>실행 출처</strong>: 누가 생성했고 어떤 하네스/권한으로 만들었는가</li>
<li><strong>위험 태그</strong>: 배포 위험도, 데이터 마이그레이션 여부, 외부 호출 유무</li>
<li><strong>복구 힌트</strong>: 실패 시 롤백, 재실행, 수동 개입 포인트</li>
</ol>
<p>이 다섯 가지가 있어야 리뷰어는 &ldquo;코드가 좋아 보인다&quot;가 아니라 &ldquo;이 변경은 이 조건에서 통과해도 된다&quot;고 판단할 수 있습니다. 그래서 <a href="/posts/2026-04-04-schema-constrained-output-runtime-validator-trend/">Schema-Constrained Output + Runtime Validator</a>나 <a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a> 같은 흐름이 중요한 겁니다. 증거를 자유 서술이 아니라 <strong>계약 가능한 구조체</strong>로 만들어 주기 때문입니다.</p>
<h3 id="3-테스트-증거의-핵심은-개수가-아니라-변경과의-관련성이다">3) 테스트 증거의 핵심은 개수가 아니라 &ldquo;변경과의 관련성&quot;이다</h3>
<p>많은 팀이 처음에는 테스트를 많이 돌리면 안심된다고 생각합니다. 하지만 AI 변경이 늘어날수록 전체 테스트 패스 하나만으로는 신뢰가 부족합니다. 리뷰어가 알고 싶은 건 전체 4,000개 테스트 성공보다도, <strong>이번 변경이 건드린 경로에 맞는 검증이 있었는가</strong>입니다.</p>
<p>예를 들어 문서 변경이라면 링크 검증, front matter 검증, 중복 제목 점검이 더 중요합니다. 애플리케이션 코드 변경이라면 아래 같은 증거가 더 유효합니다.</p>
<ul>
<li>변경 함수/모듈과 연결된 테스트 묶음 통과</li>
<li>정적 분석에서 새 경고가 늘지 않음</li>
<li>마이그레이션이 있으면 다운타임/롤백 조건 명시</li>
<li>위험 파일(<code>auth</code>, <code>billing</code>, <code>infra</code>, <code>config</code>) touched 여부 표시</li>
</ul>
<p>즉 evidence pipeline은 테스트 개수 경쟁이 아니라 <strong>관련성 높은 증거를 빠르게 묶는 문제</strong>입니다. 이 흐름은 <a href="/posts/2026-04-03-inference-router-quality-cost-gateway-trend/">Inference Router + Quality-Cost Gateway</a>와도 연결됩니다. 무조건 많이 돌리는 게 아니라, 위험도에 맞는 검증 비용을 배정해야 하기 때문입니다.</p>
<h3 id="4-리뷰어가-보고-싶은-건-ai의-자신감이-아니라-위험-요약과-실패-경로다">4) 리뷰어가 보고 싶은 건 AI의 자신감이 아니라 위험 요약과 실패 경로다</h3>
<p>AI가 만든 PR 설명은 종종 그럴듯합니다. 하지만 실무에서 더 중요한 건 아래 두 문장입니다.</p>
<ul>
<li>&ldquo;이 변경은 어디서 깨질 수 있는가&rdquo;</li>
<li>&ldquo;깨지면 어떻게 되돌릴 수 있는가&rdquo;</li>
</ul>
<p>그래서 증거 파이프라인에는 단순 요약보다 <strong>위험 태그와 실패 경로</strong>가 꼭 들어가야 합니다.</p>
<p>예를 들면 이런 식입니다.</p>
<ul>
<li><code>risk_level=medium</code></li>
<li><code>touches_sensitive_paths=true</code></li>
<li><code>external_call_added=false</code></li>
<li><code>rollback_strategy=revert_only</code></li>
<li><code>manual_verification_required=checkout smoke</code></li>
</ul>
<p>이 구조가 있어야 리뷰어는 diff를 다 읽기 전에 우선순위를 정할 수 있습니다. 최근 <a href="/posts/2026-03-17-approval-driven-auto-remediation-trend/">Approval-Driven Auto-Remediation</a>이 중요해지는 이유도 같습니다. 실패가 났을 때 자동 조치와 인간 승인을 어디서 나눌지 미리 정의해야 운영 병목이 줄어듭니다.</p>
<h3 id="5-결국-리뷰-대상은-코드가-아니라-코드--실행-프레임--증거의-결합물이다">5) 결국 리뷰 대상은 코드가 아니라 &ldquo;코드 + 실행 프레임 + 증거&quot;의 결합물이다</h3>
<p>AI 시대의 변경은 더 이상 순수한 코드 산출물로만 보기가 어렵습니다. 같은 diff라도 어떤 컨텍스트를 먹었는지, 어떤 권한으로 실행됐는지, 어떤 검증을 통과했는지에 따라 신뢰도가 크게 갈립니다.</p>
<p>그래서 좋은 팀은 PR을 사실상 아래 세 층으로 봅니다.</p>
<ol>
<li><strong>Change</strong>: 코드/문서 diff</li>
<li><strong>Frame</strong>: 생성에 사용된 harness, 권한, 제한 조건</li>
<li><strong>Evidence</strong>: 테스트, 정책, 위험 태그, 복구 계획</li>
</ol>
<p>이 셋이 같이 있어야 리뷰가 빨라집니다. 하나라도 없으면 사람은 결국 다시 원본 로그, CI 결과, 별도 문서를 뒤져야 하고, 그 순간 AI가 만든 생산성 이득이 사라집니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-최소-evidence-bundle부터-표준화한다">1) 최소 evidence bundle부터 표준화한다</h3>
<p>처음부터 거대한 플랫폼을 만들 필요는 없습니다. 오히려 작은 팀은 아래 6개 필드만 고정해도 체감이 큽니다.</p>
<ul>
<li><code>change_scope</code>: 변경 파일 수, 주요 디렉터리, 민감 경로 포함 여부</li>
<li><code>tests_run</code>: 실행한 테스트 목록과 결과</li>
<li><code>policy_checks</code>: 권한, 보안, 스키마 검증 결과</li>
<li><code>risk_level</code>: low/medium/high</li>
<li><code>rollback_hint</code>: revert only / feature flag off / manual rollback</li>
<li><code>human_required</code>: 추가 수동 확인 필요 여부</li>
</ul>
<p>이 정도만 구조화해도 PR 본문이 훨씬 짧고 명확해집니다. 설명을 길게 쓰게 하기보다, 누락되면 merge 못 하게 만드는 편이 낫습니다.</p>
<h3 id="2-의사결정-기준숫자조건우선순위">2) 의사결정 기준(숫자·조건·우선순위)</h3>
<p>권장 우선순위는 <strong>증거 완전성 &gt; 위험 분류 정확도 &gt; 재현성 &gt; 리뷰 속도 &gt; 생성량</strong> 입니다.</p>
<p>초기 운영 기준 예시는 아래처럼 잡을 수 있습니다.</p>
<ul>
<li><code>evidence_complete_rate</code>: 95% 이상</li>
<li><code>first_pass_mergeable_rate</code>: 60% 이상</li>
<li><code>rework_rate_after_review</code>: 20% 미만</li>
<li><code>missing_test_evidence_rate</code>: 5% 미만</li>
<li><code>risk_tag_mismatch_rate</code>: 10% 미만</li>
<li><code>review_turnaround_p95</code>: 30분 이내</li>
</ul>
<p>자동 게이트 예시:</p>
<ul>
<li>민감 경로 touched + 증거 누락이면 자동 중단</li>
<li>테스트 증거 없음 + 코드 변경이면 draft 유지</li>
<li>문서 변경이라도 링크 검증 실패 시 제출 차단</li>
<li><code>risk_level=high</code>면 사람 승인 1회 이상 필수</li>
<li>evidence bundle 생성 실패가 2회 연속이면 모델 교체보다 파이프라인 진단 우선</li>
</ul>
<p>실무에서는 생성 속도를 KPI로 올리기 쉽지만, 그보다 먼저 봐야 하는 건 <strong>증거 불완전한 변경이 얼마나 초기에 걸러지는가</strong>입니다. 통과율보다 차단 정확도가 먼저입니다.</p>
<h3 id="3-작업-유형별로-요구-증거를-다르게-해야-한다">3) 작업 유형별로 요구 증거를 다르게 해야 한다</h3>
<p>모든 변경에 같은 체크리스트를 붙이면 금방 무거워집니다. 보통 아래 정도로 나누면 현실적입니다.</p>
<p><strong>문서 변경</strong><br>
링크 검사, front matter, 중복 제목, 관련 문서 연결</p>
<p><strong>애플리케이션 코드 변경</strong><br>
변경 모듈 테스트, 정적 분석, 위험 디렉터리 touched 여부, 롤백 경로</p>
<p><strong>설정/인프라 변경</strong><br>
정책 검증, 환경 차이 요약, 배포 전후 확인 항목, 즉시 롤백 절차</p>
<p><strong>데이터 변경/마이그레이션</strong><br>
영향 범위 수치, 실행 순서, 백필 필요 여부, 다운타임/복구 전략</p>
<p>즉 evidence pipeline은 하나가 아니라 <strong>작업 유형별 템플릿 묶음</strong>이어야 합니다. 그래야 리뷰가 빨라지고, 작은 변경까지 과도하게 무거워지지 않습니다.</p>
<h3 id="4-4주-도입-플랜">4) 4주 도입 플랜</h3>
<p><strong>1주차: 리뷰 실패 원인을 분류한다</strong><br>
최근 PR 20건을 보고, 리뷰 지연 이유가 코드 품질인지 증거 누락인지 구분합니다.</p>
<p><strong>2주차: 최소 evidence bundle을 PR 템플릿에 고정한다</strong><br>
변경 범위, 테스트, 정책 결과, 위험 태그, 롤백 힌트를 구조화합니다.</p>
<p><strong>3주차: 자동 validator를 붙인다</strong><br>
누락 필드, 민감 경로, 테스트 증거 부재를 자동 차단합니다.</p>
<p><strong>4주차: 작업 유형별 템플릿으로 분기한다</strong><br>
문서/코드/설정/데이터 변경에 서로 다른 증거 요구를 적용합니다.</p>
<p>이 순서가 좋은 이유는 처음부터 평가 모델을 정교하게 만들지 않아도, 리뷰어의 체감 병목을 먼저 줄일 수 있기 때문입니다.</p>
<h3 id="5-운영-대시보드는-생성량보다-증거-결손을-먼저-보여줘야-한다">5) 운영 대시보드는 생성량보다 &ldquo;증거 결손&quot;을 먼저 보여줘야 한다</h3>
<p>팀 대시보드에 흔히 들어가는 건 생성된 PR 수, 테스트 통과율, 머지 수입니다. 그런데 AI 기반 변경이 늘수록 아래 지표가 더 중요해집니다.</p>
<ul>
<li>증거 누락으로 차단된 건수</li>
<li>민감 경로 변경 중 사람 승인 전환 비율</li>
<li>자동 생성 위험 태그와 리뷰어 판단의 불일치 비율</li>
<li>재시도 없이 첫 통과한 evidence bundle 비율</li>
<li>실패 시 rollback hint가 실제로 유효했던 비율</li>
</ul>
<p>이 수치가 보여야 어디를 고쳐야 할지 명확해집니다. 생성량만 보면 파이프라인이 좋아지는지 나빠지는지 잘 안 보입니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<ol>
<li>
<p><strong>증거 요구가 과하면 작은 변경이 느려진다</strong><br>
모든 변경에 무거운 검증을 붙이면 운영 비용이 커집니다. 위험도 기반 차등이 꼭 필요합니다.</p>
</li>
<li>
<p><strong>구조화된 증거도 거짓 양성, 거짓 음성이 있다</strong><br>
필드가 채워졌다고 항상 유효한 증거는 아닙니다. 초기에는 리뷰어 피드백으로 태그 품질을 같이 교정해야 합니다.</p>
</li>
<li>
<p><strong>PR 설명 자동화와 evidence pipeline은 다른 문제다</strong><br>
설명을 예쁘게 쓰는 것만으로는 리뷰 비용이 줄지 않습니다. 검증 결과와 위험 분류가 빠지면 여전히 사람이 직접 뒤져야 합니다.</p>
</li>
<li>
<p><strong>테스트 통과가 곧 배포 안전을 뜻하지는 않는다</strong><br>
특히 설정, 데이터, 권한 변경은 테스트 외 증거가 더 중요할 수 있습니다.</p>
</li>
<li>
<p><strong>사람 승인 단계를 병목으로 만들면 우회가 생긴다</strong><br>
승인 기준은 엄격하되, SLA와 대체 경로를 같이 설계해야 팀이 파이프라인을 신뢰합니다.</p>
</li>
</ol>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> PR마다 최소 evidence bundle이 구조화되어 있다.</li>
<li><input disabled="" type="checkbox"> 작업 유형별로 요구 증거가 다르게 정의돼 있다.</li>
<li><input disabled="" type="checkbox"> 민감 경로 변경은 자동 태깅되고 승인 게이트와 연결된다.</li>
<li><input disabled="" type="checkbox"> 테스트 증거가 없는 변경은 자동으로 draft 또는 차단된다.</li>
<li><input disabled="" type="checkbox"> rollback hint와 manual verification 항목이 포함된다.</li>
<li><input disabled="" type="checkbox"> evidence complete rate와 rework rate를 같이 추적한다.</li>
</ul>
<h3 id="연습-과제">연습 과제</h3>
<ol>
<li>최근 AI 지원 PR 10건을 골라, 증거 누락 때문에 리뷰가 늦어진 항목을 분류해 보세요.</li>
<li>문서 변경과 코드 변경에 대해 각각 최소 evidence bundle 템플릿을 6필드 이내로 설계해 보세요.</li>
<li><code>evidence_complete_rate</code>, <code>risk_tag_mismatch_rate</code>, <code>first_pass_mergeable_rate</code>를 2주간 측정해 현재 팀의 리뷰 파이프라인 성숙도를 점수화해 보세요.</li>
</ol>
<h2 id="관련-글">관련 글</h2>
<ul>
<li><a href="/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/">Harness Engineering, 에이전트 품질은 모델보다 실행 프레임에서 더 빨리 갈린다</a></li>
<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-03-17-approval-driven-auto-remediation-trend/">Approval-Driven Auto-Remediation</a></li>
<li><a href="/posts/2026-04-03-inference-router-quality-cost-gateway-trend/">Inference Router + Quality-Cost Gateway</a></li>
</ul>
]]></content:encoded></item><item><title>2026 개발 트렌드: Harness Engineering, 에이전트 품질은 모델보다 실행 프레임에서 더 빨리 갈린다</title><link>https://jyukki.com/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://jyukki.com/posts/2026-04-09-harness-engineering-agent-runtime-frame-trend/</guid><description>최근 개발팀의 관심이 프롬프트 최적화에서 실행 프레임 설계로 이동하고 있습니다. Harness Engineering이 왜 에이전트 도입의 실질 성패를 가르는지 실무 기준으로 정리합니다.</description><content:encoded><![CDATA[<p>요즘 에이전트 이야기를 하는 팀들을 보면, 대화 주제가 조금씩 바뀌고 있습니다. 예전에는 &ldquo;어떤 모델이 더 코드를 잘 쓰는가&quot;가 중심이었다면, 지금은 &ldquo;이 에이전트를 어떤 프레임 안에서 움직이게 할 것인가&quot;가 더 중요한 질문이 됐습니다. 같은 모델을 써도 어떤 팀은 PR 품질과 운영 안정성이 같이 올라가고, 어떤 팀은 재시도만 늘고 리뷰 피로만 커집니다.</p>
<p>이 차이를 만드는 게 바로 <strong>Harness Engineering</strong>입니다. 여기서 harness는 단순 래퍼 스크립트가 아닙니다. 컨텍스트를 어떻게 주입하고, 어떤 도구를 언제 열어 주고, 어떤 결과만 통과시키고, 실패하면 어디서 멈추고 사람에게 넘길지를 정하는 <strong>실행 프레임</strong>에 가깝습니다.</p>
<p>즉 2026년의 경쟁 포인트는 &ldquo;더 똑똑한 모델 1개&quot;보다, <strong>덜 흔들리는 실행 구조 1개</strong>에 있습니다.</p>
<h2 id="이-글에서-얻는-것">이 글에서 얻는 것</h2>
<ul>
<li>Harness Engineering이 왜 프롬프트 튜닝 다음 단계가 아니라, 이미 별도 설계 분야로 올라왔는지 이해할 수 있습니다.</li>
<li>컨텍스트, 권한, 검증, 복구를 어떤 순서로 묶어야 에이전트 품질이 안정되는지 기준을 잡을 수 있습니다.</li>
<li>팀이 실제 도입 여부를 판단할 때 필요한 숫자 기준, 운영 우선순위, 실패 중단 조건을 바로 가져갈 수 있습니다.</li>
</ul>
<h2 id="핵심-개념이슈">핵심 개념/이슈</h2>
<h3 id="1-프롬프트보다-실행-경계가-더-큰-품질-차이를-만든다">1) 프롬프트보다 실행 경계가 더 큰 품질 차이를 만든다</h3>
<p>초기에는 프롬프트를 잘 쓰면 품질이 올라가는 구간이 분명 있었습니다. 하지만 팀 단위 운영으로 들어가면 프롬프트보다 더 큰 차이를 만드는 요소가 나타납니다.</p>
<ul>
<li>잘못된 컨텍스트를 얼마나 빨리 차단하는가</li>
<li>허용되지 않은 도구 호출을 어떻게 막는가</li>
<li>초안이 나왔을 때 어떤 검증기를 반드시 거치게 하는가</li>
<li>실패했을 때 무한 재시도 대신 어디서 중단하는가</li>
</ul>
<p>이 네 가지가 약하면 모델이 좋아도 결과가 흔들립니다. 그래서 최근 흐름은 프롬프트 엔지니어링에서 끝나지 않고, <a href="/posts/2026-04-04-schema-constrained-output-runtime-validator-trend/">Schema-Constrained Output + Runtime Validator</a>나 <a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a>처럼 <strong>계약과 실행 증적을 먼저 붙이는 구조</strong>로 이동하고 있습니다.</p>
<h3 id="2-좋은-harness는-무엇을-더-하게-할지보다-무엇을-못-하게-막을지를-먼저-정의한다">2) 좋은 harness는 &lsquo;무엇을 더 하게 할지&rsquo;보다 &lsquo;무엇을 못 하게 막을지&rsquo;를 먼저 정의한다</h3>
<p>실무에서 에이전트 사고는 대체로 기능 부족보다 경계 부족에서 시작합니다.</p>
<ul>
<li>읽기 전용이어야 할 작업이 쓰기 권한까지 가진 상태로 실행</li>
<li>테스트 증거 없이 코드 수정 결과를 그대로 PR에 반영</li>
<li>저장소 전체를 읽을 필요가 없는데 과도한 컨텍스트를 계속 주입</li>
<li>실패한 작업을 같은 조건으로 반복 실행</li>
</ul>
<p>결국 harness의 첫 역할은 생산성 증폭이 아니라 <strong>위험 반경 제한</strong>입니다. 이 점은 이미 <a href="/posts/2026-03-04-ai-coding-agent-runtime-governance-trend/">AI 코딩 에이전트 런타임 거버넌스</a>와 <a href="/posts/2026-02-28-ai-agent-observability-trend/">AI 에이전트 관측/통제</a> 흐름에서 드러났고, 최근에는 그 위에 더 세밀한 하네스 레이어가 붙고 있습니다.</p>
<h3 id="3-컨텍스트-주입-도구-권한-결과-검증-실패-복구는-분리-설계해야-한다">3) 컨텍스트 주입, 도구 권한, 결과 검증, 실패 복구는 분리 설계해야 한다</h3>
<p>Harness를 한 덩어리 설정 파일로 관리하면 빠르게 복잡해집니다. 실무에서는 보통 네 층으로 쪼개는 편이 안정적입니다.</p>
<ol>
<li><strong>Context layer</strong>: 어떤 저장소 정보, 문서, 히스토리를 넣을지 결정</li>
<li><strong>Capability layer</strong>: 읽기/쓰기/명령 실행/외부 호출 권한을 제한</li>
<li><strong>Validation layer</strong>: 스키마, 테스트, 정책, 위험 경로 검증</li>
<li><strong>Recovery layer</strong>: 재시도, 인간 승인, 중단, 롤백 흐름</li>
</ol>
<p>이 네 층이 섞이면 수정이 어려워지고, 실패 원인도 안 보입니다. 반대로 분리하면 같은 모델을 써도 작업 유형별로 harness만 달리 적용할 수 있습니다. 최근 <a href="/posts/2026-04-02-codebase-knowledge-graph-semantic-index-trend/">코드베이스 지식 그래프 + 시맨틱 인덱스</a>가 주목받는 것도 context layer를 별도 자산으로 보기 시작했기 때문입니다.</p>
<h3 id="4-품질-평가는-정답률보다-머지-가능성과-재작업률이-더-중요하다">4) 품질 평가는 정답률보다 &lsquo;머지 가능성&rsquo;과 &lsquo;재작업률&rsquo;이 더 중요하다</h3>
<p>데모 단계에서는 응답 품질이 중요하지만, 운영 단계에서는 다른 지표가 더 중요합니다.</p>
<ul>
<li>첫 시도 후 머지 가능 비율</li>
<li>리뷰어 수동 수정량</li>
<li>재시도 횟수</li>
<li>정책 위반 차단 건수</li>
<li>위험 경로 변경 시 인간 승인 전환 비율</li>
</ul>
<p>즉 harness는 모델 성능을 보기 좋게 만드는 장치가 아니라, <strong>팀이 받아들일 수 있는 결과만 통과시키는 게이트</strong>입니다. 그래서 최근 실무에서는 생성량보다 &ldquo;검증 후 통과율&quot;이 더 중요한 KPI가 됩니다.</p>
<h2 id="도입-초기에-가장-자주-터지는-실패-패턴">도입 초기에 가장 자주 터지는 실패 패턴</h2>
<h3 id="1-읽기-컨텍스트는-넓은데-쓰기-권한이-그대로-열려-있는-경우">1) 읽기 컨텍스트는 넓은데 쓰기 권한이 그대로 열려 있는 경우</h3>
<p>이 조합은 현업에서 정말 자주 보입니다. 저장소 전체를 읽을 수 있게 열어 놓고, 수정도 바로 가능하게 두면 에이전트는 빠르게 움직이지만 동시에 잘못된 파일까지 건드릴 확률도 올라갑니다. 특히 오래된 문서, 실험 코드, 생성 산출물이 섞인 저장소에서는 최신 경로와 폐기 경로를 구분하지 못한 채 수정이 퍼집니다.</p>
<p>실무에서는 먼저 <code>읽을 수 있는 범위</code>와 <code>쓸 수 있는 범위</code>를 분리해야 합니다. 예를 들어 전체 저장소 읽기는 허용하더라도, 쓰기는 특정 앱 디렉터리나 문서 경로만 허용하고 민감 디렉터리는 승인 게이트로 넘기는 식입니다. 이 구조가 있어야 <a href="/posts/2026-04-05-tool-permission-manifest-runtime-attestation-trend/">Tool Permission Manifest + Runtime Attestation</a> 같은 통제 레이어가 실제 효과를 냅니다.</p>
<h3 id="2-테스트는-돌리지만-통과-기준이-느슨한-경우">2) 테스트는 돌리지만 통과 기준이 느슨한 경우</h3>
<p>많은 팀이 &ldquo;테스트를 붙였다&quot;고 말하지만, 실제로는 일부 단위 테스트만 통과해도 결과를 올려버립니다. 이러면 하네스가 있어도 품질이 안정되지 않습니다. 중요한 건 테스트 실행 여부가 아니라 <strong>어떤 증거가 있어야 다음 단계로 넘어갈 수 있는지</strong>입니다.</p>
<p>예를 들어 코드 수정 작업이라면 <code>정적 분석 통과 + 변경 경로 테스트 통과 + 위험 파일 변경 여부 확인</code> 세 가지를 동시에 만족해야 제출 가능하게 만드는 편이 낫습니다. 문서 수정 작업도 마찬가지로 링크 점검, front matter 검증, 중복 확인이 빠지면 운영 품질이 계속 흔들립니다.</p>
<h3 id="3-실패-복구가-재시도-루프-하나로-끝나는-경우">3) 실패 복구가 재시도 루프 하나로 끝나는 경우</h3>
<p>재시도는 복구 전략의 일부일 뿐, 복구 그 자체가 아닙니다. 같은 컨텍스트와 같은 권한으로 세 번 반복하면 품질이 올라가기보다 비용만 늡니다. 그래서 recovery layer에는 최소한 아래 세 가지가 필요합니다.</p>
<ul>
<li>동일 오류 반복 시 read-only 강등</li>
<li>정책 차단과 테스트 실패를 구분한 분기</li>
<li>인간 승인 또는 handoff로 전환하는 상한선</li>
</ul>
<p>이 원칙이 없으면 에이전트 운영은 자동화가 아니라 반복 실패의 자동 확장이 됩니다. 최근 <a href="/posts/2026-04-03-inference-router-quality-cost-gateway-trend/">Inference Router + Quality-Cost Gateway</a>가 주목받는 이유도, 결국 모델 선택보다 먼저 실패 비용을 통제하는 프레임이 필요하기 때문입니다.</p>
<h2 id="실무-적용">실무 적용</h2>
<h3 id="1-언제-harness-engineering-투자가-필요한가">1) 언제 Harness Engineering 투자가 필요한가</h3>
<p>아래 조건 중 2개 이상이면 프롬프트 개선보다 harness 투자가 먼저입니다.</p>
<ul>
<li>AI 생성 결과의 재작업률이 20% 이상</li>
<li>동일 유형 작업의 성공 품질 편차가 큰 편</li>
<li>PR 생성까지는 빠르지만 머지 리드타임이 줄지 않음</li>
<li>민감 경로 변경, 외부 호출, 명령 실행이 함께 섞여 있음</li>
<li>실패 원인이 모델 탓인지 권한/검증/컨텍스트 탓인지 구분이 안 됨</li>
</ul>
<p>반대로 문서 초안, 요약, 비민감 read-only 작업 위주라면 무거운 harness가 과할 수 있습니다.</p>
<h3 id="2-의사결정-기준숫자조건우선순위">2) 의사결정 기준(숫자·조건·우선순위)</h3>
<p>권장 우선순위는 <strong>무단 실행 방지 &gt; 결과 검증 가능성 &gt; 재현성 &gt; 처리 속도 &gt; 비용</strong> 입니다.</p>
<p>초기 운영 기준 예시:</p>
<ul>
<li>미허용 도구 호출 차단률: 100%</li>
<li>스키마/정책 검증 통과 전 자동 제출률: 0%</li>
<li>첫 시도 머지 가능 비율: 60% 이상 목표</li>
<li>재작업률: 20% 미만</li>
<li>동일 작업 재시도 3회 초과 비율: 5% 미만</li>
<li>인간 승인 대기 p95: 10분 이내</li>
</ul>
<p>자동 완화 규칙 예시:</p>
<ul>
<li>동일 작업 2회 연속 정책 차단 시 read-only 모드로 강등</li>
<li>테스트 실패 + 민감 경로 변경 동시 발생 시 자동 중단</li>
<li>컨텍스트 stale 추정치 15분 초과 시 쓰기 권한 비활성화</li>
<li>재시도 3회 초과 시 모델 교체보다 harness 진단을 먼저 수행</li>
</ul>
<h3 id="3-권장-최소-하네스-구성">3) 권장 최소 하네스 구성</h3>
<p>작게 시작할 때는 아래 5개면 충분합니다.</p>
<ol>
<li>작업 유형별 권한 티어 분리</li>
<li>읽기 컨텍스트 allowlist와 stale 경보</li>
<li>출력 스키마 또는 체크리스트 기반 validator</li>
<li>민감 경로 변경 시 승인 게이트</li>
<li>실패 시 즉시 중단할 kill switch</li>
</ol>
<p>이 조합만 있어도 &ldquo;에이전트가 잘 썼는가&quot;보다 &ldquo;에이전트가 안전하게 일했는가&quot;를 볼 수 있습니다. 비용 최적화가 필요한 팀은 <a href="/posts/2026-04-03-inference-router-quality-cost-gateway-trend/">Inference Router + Quality-Cost Gateway</a>를 별도 레이어로 붙이는 편이 깔끔합니다.</p>
<h3 id="4-4주-도입-플랜">4) 4주 도입 플랜</h3>
<p><strong>1주차: 실패를 분류한다</strong><br>
모델 실패, 컨텍스트 실패, 권한 실패, 검증 실패, 승인 대기 실패를 나눠 기록합니다.</p>
<p><strong>2주차: 작업 유형별 하네스 분리</strong><br>
read-only, 문서 수정, 코드 수정, 배포 연계 작업을 각각 다른 권한과 검증으로 나눕니다.</p>
<p><strong>3주차: validator와 승인 게이트 연결</strong><br>
스키마 검증, 테스트 증거, 민감 경로 차단 규칙을 자동화합니다.</p>
<p><strong>4주차: 관측과 강등 규칙 고정</strong><br>
재시도 상한, 인간 handoff 조건, kill switch 절차를 문서화합니다.</p>
<h2 id="트레이드오프주의점">트레이드오프/주의점</h2>
<ol>
<li>
<p><strong>하네스를 너무 두껍게 만들면 속도가 떨어진다</strong><br>
모든 작업에 동일한 검증과 승인을 붙이면 작은 작업도 과하게 느려집니다. 작업 등급별 차등이 필요합니다.</p>
</li>
<li>
<p><strong>프레임이 좋아도 컨텍스트가 낡으면 결과는 계속 흔들린다</strong><br>
Harness는 모델을 보호하지만, 오래된 코드 정보까지 마법처럼 고쳐 주지는 못합니다.</p>
</li>
<li>
<p><strong>검증기가 약하면 하네스가 있어도 데모 수준에 머문다</strong><br>
출력 형식 검사만 하고 의미 검증을 안 하면, 보기 좋은 오답이 그대로 통과합니다.</p>
</li>
<li>
<p><strong>승인 체계를 병목으로 만들면 우회 경로가 생긴다</strong><br>
승인 SLA, 백업 승인자, 자동 강등 규칙 없이 통제만 강화하면 결국 비공식 사용이 늘어납니다.</p>
</li>
</ol>
<h2 id="체크리스트-또는-연습">체크리스트 또는 연습</h2>
<h3 id="체크리스트">체크리스트</h3>
<ul>
<li><input disabled="" type="checkbox"> 작업 유형별로 컨텍스트, 권한, 검증, 복구 규칙이 분리돼 있다.</li>
<li><input disabled="" type="checkbox"> 미허용 도구 호출과 민감 경로 변경은 자동 차단된다.</li>
<li><input disabled="" type="checkbox"> 결과 제출 전 validator 또는 테스트 증거가 필수다.</li>
<li><input disabled="" type="checkbox"> 재시도 상한과 인간 handoff 조건이 숫자로 정의돼 있다.</li>
<li><input disabled="" type="checkbox"> kill switch와 read-only 강등 절차가 문서화돼 있다.</li>
</ul>
<h3 id="연습-과제">연습 과제</h3>
<ol>
<li>최근 2주간 에이전트 작업 20건을 골라 실패 원인을 <code>모델/컨텍스트/권한/검증/승인</code>으로 재분류해 보세요.</li>
<li>가장 자주 반복되는 작업 1개에 대해 read-only 하네스와 write 하네스를 분리했을 때 재작업률이 얼마나 줄어드는지 측정해 보세요.</li>
<li>첫 시도 머지 가능 비율, 재시도율, 정책 차단율을 1주간 수집해 현재 팀의 하네스 성숙도를 점수화해 보세요.</li>
</ol>
<h2 id="관련-글">관련 글</h2>
<ul>
<li><a href="/posts/2026-03-04-ai-coding-agent-runtime-governance-trend/">AI 코딩 에이전트 런타임 거버넌스</a></li>
<li><a href="/posts/2026-02-28-ai-agent-observability-trend/">AI 에이전트 관측/통제 트렌드</a></li>
<li><a href="/posts/2026-04-02-codebase-knowledge-graph-semantic-index-trend/">코드베이스 지식 그래프 + 시맨틱 인덱스</a></li>
<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-03-inference-router-quality-cost-gateway-trend/">Inference Router + Quality-Cost Gateway</a></li>
</ul>
]]></content:encoded></item></channel></rss>