9.8 코드 복잡도(Complexity) 및 유지보수성 지표 기반 오라클
결정론적 검증 오라클(Deterministic Verification Oracle)이 코드의 문법적 건전성(Syntax Validness), 컴파일 성공 여부, 그리고 보안 취약점 부재까지 확인했다면, 그 다음으로 평가해야 할 척도는 **‘인간 개발자가 이 코드를 지속적으로 유지보수(Maintainable) 할 수 있는가’**에 대한 공학적 품질표준이다.
LLM이 생성한 코드는 종종 놀라울 정도로 잘 동작하지만, 그 내부를 들여다보면 단일 함수에 수백 줄의 로직이 응집되어 있거나, 무의미한 중첩 반복문(Nested Loops)이 떡칠된 소위 ’스파게티 코드(Spaghetti Code)’인 경우가 허다하다. 인공지능은 동작하는 코드를 짜는 데는 능숙하지만, 아키텍처의 미학이나 장기적인 확장성에는 본질적으로 무관심하기 때문이다.
따라서 생성된 코드를 프로덕션 코드베이스(Production Codebase)로 병합(Merge)하기 전에, 엄격한 코드 메트릭(Code Metrics) 기반의 오라클을 통과하도록 리드 타임을 제어해야 한다. 본 절에서는 복잡도와 유지보수성 지표를 수학적으로 정량화하여 AI를 통제하는 전략을 다룬다.
1. 순환 복잡도(Cyclomatic Complexity) 기반의 절대 임계값 통제
가장 보편적이고 강력한 오라클 지표는 토마스 맥케이브(Thomas McCabe)가 고안한 순환 복잡도(Cyclomatic Complexity, CC)다. 이는 소스 코드 내에 존재하는 독립적인 실행 경로(Path)의 개수를 정량적으로 산출한다. if, for, while, case 문이 중첩될수록 이 점수는 기하급수적으로 상승한다.
결정론적 오라클 파이프라인에서는 개별 함수(Function/Method) 라인 레벨에서 엄격한 CC 임계값(Threshold)을 하드코딩해야 한다.
- 통과(Pass) 기준: 단일 함수의 CC 점수가
10이하일 것. - Fail Fast 원칙: 만약 AI가 생성한 메서드의 CC가
15를 초과한다면, 해당 코드는 즉각 거부(Reject)하라. 그리고 AI에게 특수한 자가 수정 프롬프트(“주어진 코드를 단일 책임 원칙(SRP)에 따라 3개 이상의 헬퍼 함수로 분리하여 리팩토링하라. 각 함수의 순환 복잡도를 5 이하로 낮춰라”)를 역주입하라.
2. 인지 복잡도(Cognitive Complexity)를 활용한 가독성 평가
순환 복잡도가 기계적인 실행 경로를 센다면, SonarSource 사에서 제안한 인지 복잡도(Cognitive Complexity)는 “사람이 코드를 읽고 이해하기 얼마나 어려운가“에 가중치를 둔다.
예를 들어, 같은 분기문이라도 직관적인 switch 문은 감점이 적지만, 다중 중첩된 if-else 내부의 삼항 연산자나 재귀 호출은 혹독한 페널티를 받는다. AI가 종종 뽐내는 ’한 줄짜리 과도한 파이썬 List Comprehension’이나 ’난해한 정규식’은 인지 복잡도 오라클 망에서 즉결 처분 대상이 된다.
이 지표 역시 상용 정적 분석 툴(예: SonarQube)을 연결하여 API 응답 내 점수를 파싱한 후, 기준치 초과 시 즉시 CI 파이프라인의 에러 코드 1(exit 1)로 매핑하여 통제 라인을 굳건히 해야 한다.
3. 중복 코드 탐지(Code Duplication) 및 추상화 강제
AI 모델의 고질적인 버릇 중 하나는, 재사용 가능한 작은 클래스로 추상화하는 대신 복사-붙여넣기(Copy-paste)식의 코드 중복을 남발하여 분량을 부풀리는 것이다(특히 수많은 HTML/CSS/React 컴포넌트를 짤 때 이 현상이 심화된다).
코드 복제 비율(Duplication Ratio)을 측정하는 오라클을 배치하라.
- 동일한 토큰 묶음(보통 50~100 토큰 단위)이 파일 간, 혹은 동일 파일 내에서 반복적으로 등장하는지 AST(Abstract Syntax Tree) 단위로 스캔한다.
- 프로젝트 전반의 중복도 비율이 3% (혹은 사전 정의된 값) 이상으로 치솟는다면 코드를 반환하지 말고, “중복되는 UI 로직을 공통
Component로 분리하여 재사용성을 확보하라“는 명령을 내려 통제하라.
문서화 주석(Docstring) 누락 여부 검사 파라미터 일치 등과 융합된 복잡도 평가 오라클은, AI 코딩 에이전트를 영원한 주니어 레벨에서 탈피시키고 시니어 개발자의 엄격한 리뷰 문화를 내재화(Internalization)시키는 가장 기계적이고 공학적인 규율 교관(Drill Sergeant)이 될 것이다.