Field note · 2026-05-26
AI 에이전트가 쓴 코드를 더 이상 읽을 수 없다 — 그래프로 위험을 보고, 멱등성으로 검증하라
에이전트로 코드를 만들기 시작하면서 이상한 일이 생겼다. 코드는 점점 빨리 쌓이는데, 그것을 이해하는 속도는 전혀 빨라지지 않는다는 것이다. 사람이 코드를 읽어 검토할 수 있는 속도는 시간당 약 450 LOC. 이 임계를 넘기면 결함 탐지율이 87%까지 떨어진다 (Cisco Code Review Study). 그런데 AI
AI 에이전트가 쓴 코드를 더 이상 읽을 수 없다
그래프로 위험을 보고, 멱등성으로 검증하라
에이전트로 코드를 만들기 시작하면서 이상한 일이 생겼다. 코드는 점점 빨리 쌓이는데, 그것을 이해하는 속도는 전혀 빨라지지 않는다는 것이다.
사람이 코드를 읽어 검토할 수 있는 속도는 시간당 약 450 LOC. 이 임계를 넘기면 결함 탐지율이 87%까지 떨어진다 (Cisco Code Review Study). 그런데 AI 도입 이후 PR 병합 속도는 98% 빨라졌고, 코드 클론 비율은 2021년 8.3%에서 2024년 12.3%로 늘었다. 개발자의 96%가 AI 생성 코드를 신뢰하지 않는다고 말하면서도 48%만이 커밋 전에 실제로 검증한다는 연구 결과는 그래서 놀랍지 않다 (SonarSource, 2024).
문제는 신뢰가 아니다. 시간이 없고, 읽을 수 있는 양이 이미 한계를 넘었다.
읽는 것으로는 더 이상 충분하지 않다
전통적인 코드 리뷰는 암묵적으로 인간이 코드를 읽고 이해할 수 있다는 가정 위에 선다. 로직을 따라가고, 엣지 케이스를 상상하고, 아키텍처와 정합성을 확인한다.
에이전트 시대에 이 가정은 조용히 무너지고 있다.
한 에이전트 세션에서 수백 줄의 코드가 생성된다. 함수가 다른 함수를 호출하고, 모듈이 모듈을 참조한다. 알고리즘 구조의 무결성을 직접 읽어 해석하는 것은 이미 인간의 인지 용량을 초과하는 문제가 되었다. fMRI 연구에 따르면 코드 이해에는 뇌의 5개 영역이 동시에 활성화되며, 작업 기억(working memory)에는 4~7개의 청크만 동시에 올릴 수 있다 (TU Chemnitz, ICSE 2021). 에이전트가 생성하는 코드 그래프의 깊이와 너비는 그 한계를 훨씬 넘는다.
그렇다면 어떻게 신뢰할 것인가?
읽는 것 대신 검증(verification)으로 전환해야 한다.
멱등성: 읽지 않고 검증하는 전략
멱등성(idempotency)은 f(f(x)) = f(x) — 같은 입력을 반복 실행해도 결과가 달라지지 않는 성질이다. 이것은 단순한 API 설계 원칙이 아니다. 코드를 읽지 않고도 행동으로 정확성을 증명하는 검증 프레임워크다.
Property-based testing (QuickCheck, Hypothesis)은 이 원리를 자동화한다. 수천 개의 무작위 입력을 생성하고, 멱등성·단조성·경계 불변식 같은 속성이 유지되는지 기계적으로 확인한다. 코드의 의미를 이해하지 않아도 된다. 속성이 깨지는 순간이 곧 결함이다.
한 단계 더 나아간 것이 Metamorphic Testing이다. 기대 출력을 알 수 없을 때도, 입력 간의 관계(e.g., sin(π−x) = sin(x))를 활용해 정확성을 검증한다. 2024년 발표된 Metamorphic Prompt Testing 연구는 이 원리를 LLM 생성 코드 검증에 직접 적용했다 — 서로 다르게 표현한 프롬프트에 대해 모순된 출력이 나오면 결함 신호로 해석한다 (arXiv:2406.06864).
형식 검증(Formal Methods) 진영에서는 TLA+와 Alloy가 분산 시스템의 멱등성 불변식을 수학적으로 증명한다. Amazon AWS는 실제로 TLA+로 복제 일관성을 검증해 왔다. USENIX OSDI'23에서 발표된 Flux 툴킷은 서버리스 애플리케이션의 멱등성을 자동 검증하며, 로깅 기반 접근 대비 6배 낮은 지연을 달성했다.
공통 원리는 하나다: 알고리즘 구조를 직접 읽어 해석하는 대신, 동작의 불변식을 기계가 검증하게 한다.
그런데, 모든 코드가 똑같이 위험하지는 않다
멱등성 검증이 강력하더라도 맹점이 있다. 멱등성은 기능적 정확성을 검증하지만, 아키텍처적 리스크는 잡아내지 못한다. 잘못된 방향으로 완벽하게 작동하는 코드는 멱등성 테스트를 통과한다.
여기서 그래프 이론이 필요해진다.
상태 전이 시스템, 함수 호출 그래프, 모듈 의존성 — 모두 방향 그래프다. 그래프로 표현하는 순간, 수십 년의 알고리즘 유산이 그대로 위험 분석 도구가 된다.
Cyclomatic Complexity — 복잡도의 수치화
$$V(G) = E - V + 2P$$
McCabe(1976)의 이 공식은 제어 흐름 그래프에서 선형 독립 경로의 수를 계산한다. $V(G) > 20$이면 결함 밀도가 급격히 올라간다. SonarQube, LLVM, NASA/JPL이 모두 이 지표를 자동화 품질 게이트로 사용한다.
강연결 성분(SCC) — 순환 위험
Tarjan 알고리즘으로 방향 그래프의 강연결 성분을 추출하면 "탈출 불가능한 순환 상태 클러스터"가 드러난다. SCC 크기 > 1은 데드락·무한루프 위험의 직접적 지표다. Bazel 빌드 시스템이 빌드 그래프의 SCC로 순환 의존성을 차단하는 것도 같은 원리다.
Betweenness Centrality — 에러 전파의 병목
$$BC(v) = \sum_{s \neq v \neq t} \frac{\sigma(s,t \mid v)}{\sigma(s,t)}$$
중심성이 높은 노드는 에러가 가장 집중적으로 통과하는 **단일 장애점(SPOF)**이다. DeMuVGN 연구(arXiv:2410.19550, 2024)에 따르면 다중 뷰 의존성 그래프에서 중심성 기반 GNN 모델은 결함 예측 F1 점수를 11~12% 향상시켰다. Betweenness 상위 5% 노드가 전체 최단 경로의 60% 이상을 매개한다면, 그 노드들이 무너질 때 시스템 전체가 무너진다는 뜻이다.
BFS 도달 가능성 — 에러 영향 범위
Impact(s₀) = {v | s₀ →* v}
특정 상태에서 오류가 발생했을 때 영향받는 하위 상태를 BFS로 즉시 계산한다. 영향 비율(Impact Ratio)이 30%를 넘으면 격리 설계가 필요하다. Netflix는 이 원리로 장애의 폭발 반경(blast radius)을 사전에 계산한다.
그래프 위험도 기반 Human-AI 협업 전략
이제 그림이 완성된다. 그래프 지표로 코드의 위험도를 정량화하고, 위험 수준에 따라 검증 주체를 달리한다.
위험도 분류
↓
High Risk → 인간이 직접 해석·검증
(BC 상위 5%, SCC > 5, V(G) > 20, Impact > 30%)
Medium Risk → 인간 감독 하에 에이전트 보조
(속성 기반 테스트 + 인간 최종 승인)
Low Risk → 에이전트에게 완전 위임
(멱등성 자동 검증, Metamorphic Testing)
이것은 새로운 아이디어가 아니다. 이미 여러 곳에서 같은 원리가 작동하고 있다.
Google은 AI 트리아지 에이전트(Gemini)를 이용해 15~20분짜리 보안 분류 작업을 자동화하되, 위험 판정 결과에 따라 자동 격리(Malicious)와 인간 에스컬레이션(Suspicious)을 구분한다.
Netflix는 PR당 최대 1,000개의 디바이스 테스트를 실행하면서, 실패 이력과 정적 분석을 기반으로 위험 등급을 매겨 트리아지한다. 모든 실패를 동등하게 보지 않는다.
FDA는 2025년 Computer Software Assurance 가이드라인에서 일률적 검증 대신 **위험 기반 검증(risk-based validation)**을 공식 권장했다. 커버리지 기반 접근 대비 ROI가 35% 높다는 Capgemini 연구를 근거로 삼았다.
NASA/JPL은 Petri Net과 Markov 체인으로 우주선 상태기계의 정상 상태 에러 확률을 수치화하고, 그 값에 따라 형식 검증 깊이를 결정한다.
Automation Bias — 보이지 않는 위험
한 가지 경고가 필요하다.
자동화가 신뢰할 만하게 작동할수록 인간의 감시 능력은 떨어진다. 자동화가 일관되게 신뢰할 때 오류 탐지율은 **30%**까지 내려간다. 시스템이 가끔 눈에 띄는 실패를 하면 탐지율은 **75%**까지 올라간다 — 이것은 항공·의료 분야에서 수십 년간 문서화된 자동화 편향(Automation Bias) 패턴이다.
AI 생성 코드에서도 같은 패턴이 나타나고 있다. AI 보조 개발자들이 비AI 동료 대비 자격 증명(credential)을 거의 2배 더 많이 노출시킨다는 연구도 있다 (Apiiro, 2024). 에이전트가 멀티파일 변경을 한 번에 생성할 때, 단 하나의 자격 증명 노출이 서비스 전체로 전파되기 전에 잡히지 않는다.
이것이 Low Risk 구간에 에이전트를 완전 위임하더라도, 그 판단 기준 — 즉 그래프 지표 임계값 — 은 인간이 설정하고 주기적으로 재검토해야 하는 이유다.
신뢰는 이해가 아닌, 검증 가능성에서 온다
에이전트 시대의 소프트웨어 신뢰 문제는 결국 이 질문으로 귀결된다: 코드를 이해하지 않고도 신뢰할 수 있는가?
대답은 조건부 yes다.
- 멱등성·속성 기반 테스트로 기능적 정확성을 기계가 검증할 수 있다면
- 그래프 지표로 구조적 위험도를 정량화할 수 있다면
- 위험도에 따른 검증 깊이를 차등 적용한다면
코드를 한 줄도 읽지 않고도 낮은 위험 영역은 신뢰할 수 있다. 그리고 인간의 해석 능력은 정말로 중요한 곳 — 높은 Betweenness Centrality, 큰 SCC, 임계를 넘는 Cyclomatic Complexity — 에 집중할 수 있다.
읽는 것에서 검증하는 것으로. 균일한 신뢰에서 위험도 기반 신뢰로.
이것이 에이전트가 코드를 생성하는 세계에서 사람이 남아야 할 자리를 재정의하는 방식이다.
관련 연구: Cisco Code Review Study (2009) · DeMuVGN arXiv:2410.19550 (2024) · Metamorphic Prompt Testing arXiv:2406.06864 (2024) · Flux USENIX OSDI'23 · SonarSource AI Trust Gap Survey (2024) · Apiiro AI Coding Risk Report (2024) · FDA CSA Guidance (2025) · McCabe Cyclomatic Complexity IEEE TSE (1976)