9.9.3 컴파일러 에러 유형에 따른 자동 수정 템플릿 적용
자가 수정(Self-Correction) 파이프라인에서 가장 극적인 리소스 절약(Token Optimization)은, LLM에게 프롬프트를 다시 쏘기 전에 기계적인 결함을 **규칙 엔진(Rule-based Engine)이 먼저 가로채어 자동으로 교정(Auto-fix)**해 버리는 것이다.
모든 컴파일 에러를 해결하기 위해 수천 원짜리 거대 언어 모델 인퍼런스(Inference)를 태울 필요는 없다. 세미콜론(;) 하나가 빠졌거나, 쓰이지 않는 변수(Unused Variable)가 남아있어서 빌드가 실패한 경우, 사람조차 IDE의 자동 완성 단축키(Alt+Enter)로 해결하는 것을 굳이 AI에게 “이 코드가 왜 틀렸는지 분석해 줘“라고 물어보는 것은 시간과 토큰의 낭비다.
따라서 오라클 미들웨어는 컴파일러가 내뿜는 에러 코드를 분석하여, 단순하고 기계적인 패치가 가능한 오류들은 LLM을 거치지 않고 **‘자동 수정 템플릿(Auto-fix Template)’**을 적용하여 파이프라인을 고속 우회(Fast-path)시켜야 한다.
1. Syntax 및 Formatting 에러의 자체 해결(Pre-processing)
가장 빈번하게 발생하는 구문 오류나 린트(Lint) 에러는 대부분 정해진 알고리즘으로 해결할 수 있다.
- Missing Imports (Unresolved Reference): TypeScript에서
Cannot find name 'axios'에러가 발생하면, 오라클 러너는 LLM을 호출하지 않고 AST 파서를 돌려import axios from 'axios';를 파일 최상단에 자동 삽입(Inject)하고 재컴파일한다. - Unused Variables: 선언만 되고 사용되지 않는 변수로 인해 컴파일러가 워닝(Warn-as-Error)을 뱉는 경우, 단순히 AST를 통해 해당 변수 선언 줄을 삭제하거나 주석 처리한다(또는
_로 변수명 치환). - Indentation & Brackets: 괄호 개수가 맞지 않거나 들여쓰기가 망가진 경우, 오라클은
Prettier나gofmt같은 포매터를 강제 실행하여 물리적 문법 구성을 강제로 정렬한다.
이러한 전처리 단계에서 해결되는 에러가 전체의 약 30%를 차지하며, 이는 피드백 루프의 과부하를 막는 필터(Filter) 역할을 한다.
2. 컴파일러의 ’제안(Suggestions)’을 직접 수용
현대의 똑똑한 컴파일러(예: Rust의 rustc, Elm 컨파일러)는 단순히 에러를 뱉는 데 그치지 않고, 친절하게 해결책을 함께 제시한다.
가령 Rust 컴파일러가 다음과 같은 에러를 발생시켰다고 하자:
error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
help: consider changing this to be mutable: `mut data`
오라클의 파서는 help: 또는 consider라는 예약어를 감지하고, 컴파일러가 제시한 패치(Patch) 스니펫을 소스코드에 바로 적용(Apply)해 버린다. 이는 LLM의 추론 능력을 빌리지 않고, 오직 결정론적인 컴파일러의 지성에 의존하여 코드를 자가 수정하는 가장 비용 효율적인 메커니즘이다.
3. 템플릿 기반의 하이브리드 자동 수정
만약 에러가 단순한 구문 오류를 넘어서 로직의 교정이 필요한 부분이라면, 오라클 시스템은 전면적인 LLM 재생성(Full Regeneration)을 요청하기 전에 **‘정형화된 프롬프트 템플릿’**을 끼워 넣어 LLM의 추론 공간을 극도로 제한한다.
예를 들어, 데이터베이스 모델과 DTO 간의 매핑 객체에서 필드 미스매치가 발생했을 때, LLM에게 자유를 주면 전체 클래스를 갈아엎을 위험이 있다. 이럴 때 오라클은 다음과 같은 제한적인 템플릿을 생성한다.
“현재
UserDTO에 ‘createdAt’ 필드가 누락되어 Type Error가 발생했습니다. 다른 로직은 절대 건드리지 말고, [A 클래스의 정의]를 참고하여 [B 생성자] 라인에 누락된 필드를 매핑하는 단 한 줄의 코드만 반환하십시오.”
이처럼 컴파일러 에러 유형에 사전 매핑(Pre-mapped)된 자동 수정 템플릿과 린터 기반의 코드 패칭은 비싼 LLM 모델 호출 횟수를 획기적으로 줄이고, 파이프라인의 레이턴시(Latency)를 밀리초 단위로 방어하는 핵심 가속 엔진(Acceleration Engine)이다. 기계가 낸 오류를 기계 스스로의 규칙으로 먼저 다듬는 것, 그것이 자율형 오라클 체계의 효율성을 담보하는 첫 번째 스텝이다.