9.4.1 프로젝트 전용 코딩 컨벤션(Style Guide) 학습과 강제화
LLM은 방대한 깃허브(GitHub)의 코드를 섭취하며 자라났기 때문에, 그들의 코딩 스타일은 일종의 ’전 세계 개발자들의 평균치’에 수렴해 있다. 그러나 엔터프라이즈 환경에서 요구하는 코딩 컨벤션(Coding Convention)은 보편적인 평균이 아니라, 해당 프로젝트나 팀 내에서 합의된 **특정적이고 편협한 규칙의 집합(Specific Ruleset)**이다.
어떤 조직은 들여쓰기를 스페이스 2칸으로 맹신하고, 어떤 조직은 4칸을 강제한다. 변수명을 지을 때 약어(Abbreviation) 사용을 전면 금지하는 곳이 있는가 하면, 컴포넌트 선언부에 반드시 JSDoc 주석을 달아야만 PR(Pull Request)이 승인되는 곳도 있다. LLM에게 이런 세부적인 조직의 문화를 매 프롬프트마다 자연어로 구구절절 설명하는 것은 토큰 낭비일 뿐만 아니라 환각을 유발하는 지름길이다. 오라클 시스템은 텍스트 프롬프트를 넘어, 기계가 판독할 수 있는 설정 파일을 매개로 한 강력한 강제화(Enforcement) 파이프라인으로 전환해야 한다.
1. 린터 설정 파일(.eslintrc, pyproject.toml)의 동기화
가장 이상적인 오라클 아키텍처는 인간 개발자가 사용하는 린터의 룰셋과 AI 오라클이 코드 검증에 사용하는 룰셋을 단일 진실 공급원(SSOT, Single Source of Truth)으로 일치시키는 것이다.
- 오라클 코어 모듈은 타겟 프로젝트의 루트 디렉터리에 존재하는
.eslintrc.json,.pylintrc, 혹은checkstyle.xml파일을 직접 파싱(Parsing)하거나 해당 파일을 물고 있는 린팅 프로세스를 백그라운드 워커(Worker)로 연동한다. - LLM이 코드를 파일(가상 메모리 포함)로 뱉어내는 즉시, 오라클은 이 설정 파일이 가리키는 룰에 따라 코드를 감사(Audit)한다.
- 이를 통해 오라클 설계자는 프롬프트에 *“변수를 카멜 케이스로 써”*라고 적는 대신, 단순히 린터 룰에
camelcase: "error"룰을 켜두는 것만으로 수백 가지의 코딩 컨벤션을 LLM에 무결점으로 강제할 수 있게 된다.
2. RAG를 활용한 컨벤션 문서의 지식화 및 In-Context Learning
만약 조직의 코딩 가이드라인이 단순히 린터 설정 파일로 커버되지 않는 추상적인 아키텍처 규칙(예: “Controller에서는 절대 데이터베이스 세션을 직접 호출하지 마라”)을 포함하고 있다면, 이는 [Chapter 8]에서 다룬 RAG(Retrieval-Augmented Generation) 시스템과 결합해야 한다.
- 사내 위키나 Markdown으로 작성된
STYLE_GUIDE.md를 벡터 데이터베이스(Vector DB)나 Prompt 템플릿의 컨텍스트(Context Length) 스펙트럼 안에 정적 주입(Static Injection)한다. - 에이전트(Agent)가 코드를 생성하기 직전, 오라클은 RAG 시스템을 호출하여 현재 작성하려는 코드의 도메인과 관련된 컨벤션 규칙(예: 예외 처리 룰, 로그 작성 포맷)을 5개 내외로 추출하여 프롬프트의
<Context>블록에 강제로 끼워 넣는다 (In-context Learning). - 사후 분석 파이프라인에서는 LLM-as-a-Judge 모델이 가동되어, 코드가 RAG로 주입된 사내 가이드라인과 논리적으로 일치하는지를 이중 감사(Double Audit)한다.
3. 코드 스타일 위반에 대한 자가 교정(Self-Correction)의 한계
린터가 찾아낸 스타일 위반(예: “Trailing comma missing”)을 LLM에게 다시 피드백하여 고치라고 명령하는 것은, 계산 리소스의 심각한 낭비다.
LLM은 인지적 추론(Reasoning)에 특화된 엔진이지, 단순히 문자열의 끝에 쉼표(,)를 달거나 스페이스바를 누르는 하단부(Bottom-tier)의 텍스트 편집 작업에 쓰이는 것은 비용 효율성이 극히 떨어진다. 종종 한 줄을 수정하라고 보냈음에도 LLM이 전체 함수를 10번이나 다시 뱉어내는 과잉 수정(Over-correction) 현상이 터지기도 한다.
따라서 오라클 시스템 설계자는 **‘인간의 룰(Convention)은 LLM에게 프롬프트로 숙지시키되, 사소한 문자열 수준의 규격 위반은 LLM 피드백 루프를 태우지 말고 앞서 언급한 포매터(Formatter: Black, Prettier)의 Auto-fix 기능으로 기계가 조용히 물리적 세탁을 해버리는 방향’**으로 파이프라인의 책임 소재를 영리하게 분리해야만, 고가용성의 코드 생성 파이프라인을 구축할 수 있다.