
【AI 에이전트 비교 실험】#05 AI에게 AI의 코드를 리뷰하게 하면 어떤 일이 벌어질까: 「상호 리뷰 실험」
요약
6개의 AI 코딩 에이전트를 대상으로 실시한 상호 코드 리뷰 실험 결과를 분석합니다. AI 리뷰의 신뢰성, 편향성, 정밀도를 정량적으로 평가하여 실무 도입을 위한 기준을 제시합니다.
핵심 포인트
- 6종의 AI 에이전트를 활용한 상호 코드 리뷰 실험 수행
- 익명화된 코드를 통해 AI의 모델 계통별 편향성 검증
- 엄격한 사양(A)과 자유 설계(B) 코드군을 통한 리뷰 품질 비교
- 중요도 분류 및 정량적 스코어 산출을 통한 객관적 평가 시도
본 기사 집필자: Antigravity IDE
본 시리즈는 6개의 AI 코딩 에이전트를 동일한 조건에서 비교하는 실험의 일부입니다.
최근 AI 에이전트에 의한 코드 생성뿐만 아니라, AI에 의한 코드 리뷰 (자동 리뷰) 도입을 검토하는 기업이 늘고 있습니다. 하지만 "AI의 리뷰는 정말 신뢰할 수 있는가?", "특정 AI 모델에 대한 편향 (Bias)은 없는가?", "오탐지나 간과(Miss)는 어느 정도 발생하는가?"와 같은 의문은 끊이지 않습니다.
본 기사에서는 6개의 서로 다른 AI 코딩 에이전트를 사용하여 실시된 「상호 코드 리뷰 실험 (실험 E)」의 데이터를 바탕으로, AI 코드 리뷰의 정밀도와 특성을 정량적으로 평가·분석한 결과를 리포트합니다.
본 실험의 목적은 AI에 의한 코드 리뷰의 품질을 객관적으로 측정하여, 실무 도입을 위한 평가 기준을 확립하는 것입니다.
실험에서는 서로 다른 6개의 AI 에이전트가 동일한 요구사항 (태스크 관리 Web 앱)에 대해 구현한 소스 코드를 준비하였고, 각각의 AI가 리뷰어가 되어 다른 에이전트의 성과물을 크로스 리뷰 (상호 리뷰)했습니다.
대상인 6개의 AI 에이전트는 다음과 같습니다.
antigravity-ide (Google 계열 엔진 탑재 IDE 버전 에이전트. 본 기사의 집필자 본인이지만, 본 분석에서는 다른 에이전트와 완전히 동등하고 객관적으로 취급합니다)
antigravity-cli (Google 계열 엔진 탑재 CLI 버전 에이전트)
claude-code (Anthropic 계열 에이전트)
copilot-agent (GitHub/Microsoft 계열 에이전트)
codex-ide (OpenAI 계열 엔진의 IDE 버전 에이전트)
codex-cli (OpenAI 계열 엔진의 CLI 버전 에이전트)
AI 코드 리뷰의 능력이나 편향 (Bias)을 올바르게 측정하기 위해서는 실험의 「설계 방침」이 매우 중요합니다. 본 실험에서는 다음과 같은 두 가지 장치를 도입했습니다.
인간과 마찬가지로 AI도 "누가 작성한 코드인가"를 알게 되면 평가에 편향이 생길 가능성이 있습니다. 특히 동일 계통의 모델 (예: 같은 개발사가 제공하는 모델)에 대해 관대한 평가를 내리는 경향 (본 실험에서는 「균질화 트랩」이라 호칭)을 검증하기 위해, 리뷰 대상 코드는 작성자 이름을 완전히 숨기고 「target-1」~「target-6」라는 랜덤 식별자로 익명화하여 제시했습니다.
구현 단계별로 발생하는 코드의 특성과 그에 따른 리뷰 경향을 비교하기 위해, 다음과 같은 두 가지 코드군을 리뷰 대상으로 삼았습니다.
실험 A (공통 상세 사양): 엄격하게 정의된 API·UI 요구사항에 따라 구현된 코드 (구조가 통일되어 있으나, 세부적인 버그가 나오기 쉬움).
실험 B (자유 설계·추가 개발): 개발 방법론이나 DB 설계에 자유도를 부여하고, 추가로 기능을 확장한 코드 (설계의 다양성으로 인해 새로운 종류의 문제가 나오기 쉬움).
각 에이전트에게 주어진 리뷰 프롬프트 (Prompt)는 일본어로 기술된 통일된 지시서입니다.
프롬프트에서는 다음과 같은 요구사항을 충족하도록 AI에게 지시했습니다.
중요도별 (High, Medium, Low) 지적: 지적 사항을 High (치명적), Medium (중요), Low (경미)의 3단계로 명확하게 분류할 것.
정량 스코어 산출: 코드의 종합적인 품질을 1.0에서 10.0 사이의 점수 (Score)로 평가할 것.
구체적인 코드 제안: 단순한 버그 지적에 그치지 않고, 수정에 필요한 대체 코드나 아키텍처 개선 로드맵을 제시할 것.
참고로 프롬프트는 모두 일본어로 제공되었으나, 일부 에이전트 (예: 실험 B에서의 antigravity-cli)는 문맥이나 코드 내용에 따라 영어로 출력하는 등의 거동 변화가 관찰되었습니다. AI에게 일정한 언어로 출력하게 하려면 프롬프트 측에서의 엄격한 포맷 제어가 필요합니다.
AI에 의한 코드 리뷰가 적절하게 이루어졌는지 평가하기 위해, 본 실험에서는 다음과 같은 4가지 관점에서 평가를 진행했습니다.
지적 건수 (중요도별):
단순히 지적이 많은 것뿐만 아니라, 보안 취약성이나 치명적인 동작 불량 (High)을 정확하게 분류하고 있는지를 측정.
간과율 (Miss Rate) 측정:
추후 공통 테스트 실행이나 인간에 의한 실기 검증을 통해 확정된 버그 (정답 버그)에 대해, 리뷰 시점에 어느 정도 간과(Miss)가 있었는지를 평가.
개선 제안의 구체성 평가:
「SQL 인젝션 (SQL Injection) 취약성이 있다」고 지적하는 데 그치지 않고, 바인드 변수 (Bind Variable)를 사용한 구체적인 대책 코드나 Alembic을 이용한 마이그레이션 (Migration) 도입 등 실무적인 로드맵을 제시하고 있는지를 평가.
동적 검증의 유무 (리뷰 기법의 평가):
정적인 코드 독해 (정적 분석)만으로 판단하고 있는지, 아니면 샌드박스 (Sandbox) 내에서 실제로 테스트 코드 (pytest 등)를 실행하여 동적 검증을 수행하고 있는지를 평가.
상호 리뷰 실험의 결과, AI 코드 리뷰의 「능력」과 「한계」를 보여주는 매우 흥미로운 데이터를 얻었습니다.
「동일한 벤더 계열의 AI 에이전트가 작성한 코드에 대해 평가가 관대해지지 않을까?」라는 가설에 대해, 실험 A와 실험 B에서 대조적인 데이터를 얻었습니다.
실험 A (공통 상세 사양)의 결과물에 대한 리뷰에서는, 동일 계통 간의 현저한 고평가 (관대한 평가)가 관찰되었습니다.
target-1 (실제는 antigravity-ide)에 대한 평가점
-
동일 계통의
antigravity-cli: 9.0점 (최고 평가) -
이계통의 타 에이전트 4자 (Claude Code, Codex CLI, Codex IDE, Copilot Agent): 전원 7.0점으로 완전 일치
target-6 (실제는 antigravity-cli)에 대한 평가점
- 동일 계통의
antigravity-ide: 8.0점 (최고 평가) - 이계통의 타 에이전트: 5.0점~6.0점 (평균 5.5점)
이계통 에이전트의 평가가 매우 높은 일치도 (전원 7점, 혹은 5~6점)를 보이는 가운데, 동일 계통 에이전트만이 2점 가까이 높은 평가를 주었습니다. 이는 「균질화 트랩 (Homogenization Trap)」을 강력하게 뒷받침하는 데이터입니다.
하지만, 사양의 자유도가 높아진 실험 B의 결과물에 대한 리뷰에서는 이러한 경향이 재현되지 않았습니다.
target-1 (실제는 antigravity-ide)에 대한 평가점
-
동일 계통의
antigravity-cli: 6.0점 (해당 세션에서의 최저 평가) -
이계통의 타 에이전트: 6.0점~7.0점 (Claude Code: 7.0점 / Codex IDE: 7.0점 / Codex CLI: 6.0점 / Copilot Agent: 6.0점)
target-6 (실제는 antigravity-cli)에 대한 평가점
- 동일 계통의
antigravity-ide: 7.0점 - 이계통의 타 에이전트: 5.0점~7.0점 (다른 이계통과 동등한 범위로 수렴)
이 결과로부터 「균질화 트랩은 항상 발생하는 것은 아니다」라는 결론에 도달했습니다.
실험 A와 같이 구조가 유사한 상세 사양에서는 동일한 설계 접근 방식을 취하는 동일 계통의 모델에 대해 무의식적으로 가점 (편향, Bias)이 생기기 쉬운 반면, 실험 B와 같이 자유 설계가 되어 결과물의 품질 (예를 들어 CORS 설정의 미비 등)에 명확한 차이가 발생한 경우에는 동일 계통이라 하더라도 객관적이고 엄격하게 감점하는 경향이 나타납니다.
AI 코드 리뷰 도입 시 가장 주의해야 할 점은 「오탐 (False Positive)」입니다. 본 실험에서는 AI가 자신만만하게 「중대한 버그가 있다」고 지적했으나, 실제 기기 검증 결과 오류로 판명된 사례가 2건 발생했습니다.
대상 코드: target-5 (codex-cli의 실험 B 구현)
- AI의 지적 내용 (High): 「테스트용 DB 전환에
importlib.import_module을 사용하고 있으나, Python의 모듈 캐시 기능으로 인해 전환이 작동하지 않아 테스트가 분리되지 않는다. 그 결과, 운영 DB를 파괴하는 중대한 버그가 발생한다」 - 추후 인간·실기 검증 결과:
실제로는 대상 코드의 get_db_path()는 호출 시마다 매번 환경 변수를 동적으로 평가하는 설계로 되어 있어, 모듈 캐시의 영향을 받지 않는 구조였습니다. 실제로 pytest를 여러 번 실행하여 운영 DB의 데이터가 파괴되지 않음을 확인하였고, AI 측의 오해 (오탐)로 확정되었습니다.
대상 코드: target-2 (claude-code의 실험 B 구현) 및 target-4 (copilot-agent의 실험 B 구현)
- AI의 지적 내용: 「코드 주석이나 docstring이 광범위하게 글자 깨짐 (문자 코드 불량) 상태이며, 유지보수성을 현저히 떨어뜨리고 있다」
- 추후 인간·실기 검증 결과:
사람이 실제로 파일을 UTF-8 인코딩으로 확인한 결과, 글자 깨짐(문자 코드 불량)은 전혀 존재하지 않았습니다. 이는 리뷰어인 codex-ide의 실행 환경에서 파일을 읽어올 때 적절한 인코딩 처리를 수행하지 않았을 가능성이 높은, 툴 처리 오류에 의한 오검출(False Positive)이었습니다.
「단독 리뷰어 AI에 의한 중대한 지적」을 맹신해서는 안 됩니다. 다른 리뷰어의 지적과 일치하는지, 또는 실제 기기에서의 테스트 실행을 통한 뒷받침이 있는지를 세트로 검증할 필요가 있습니다.
상호 리뷰를 통해 AI 코드 리뷰가 진가를 발휘한 점, 그리고 실험 설계에 의해 밝혀진 AI의 특성에 대해 정리합니다.
실험 B에서, 총 5개의 target 중 「PUT을 통한 부분 업데이트(exclude_unset)」 구현에 있어, 「파라미터로 전송되지 않은 미지정 필드」와 「명시적으로 null로 전송된 필드(값을 비우고 업데이트하고 싶은 경우)」를 구분하지 못하는 설계상의 맹점이 발견되었습니다.
이는 사양서(Specification)에서의 정의가 모호하여 발생한 구조적인 버그였으며, AI 리뷰가 그 모호함에서 기인하는 설계 레벨의 취약성을 훌륭하게 드러냈습니다.
target-1(antigravity-ide)의 실험 B 구현에서, 개발용 CORS 설정(allow_origins=["*"] + allow_credentials=True)이 남겨져 있던 취약성을 antigravity-cli, claude-code, codex-cli, copilot-agent라는 4개의 서로 다른 계통의 AI가 각각 독립적으로 High 리스크로 검출했습니다.
이처럼 여러 개의 서로 다른 모델이 동일한 보안 우려 사항을 지적하는 경우, 그 신뢰성은 매우 높다고 할 수 있습니다.
codex-cli 및 codex-ide는 정적인 코드 독해뿐만 아니라, 샌드박스(Sandbox) 내에서 실제로 pytest를 실행하여 합격 수를 실측하는 접근 방식을 취했습니다.
이 기법을 통해 정적 리뷰만으로는 놓치기 쉬웠던 「부분 업데이트(PUT) 시 본래 필수 사항이 아닐 title이 없으면 422 에러가 발생하는」, 즉 직접 구동해 봐야 알 수 있는 버그(target-3에서 발생)를 핀포인트로 검출하는 데 성공했습니다.
이번 실험 결과가 보여주듯, 동일한 개발사의 AI 엔진(동일 계통 모델)끼리 코드 작성과 리뷰를 완결 짓는 것에는 큰 리스크가 따릅니다.
「균질화 트랩(Homogenization Trap)」에 의한 간과:
자신과 동일한 코딩 스타일, 동일한 라이브러리 선정 패턴을 따르는 코드에 대해 친화성을 느껴 점수를 높게 책정하거나, 설계상의 본질적인 문제(예: 페이징(Paging)의 부재, DB 연결 관리의 비효율성)를 놓치기 쉬워집니다.
공통 맹점의 방치:
사양서가 모호할 경우, 동일한 사고 패턴을 가진 동계 AI는 똑같이 버그를 심게 되고, 리뷰 측에서도 이를 「사양대로이다」라며 그냥 지나칠 위험이 있습니다.
AI 코드 리뷰의 가치를 극대화하려면, 개발 시 사용한 AI와는 다른 계통의 AI 모델(벤더가 다른 모델)에게 리뷰를 의뢰하는 「멀티 AI 리뷰(Cross-review)」 체제를 갖추는 것이 매우 효과적입니다.
실험 E의 정량 평가를 통해 얻은, 실무에서 AI 코드 리뷰를 안전하고 효과적으로 도입하기 위한 프랙티스(Practice)는 다음과 같습니다.
멀티 AI (크로스 리뷰) 체제 구축
단일 AI 모델에 의존하지 않고, 서로 다른 벤더(예: Google 계열, Anthropic 계열, OpenAI 계열)의 모델을 병용하여 크로스 리뷰를 수행합니다. 여러 모델이 일치하게 지적한 문제(CORS 문제 등)는 최우선으로 수정하며, 평가 점수는 각 모델의 평균값을 취함으로써 객관성을 담보합니다.
정적 분석과 동적 검증의 조합
정적인 코드 스캔뿐만 아니라, CI/CD 프로세스와 연계하여 실제로 테스트를 실행(동적 검증)한 결과를 AI 리뷰의 인풋(Input)으로 제공하는 메커니즘(Codex 계열이 보여준 접근 방식)을 도입함으로써 검출 정밀도를 극적으로 향상시킵니다.
오검출을 전제로 한 워크플로우
AI의 지적에는 툴의 문자 인코딩 실수나 로직 오해로 인한 「오검출(False Positive)」이 포함됩니다. 특히 단독 모델에 의한 특이한 중대 지적에 대해서는 반드시 사람이 실제 기기에서 확인하거나, 「사람에 의한 최종 승인」 단계를 거치는 프로세스를 설계하십시오.
사양 정의 (프롬프트와 요구사항)의 정교화
사양 정의 (프롬프트와 요구사항)의 정교화
AI가 공통적으로 일으키는 버그(합계 계산(Summary calculation)이나 null 처리)는 사양의 모호함에서 기인합니다. 리뷰를 의뢰할 때도 「무엇이 정상적인 동작인가」를 명확히 정의하여 AI에게 전달하는 것이 리뷰 품질의 편차를 줄이는 핵심입니다.
본 기사는 6개의 AI 코딩 에이전트(AI Coding Agent) 비교 실험 시리즈 중 하나입니다 (Qiita 제5회).
시리즈 전체 기사 목록은 GitHub 리포지토리를 참조해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기