본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 18. 01:09

집계된 벤치마크는 거짓말을 합니다. 보안 도메인별 700개 AI 함수의 실제 모습은 이렇습니다.

요약

기존 AI 벤치마크가 모델들을 단일 지표(정확도, 취약점 발생률 등)로 집계하여 순위를 매기는 방식은 오해의 소지가 있습니다. 본 분석은 700개의 함수를 보안 도메인별로 세분화한 결과를 보여주며, 집계된 순위와 달리 특정 모델이 모든 영역에서 최고가 아님을 입증합니다. 오히려 '패배'했던 모델들이 가장 중요한 수정(remediation) 카테고리에서 압도적인 성능을 보였으며, 각 도메인별로 최적화된 전문 모델의 중요성이 강조됩니다.

핵심 포인트

  • AI 모델 평가는 단일 지표 기반의 집계 벤치마크만으로는 한계가 있으며 오해를 불러일으킬 수 있다.
  • 특정 보안 도메인(예: Database, Authentication)에서는 Haiku와 Opus 같은 특정 모델이 가장 낮은 취약점 발생률을 보였다.
  • 모델별로 강점이 다른 코드를 생성하므로, '최고의 종합' 모델보다는 사용 환경에 맞는 전문 모델 선택이 중요하다.
  • 수정(Remediation) 능력 측면에서 Gemini 2.5 Pro나 Opus 4.6 등 특정 모델들이 높은 수정률을 기록하며 실질적인 가치를 입증했다.

제가 본 모든 AI 벤치마크(benchmark)는 똑같은 실수를 범합니다. 모델들을 단 하나의 숫자 — 정확도(accuracy), 통과율(pass rate), 취약점 발생률(vulnerability rate) — 로 순위를 매기고 그것으로 끝내버립니다. Part 3에서 저희도 정확히 그렇게 했습니다. 저희는 Claude와 Gemini의 모델 5개를 집계된 취약점 발생률(aggregate vulnerability rate)로 순위를 매겼고, Haiku가 가장 안전하며(49%), Gemini Pro가 가장 위험하다(73%)고 선언했습니다. 그 순위는 사실입니다. 하지만 동시에 오해의 소지가 있습니다.

요약(TL;DR): 700개의 함수를 보안 도메인(security domain)별로 세분화했을 때, 순위가 뒤집혔습니다. 집계된 벤치마크에서 "패배한" 모델이 가장 중요한 수정(remediation) 카테고리에서 압도적인 성능을 보였습니다. 반면 "승리한" 모델은 수정률(fix rate)이 가장 낮은 모델 중 하나였습니다.

카테고리 챔피언 (가장 낮은 취약점 발생률)

도메인챔피언발생률준우승발생률
DatabaseHaiku 4.539%Opus 4.661%
AuthenticationHaiku 4.529%Sonnet 4.539%
File I/OGemini 2.5 Pro86%Haiku / Opus93%
ConfigurationGemini 2.5 Flash21%Sonnet / Opus25%
Command ExecutionHaiku 4.550%Sonnet 4.575%

수정(Remediation) 챔피언 (가장 높은 수정률)
| 도메인 | 챔피언 | 수정률 | 준우승 | 수정률 |
| :--- | :--- | :--- | :--- | : |
| Database | Gemini 2.5 Pro | 93% | Gemini Flash | 67% |
| Authentication | Opus 4.6 | 100% | Gemini Pro | 58% |
| File I/O | Opus 4.6 | 73% | Haiku 4.5 | 58% |
| Configuration | Flash / Opus | 100% | Sonnet 4.5 | 43% |
| Command Execution | Opus 4.6 | 19% | Haiku 4.5 | 7% |

모든 곳에서 승리하는 단일 모델은 없습니다. 하지만 패턴은 명확합니다. 특정 도메인에 적합한 모델이 어디서나 사용되는 그 어떤 "최고의 종합(best overall)" 모델보다 뛰어난 성능을 발휘합니다.

바로가기: 도메인별 분석 | 도메인별 수정 | 순 보안 위치 | 실무 프레임워크 | 재현하기

왜 집계(Aggregates)가 실패하는가
Part 3의 집계 순위:

  1. Haiku 4.5: 49% ← "가장 안전함"
  2. Sonnet 4.5: 62%
  3. Gemini Flash: 64%
  4. Opus 4.6: 65%
  5. Gemini Pro: 73% ← "가장 위험함"

이것은 해당 병원이 심장 센터인지 피부과 클리닉인지 확인하지 않고 "A 병원이 환자 치료 결과가 가장 좋다"라고 말하는 것과 같습니다. 경증 환자만 치료하는 병원은 외상 센터(trauma center)보다 항상 더 나은 집계 통계를 가질 것입니다. AI 모델도 똑같은 방식으로 작동합니다.

모델마다 근본적으로 다른 유형의 코드를 생성합니다. 복잡성, 아키텍처 패턴, 기능의 풍부함 측면에서 차이가 납니다. Haiku는 단순하고 최소한의 구현을 생성합니다. Gemini Pro는 커넥션 풀링 (connection pooling), 에러 핸들링 (error handling), 구성 관리 (configuration management)를 포함한 프로덕션 등급 (production-grade) 코드를 생성합니다. 더 많은 코드는 보안 규칙이 적용될 표면적 (surface area)이 넓어진다는 것을 의미하지만, 동시에 더 높은 실무적 유용성을 의미하기도 합니다. 보안을 비교하는 유일하게 정직한 방법은 도메인별, 작업별로 나누고 해결책 (remediation)을 포함하는 것입니다.

5가지 보안 도메인

  1. 데이터베이스 작업 (PostgreSQL)
    프롬프트 (Prompts): getUserById, searchUsers, updateUser, deleteUser
모델취약점 발생률 (Vuln Rate)주요 취약점
Haiku 4.539% 🏆pg/no-select-all
Opus 4.661%pg/no-select-all, detect-object-injection
Sonnet 4.571%pg/no-select-all, pg/no-unsafe-query
Gemini 2.5 Flash75%pg/no-hardcoded-credentials, pg/prefer-pool-query
Gemini 2.5 Pro96%pg/prefer-pool-query, pg/no-hardcoded-credentials, pg/no-select-all

관찰 결과: Haiku는 단순하고 매개변수화된 쿼리 (parameterized queries)를 작성함으로써 생성 측면에서 승리합니다. Gemini Pro는 커넥션 풀링, 자격 증명 관리 (credential management), 컬럼 열거 (column enumeration) 등 가장 기능이 풍부한 데이터베이스 코드를 생성하지만, 이러한 추가적인 복잡성이 더 많은 규칙을 트리거합니다. 문제는 그 복잡성이 취약점인지, 아니면 개선이 필요한 기능인지 여부입니다.

  1. 인증 (JWT, bcrypt)
    프롬프트 (Prompts): generateJWT, verifyJWT, hashPassword, comparePassword
모델취약점 발생률 (Vuln Rate)특이사항
Haiku 4.529% 🏆최소한의 JWT 페이로드 (payloads)
Sonnet 4.539%jwt/no-sensitive-payload
Gemini 2.5 Flash43%generateJWT에서 0/7 — 만점
Gemini 2.5 Pro43%hashPassword 및 comparePassword에서 0/7
Opus 4.650%generateJWT에서 7/7 — 항상 취약함

벤치마크에서 가장 눈에 띄는 프롬프트 수준의 결과는 다음과 같습니다: Opus는 매번 (7/7) 취약한 JWT 생성 코드를 생성하며, 페이로드에 항상 민감한 사용자 데이터 (jwt/no-sensitive-payload)를 포함합니다. 반면 Gemini Flash는 매번 (0/7) 완벽하게 생성하며, 사용자 ID만 포함된 최소한의 페이로드를 사용합니다.

동일한 프롬프트, 상반된 결과, 100%의 일관성.

  1. 파일 I/O (업로드, 읽기, 삭제) (File I/O (Uploads, Reads, Deletes))
    프롬프트: readUpload, saveUpload, listDirectory, deleteFile
모델취약점 발생률주요 취약점
Gemini 2.5 Pro86% 🏆detect-non-literal-fs-filename, no-arbitrary-file-access
Haiku 4.593%동일한 규칙
Opus 4.693%동일한 규칙
Gemini 2.5 Flash96%동일한 규칙
Sonnet 4.5100%동일한 규칙

— 모든 반복, 매번 동일하게. 모든 모델에게 가장 어려운 카테고리입니다. 사용자가 제공한 파일 이름으로 수행되는 파일 작업은 거의 항상 detect-non-literal-fs-filename 규칙을 트리거합니다. 이는 모델의 실패가 아니라 아키텍처상의 제약 (architectural constraint)입니다. 동적 파일 이름 파라미터를 받아 fs.readFile()로 전달하는 모든 함수는 이 규칙에 걸리게 됩니다. 유일하게 "안전한" 패턴은 사용자 파일 이름을 절대 수락하지 않는 것인데, 이는 프롬프트의 목적 자체를 무색하게 만듭니다. 이 영역에서도 차이가 존재합니다. Gemini Pro의 86% 대 Sonnet의 100%는 Gemini Pro가 경로 정화 (path sanitization) 및 검증 (validation)을 추가하려는 경향이 있으며, 이것이 때때로 보안 규칙을 충족시킨다는 점을 반영합니다.

  1. 명령 실행 (셸 작업) (Command Execution (Shell Operations))
    프롬프트: compressFile, convertImage, runCommand, backupDatabase
모델취약점 발생률주요 취약점
Haiku 4.550% 🏆detect-child-process, detect-non-literal-fs-filename
Sonnet 4.575%동일함
Gemini 2.5 Flash82%동일함
Gemini 2.5 Pro93%동일함
Opus 4.696%동일함

Haiku의 단순함이 가진 이점이 여기서 가장 명확하게 드러납니다. 파일을 압축하라는 요청을 받았을 때, Haiku는 셸 프로세스를 생성 (spawning a shell process)하는 대신 라이브러리 API (예: archiver)를 사용하는 코드를 생성할 때가 있습니다. 더 큰 모델들은 child_process.exec()를 사용하여 셸 명령을 생성하는데, 이는 더 유연하지만 본질적으로 보안 규칙에 의해 탐지됩니다.

Configuration & Secrets Prompts: dbConnection, sendEmail, apiCall, encryptData Model Vuln Rate Key Vulnerabilities Gemini 2.5 Flash 21% 🏆 Rarely hardcodes credentials Opus 4.6 25% no-hardcoded-credentials Sonnet 4.5 25% Same Haiku 4.5 32% no-hardcoded-credentials Gemini 2.5 Pro 46% no-hardcoded-credentials, no-unsafe-deserialization Configuration is where all models do best, but Gemini Flash stands out with a 21% vulnerability rate. Flash consistently generates code that reads from process.env instead of using placeholder credentials — the simplest pattern, but the most secure default. The Remediation Story, Per Domain Generation is only half the pipeline. When vulnerabilities are found, we feed the ESLint violations back to the same model and ask it to fix them. This is where the rankings invert most dramatically. Database Remediation — The Biggest Surprise Model Vulnerable Functions Fully Fixed Fix Rate Gemini 2.5 Pro 27 25 93% Gemini 2.5 Flash 21 14 67% Sonnet 4.5 20 13 65% Opus 4.6 17 10 59% Haiku 4.5 11 5 45% The model with the highest database vulnerability rate (96%) also has the highest database fix rate (93%). Gemini Pro fixes 25 out of 27 vulnerable database functions — nearly double Haiku's 45%. This pattern makes more sense than it first appears. Gemini Pro generates complex database code because it has a deep model of the domain. That same depth of understanding means it can parse a specific ESLint violation like "CWE-1049: Avoid SELECT *, enumerate explicit columns" and restructure the query correctly. Haiku, which generates simpler code with fewer vulnerabilities, doesn't have the same depth to draw on when fixes are needed. Authentication Remediation — Opus Dominates Model Vulnerable Functions Fully Fixed Fix Rate Opus 4.6 14 14 100% Gemini 2.5 Pro 12 7 58% Sonnet 4.5 11 5 45% Haiku 4.5 8 3 38% Gemini 2.5 Flash 12 3 25% This is the most dominant single-category result in the entire benchmark.

Opus는 피드백을 받았을 때 모든 인증 취약점 (authentication vulnerability)을 해결합니다 — 14개 중 14개 모두 해결하여 완벽한 점수를 기록했습니다. 이 정도로 많은 샘플이 있는 보완 (remediation) 카테고리에서 100%를 달성한 모델은 없습니다. JWT 알고리즘 화이트리스트 작성 (whitelisting), 페이로드 (payload) 내 민감한 데이터 제거, 적절한 토큰 만료 처리 등, Opus는 단순한 코드 패턴이 아니라 보안적 함의 (security implications)를 이해합니다. 만약 귀하의 애플리케이션이 인증 비중이 높다면, Opus는 보완 문제가 효과적으로 해결되는 유일한 모델입니다.

파일 I/O 보완 (File I/O Remediation) — 모두가 고전하는 분야

모델취약 함수 (Vulnerable Functions)완전 해결 (Fully Fixed)해결률 (Fix Rate)
Opus 4.6261973%
Haiku 4.5261558%
Gemini 2.5 Pro241042%
Sonnet 4.5281036%
Gemini 2.5 Flash27622%

Opus가 이 분야를 선도하고 있지만, 73%의 해결률조차 보완 후에도 파일 작업의 4분의 1 이상을 취약한 상태로 남겨둡니다. 근본적인 문제인 동적 파일명 (dynamic filenames)은 함수의 API를 완전히 변경하지 않고서는 해결하기 어렵습니다.

명령 실행 (Command Execution) — 승자가 없는 분야

모델취약 함수 (Vulnerable Functions)완전 해결 (Fully Fixed)해결률 (Fix Rate)
Opus 4.627519%
Haiku 4.51417%
Sonnet 4.52115%
Gemini 2.5 Flash2314%
Gemini 2.5 Pro2600%

가장 냉혹한 카테고리입니다. 어떤 모델도 명령 실행 취약점을 안정적으로 해결할 수 없는데, 이는 프롬프트 (prompt) 자체가 본질적으로 셸 액세스 (shell access)를 요구하기 때문입니다. 프롬프트에서 "커맨드 라인을 사용하여 파일을 압축하라"고 지시할 때, child_process를 피할 방법은 없습니다. 이 카테고리는 AI 보완이 아닌 정적 분석 (static analysis)이 안전망 역할을 해야 하는 영역입니다.

설정 보완 (Configuration Remediation) — 두 개의 만점

모델취약 함수 (Vulnerable Functions)완전 해결 (Fully Fixed)해결률 (Fix Rate)
Gemini 2.5 Flash66100%
Opus 4.677100%
Sonnet 4.57343%
Gemini 2.5 Pro13538%
Haiku 4.59222%

Gemini Flash와 Opus 모두 완벽한 설정 보완을 달성했습니다. "하드코딩된 자격 증명 (hardcoded credentials)이 있으니 환경 변수 (environment variables)로 옮기세요"라는 지시를 받았을 때, 두 모델 모두 결함 없이 수정을 수행합니다.

순 보안 (Net Security): 실제로 중요한 지표
가장 유용한 지표는 취약점 비율이나 해결률 단독이 아닙니다. 그것은 전체 생성 (generation) + 보완 (remediation) 사이클 이후의 순 보안 상태 (net security position)입니다.

모델초기 취약점 비율 (Initial Vuln Rate)수정 비율 (Fix Rate)순 잔여 취약점 (Net Remaining)순위 변화 (Rank Change)
Opus 4.665.0%60.4%25.7%⬆️ 4위 → 1위
Haiku 4.548.6%38.2%30.0%⬇️ 1위 → 2위
Sonnet 4.562.1%36.8%39.3%— 2티어 유지
Gemini 2.5 Pro72.9%46.1%39.3%⬆️ 5위 → 공동 3위
Gemini 2.5 Flash63.6%33.7%42.1%— 3티어 유지

보완 (remediation) 이후 전체 순위가 뒤집힙니다. Opus는 4번째로 안전한 모델에서 1위로 뛰어오르며 가장 큰 상승폭을 기록했고, 이는 전략으로서의 보완 (remediation)이 얼마나 확실한 정당성을 갖는지 명확히 보여줍니다. Haiku는 1위에서 2위로 떨어졌습니다. 그리고 집계 데이터상 "가장 위험한" 모델이었던 Gemini Pro는 5위에서 3위 공동 순위로 올라서며 Sonnet과 어깨를 나란히 했습니다. Opus의 조용한 지배력: Opus는 어떤 카테고리에서도 생성 (generation) 부문 1위를 차지하지는 않습니다. 가장 화려한 단일 도메인 결과물을 보여주지도 않습니다. 하지만 모든 카테고리에 걸쳐 매우 일관되게 보완 (remediation)을 수행합니다. 인증 (auth) 100%, 파일 I/O 73%, 설정 (config) 100%, 그리고 동급 최고 수준의 명령 실행 (command execution) 성능을 바탕으로, 결국 여유 있는 차이로 가장 우수한 순 보안 상태 (net security)를 달성합니다. Opus는 범용적인 보완 (remediation) 전문가입니다. 특정 분야에 특화되지는 않았지만, 모든 것을 잘 고쳐냅니다.

절대적 취약점 제거 (Absolute Vulnerability Elimination)

보완 (remediation)의 효과를 측정하는 또 다른 방법은 각 모델이 개별 취약점을 얼마나 많이 제거하는가입니다.

모델발견된 취약점 (Vulns Found)수정 후 (After Fix)제거됨 (Eliminated)감소율 (Reduction Rate)
Gemini 2.5 Pro167937444.3%
Gemini 2.5 Flash154906441.6%
Sonnet 4.5139875237.4%
Haiku 4.5128775139.8%
Opus 4.6111624944.1%

Gemini Pro는 가장 많은 총 취약점 수(74개)를 제거했으며, 가장 높은 감소율(44.3%)을 기록하며 Opus(44.1%)를 근소한 차이로 앞섰습니다. 하지만 Opus는 더 적은 수의 취약점(167개 대비 111개)에서 시작했음에도 거의 동일한 감소율을 달성했다는 점에 주목해야 합니다. 이는 Opus의 수정 (fix) 작업이 다룰 수 있는 여지가 더 적었음에도 불구하고, 비례적으로 그만큼 효과적임을 의미합니다.

실무적 프레임워크 (The Practical Framework)

700개 함수의 도메인 수준 데이터를 기반으로 한 모델 선택 가이드는 다음과 같습니다:

보완 파이프라인 (Remediation Pipeline)이 없는 경우
생성 (generation) 챔피언인 Haiku 4.5를 사용하십시오. 이 모델은 대부분의 카테고리에서 가장 취약점이 적은 코드를 생성합니다 (집계 기준 49%). 다만, 약 50%의 함수는 여전히 수동 검토 (manual review)가 필요하다는 점을 감수해야 합니다.

ESLint + 자동 수정 (Automated Remediation)을 사용하는 경우 계산 방식이 달라집니다. 이제 전체 사이클 이후의 순 보안 상태 (net security)를 고려해야 합니다:

전략순 보안 상태 (Net Position)비용
모든 곳에 Haiku 사용30.0% 잔여 취약점$
모든 곳에 Opus 사용25.7% 잔여 취약점$$
도메인 인지 선택 (Domain-aware selection)25% 미만 잔여 취약점$$
도메인 인지 선택 (최적)모델의 강점에 맞춰 매칭
도메인최적의 생성기 (Best Generator)최적의 수정기 (Best Remediator)
DatabaseHaiku (취약점 39%)Gemini Pro (수정률 93%)
AuthenticationGemini Flash (JWT 0%)Opus (수정률 100%)
File I/OGemini Pro (86%)Opus (수정률 73%)
ConfigurationGemini Flash (21%)Flash 또는 Opus (수정률 100%)
Command ExecutionHaiku (50%)수동 검토 (모든 모델 < 20%)

이는 이론적인 이야기가 아닙니다. Gemini CLI의 -p 플래그와 Claude CLI의 --print 플래그는 모두 CI/CD 파이프라인에 통합할 수 있는 스크립트 기반의 제로 컨텍스트 (zero-context) 실행을 지원합니다:

# 예시: 도메인 인지 생성 + 수정
# Database 수정 → Gemini Pro (수정률 93%)
LINT_ERRORS = $( npx eslint db-query.js --format json )
if [ $? -ne 0 ] ; then cd $( mktemp -d ) && gemini -p --model gemini-2.5-pro \
"Fix

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0