entropy-scan · git:20260826.34a9b20 · 2026-08-26 · sha256 5f9da67f1903073f

entropy-scan git:20260826.34a9b20A

Immutable. This exact content is served forever at /api/v1/blob/5f9da67f1903073f.

---
name: entropy-scan
description: 코드베이스 엔트로피 측정 및 기술 부채 탐지 스킬
compatibility: omp
---

# Entropy Scan Skill

코드베이스의 엔트로피(무질서도)를 측정하고 개선이 필요한 영역을 탐지합니다.

## 엔트로피 지표

### 순환 복잡도 (Cyclomatic Complexity)
```
임계값:
- 1-5: 단순, 유지보수 용이
- 6-10: 보통, 주의 필요
- 11-15: 복잡, @AX:WARN 태그 추가
- 16+: 매우 복잡, 즉시 리팩토링 권장
```

### 결합도 (Coupling)
```bash
# Go 의존성 분석
go list -f '{{.ImportPath}} {{.Imports}}' ./... | sort

# 순환 의존성 탐지
go build ./... 2>&1 | grep "import cycle"
```

### 중복 코드 (Code Duplication)
```
탐지 기준:
- 동일 로직 3회 이상 반복
- 유사 함수 5개 이상
- 같은 상수 여러 파일에 정의
```

### 파일 크기 (File Size)
```
임계값:
- 200줄 이하: 정상
- 200-500줄: 주의
- 500-1000줄: 분리 권장
- 1000줄 이상: 즉시 분리
```

## 엔트로피 스캔 절차

### 1단계: 핫스팟 식별
변경 빈도 × 복잡도로 핫스팟 파악:
```bash
# 자주 변경되는 파일 (최근 3개월)
git log --since="3 months ago" --format="%H" | \
  xargs -I{} git diff-tree --name-only -r {} | \
  sort | uniq -c | sort -rn | head -20
```

### 2단계: 복잡도 측정
```bash
# Go: gocyclo 사용
gocyclo -over 10 ./...

# 함수 길이 분석
awk '/^func /{f=$0} /^}$/{if(NR-s>50) print NR-s, FILENAME, f; s=NR}' \
  $(find . -name "*.go" -not -name "*_test.go")
```

### 3단계: 개선 우선순위 결정
```
우선순위 = 변경 빈도 × 복잡도 × 결합도

P1 (즉시): 점수 > 100, 핵심 비즈니스 로직
P2 (이번 스프린트): 점수 50-100
P3 (백로그): 점수 < 50
```

## 출력 형식

```markdown
## Entropy Scan 결과

### 요약
- 스캔 파일 수: N
- 발견된 이슈: N
- 최우선 개선 파일: [파일명]

### 핫스팟 Top 5
| 파일 | 복잡도 | 변경 횟수 | 엔트로피 점수 |
|------|--------|-----------|-------------|

### 권장 조치
1. [파일명] - [이슈 설명] - [권장 조치]
```