코딩 컨벤션 자동 추출 - 레거시 코드에서 개발 표준을 역추출하다
문제: 문서화되지 않은 개발 표준
개발팀에게 물어보면 이런 대답이 돌아온다.
"코딩 컨벤션? 있긴 한데... 문서는 오래됐고, 실제론 좀 달라요."
현실은 이렇다:
- 문서는 있지만 outdated - 3년 전에 작성하고 업데이트 안 함
- 암묵적 규칙 - "그냥 다들 이렇게 해요"
- 사람마다 다름 - 선임 개발자 스타일을 따라함
- 코드로만 존재 - 문서화할 시간이 없었음
AI Code Agent를 도입하려 하면 문제가 생긴다.
AI는 우리 팀의 규칙을 모른다.
AI가 따를 수 있는 규칙이 필요하다
Cursor, Continue, Claude Code 같은 도구들은 시스템 프롬프트에 규칙을 넣으면 따른다.
## 코딩 규칙
- 함수명은 camelCase
- 클래스명은 PascalCase
- 상수는 UPPER_SNAKE_CASE
- 들여쓰기는 스페이스 2칸
- 한 함수는 30줄 이내
...
그런데 이걸 누가 작성하나?
- 시니어 개발자가 직접? → 시간이 없다
- 기존 문서에서? → outdated라 못 믿는다
- 처음부터 새로? → 너무 오래 걸린다
해결책: 코드에서 역추출
핵심 아이디어는 간단하다.
이미 작성된 코드가 개발 표준이다.
10년간 축적된 레거시 코드에는 팀의 암묵적 규칙이 녹아있다. 이걸 분석해서 명시적 규칙으로 추출하면 된다.
추출 가능한 컨벤션
| 분류 | 추출 항목 |
|---|---|
| 네이밍 | 변수, 함수, 클래스, 상수 명명 규칙 |
| 구조 | 디렉토리 구조, 파일명 패턴, 모듈 구성 |
| 패턴 | 사용 중인 디자인 패턴, 아키텍처 패턴 |
| 포맷 | 들여쓰기, 줄바꿈, 공백 규칙 |
| 주석 | 주석 스타일, JSDoc/JavaDoc 포맷 |
| 에러 처리 | try-catch 패턴, 에러 타입 정의 |
| API | REST 엔드포인트 규칙, 요청/응답 포맷 |
| DB | 테이블/컬럼 명명, 쿼리 패턴 |
동작 방식
[기존 소스코드]
│
▼
[AST 파싱 + 통계 분석]
│
├── 네이밍 패턴 분석 (변수 1,234개 분석 → camelCase 98%)
├── 함수 길이 분석 (평균 25줄, 최대 100줄)
├── import 패턴 분석 (alias 규칙, 그룹핑)
├── 디렉토리 구조 분석 (components/, utils/, hooks/)
└── 주석 패턴 분석 (JSDoc 사용률 73%)
│
▼
[LLM 기반 규칙 추론]
│
├── 통계 → 자연어 규칙 변환
├── 예외 케이스 식별
└── 우선순위 결정
│
▼
[AI용 프롬프트 생성]
생성되는 프롬프트 예시
## 이 프로젝트의 코딩 컨벤션
### 네이밍 규칙
- 변수/함수: camelCase (예: getUserData, isLoading)
- 클래스/컴포넌트: PascalCase (예: UserService, LoginForm)
- 상수: UPPER_SNAKE_CASE (예: MAX_RETRY_COUNT)
- private 메서드: _prefix (예: _validateInput)
- boolean 변수: is/has/can prefix (예: isValid, hasPermission)
### 함수 작성 규칙
- 한 함수는 30줄 이내 (현재 평균: 25줄)
- 파라미터는 3개 이하 (초과 시 객체로 묶기)
- early return 패턴 사용
- async 함수에는 try-catch 필수
### 파일/폴더 구조
- components/: React 컴포넌트
- hooks/: 커스텀 훅 (use- prefix)
- utils/: 유틸리티 함수
- services/: API 호출 로직
- types/: TypeScript 타입 정의
### 주석 규칙
- 함수에는 JSDoc 스타일 주석 작성
- 복잡한 로직에는 인라인 주석
- TODO 형식: `// TODO(담당자): 내용`
이 규칙을 따라 코드를 작성하세요.
추가 기능 구상
1. 팀별 프로필
프로젝트/팀마다 다른 컨벤션을 프로필로 관리.
profiles:
frontend-team:
source: ./frontend/src
rules: ./profiles/frontend.md
backend-team:
source: ./backend/src
rules: ./profiles/backend.md
2. 컨벤션 위반 탐지
추출된 규칙으로 기존 코드의 위반 사례 탐지.
⚠️ 컨벤션 위반 발견: 152건
위반 유형별:
- 네이밍 규칙 위반: 89건 (snake_case 사용)
- 함수 길이 초과: 34건 (30줄 이상)
- 주석 누락: 29건 (public 함수)
3. 점진적 업데이트
코드가 변경될 때마다 컨벤션 프롬프트도 자동 업데이트.
- Git hook으로 변경 감지
- 새로운 패턴 발견 시 규칙 추가
- 사용되지 않는 패턴 제거
4. 팀 승인 워크플로우
자동 추출 → 팀 리뷰 → 승인 후 적용.
AI가 추출한 규칙을 팀이 검토하고, 수정하고, 최종 승인하면 공식 컨벤션으로 등록.
현실적 과제
1. 정확도
- 코드 양이 적으면 패턴 추출이 부정확
- 여러 스타일이 혼재된 레거시는 어느 걸 따라야 하나?
- 해결: 최신 코드에 가중치, 팀 리뷰로 보정
2. 복잡한 규칙
- 조건부 규칙 (A일 때는 X, B일 때는 Y)
- 암묵적 예외 (특정 모듈에서만 다른 규칙)
- 해결: LLM으로 맥락 이해, 예외 케이스 명시
3. 언어별 차이
- Java와 JavaScript의 컨벤션은 완전히 다름
- 프레임워크별 규칙 (React, Spring, Django)
- 해결: 언어/프레임워크별 분석 모듈
왜 이 도구가 필요한가
시큐아이 프로젝트에서 개발자 인터뷰를 하면서 들은 얘기:
"코딩 컨벤션은 있는데, 문서화가 안 돼있어요. 신입이 오면 코드 보고 파악하라고 해요."
이게 현실이다.
개발 표준 문서 만들 시간 없고, 만들어도 outdated 되고, AI는 규칙 모르고.
코드에서 역추출하면:
- 시간 절약 (자동 분석)
- 최신 상태 유지 (코드가 진실)
- AI 즉시 적용 가능 (프롬프트 자동 생성)
아직 PoC 단계지만, 엔터프라이즈 환경에서 AI 코딩 도구를 제대로 쓰려면 필수가 될 거라 생각한다.
이 기획은 실제 고객사 인터뷰에서 나온 pain point에서 시작했다. "컨벤션 있는데 문서화 안 됨" — 이 한 마디가 아이디어의 출발점이었다.