Reference

01. 비전과 범위

문제 정의, 목표/비목표, 핵심 제약 조건, 사용자 시나리오

Source: docs/01-vision-and-scope.md

01. 비전과 범위

1. 문제 정의

AI Agent(Claude Code, Cursor, Copilot Workspace 등)로 생성된 "바이브코딩" 프로젝트는 동작은 하지만 품질이 천차만별이다. 사람 리뷰어가 일일이 들여다보지 않으면 다음과 같은 문제가 누적된다.

AI 산출물에서 반복 관찰되는 안티패턴

안티패턴설명왜 AI에서 자주 발생하는가
BIG CLOC 파일하나의 파일이 수천 라인AI는 컨텍스트 안에서 "한 파일에 다 넣는" 응답을 선호. 파일 분리는 멀티스텝 작업이라 생략됨
거대 함수한 함수가 수백 라인, 깊은 중첩요구사항을 한 번에 구현하면서 추출 리팩토링을 하지 않음
순환 참조모듈/패키지 간 import cycle전체 의존 그래프를 보지 못하고 지역적으로 import를 추가
중복 코드거의 동일한 블록이 여러 파일에 산재기존 코드를 찾기보다 새로 생성하는 것이 빠름. GitClear(2024)는 AI 도입 후 copy/paste 코드 비율이 유의하게 증가했다고 보고
God Object모든 책임이 한 클래스/구조체에 집중SOLID(특히 SRP) 위반. 점진적 기능 추가가 한 곳에 누적
보안 무시하드코딩된 시크릿, 인젝션 취약 패턴Pearce et al.(2022)은 Copilot 생성 코드의 약 40%가 보안 취약 시나리오에서 취약점을 포함함을 보임
자원 관리 부재close/free/defer 누락, 무한정 고루틴 생성행복 경로(happy path)만 생성하는 경향
죽은 코드 / 잠재 위험사용되지 않는 함수, 빈 catch, TODO 방치이전 시도의 잔재가 정리되지 않음

2. 목표

  1. 진단: 위 안티패턴들을 정량 메트릭으로 측정하여 프로젝트 건강 점수를 산출한다. 기본 점수는 jam-lite, 선택적 통합 점수는 jam-full이다.
  2. 근거 제시: 모든 감점은 파일:라인 단위로 정확히 지목되어야 한다. "점수가 왜 이런가"에 대해 CSV로 전수 근거를 제공한다.
  3. 연구 기반: 메트릭 정의와 임계값은 가능한 한 학술 연구·산업 표준(McCabe, Halstead, Chidamber-Kemerer, Maintainability Index, SQALE, SonarSource Cognitive Complexity 등)에 근거한다. → 02-metrics-catalog.md
  4. CI 게이트로 사용 가능: exit code와 임계값 설정으로 "이 점수 미만이면 머지 금지" 같은 자동화에 쓸 수 있다.

3. 비목표 (Non-goals)

4. 핵심 제약 조건

제약함의
오프라인, 빌드 불가컴파일러 풀 타입 해석 불가 → AST 수준 분석 + 휴리스틱 심볼 해석. import 해석은 파일 경로/모듈 메타파일 기반
Go 구현, 단일 실행파일CGo 의존 없이 크로스 컴파일. Go AST + 내부 경량 프론트엔드 + 일부 임베드 tree-sitter WASM(wazero) → 04-architecture.md
Win/Linux/Mac경로 처리(filepath), 줄바꿈(CRLF), 인코딩(BOM) 모두 대응
AST/Language Server 사용 OKGo AST는 기본 사용. LSP 서버 실행은 외부 프로세스 의존이라 기본 비활성(선택적 확장)
정확한 파일:라인 지목모든 finding은 위치 정보 필수. 파일 단위 메트릭도 대표 라인(예: 함수 시작)을 기록

5. 사용자 시나리오

시나리오 A — 바이브코딩 결과 검수

$ jam scan ./my-vibe-project
JAM Lite Score: 62/100 (Grade C)
  Architecture : 55  (순환 참조 3건, God file 2건)
  Complexity   : 70  (CCN>15 함수 12개)
  Duplication  : 48  (중복률 18.2%)
  Security     : 60  (하드코딩 시크릿 1건, SQL 문자열 결합 4건)
  Hygiene      : 77
→ jam-report.md, jam-detail.csv 생성됨

프로덕션 게이트가 필요하면 full 세트를 사용한다.

$ jam full ./my-vibe-project --out reports/jam
JAM Full Score: 78/100 (Grade C)
  jam-lite   62/100
  test       84/100
  security   92/100
→ jam-full-report.md, jam-full.json 생성됨

시나리오 B — CI 게이트

$ jam scan . --fail-under 70
# exit code 1 → 파이프라인 실패

시나리오 C — 시계열 추적

주기적으로 스캔하여 점수 변화를 추적(CSV를 누적 비교). jam diff로 이전 jam-detail.csv 대비 새 finding/해결 finding을 확인하고 CI 게이트에 연결.

6. 성공 기준

  1. 의도적으로 망가뜨린 픽스처 프로젝트에서 모든 안티패턴 카테고리를 검출한다.
  2. 잘 관리되는 유명 오픈소스(예: 표준적인 Go/TS 프로젝트)는 B 이상을 받는다 — 오탐으로 점수가 무너지지 않아야 한다.
  3. 10만 LOC 프로젝트를 일반 노트북에서 30초 내 스캔한다.
  4. 모든 감점 항목이 CSV에서 파일:라인으로 추적 가능하다.