---
name: changelog-generator
description: "git log에서 사용자 친화적 CHANGELOG.md를 자동 생성. Keep a Changelog 포맷 준수, 한국어/영어 이중 지원. ship 스킬의 CHANGELOG 생성 기능과 보완적 관계."
triggers:
  - "changelog"
  - "CHANGELOG"
  - "변경 이력"
  - "릴리즈 노트"
  - "release notes"
  - "changelog generate"
  - "changelog 생성"
usage: "/changelog-generator [--from <tag|commit>] [--to <tag|commit>] [--lang ko|en] [--version <semver>]"
---

# /changelog-generator — git 히스토리 기반 CHANGELOG 자동 생성

> 출처: ComposioHQ/awesome-claude-skills `changelog-generator` 스킬 참조
> 우리 시스템에 맞게 커스텀 (Keep a Changelog 포맷, 한국어/영어 이중 지원, ship 스킬과 보완적 관계)

git 히스토리를 스캔하여 기술적 커밋 메시지를 사용자 친화적인 CHANGELOG.md로 자동 변환한다.
`/ship` 스킬이 배포 워크플로우의 일부로 CHANGELOG를 생성하는 것과 달리, 이 스킬은 CHANGELOG 전용으로 독립 실행된다.

## User-invocable

사용자가 `/changelog-generator`를 입력하면 이 스킬을 실행한다.

## Arguments

- `/changelog-generator` — 마지막 태그부터 HEAD까지, 한국어, 버전 자동 추론
- `/changelog-generator --from v1.2.0 --to v1.3.0` — 특정 버전 범위 지정
- `/changelog-generator --from v1.2.0` — 특정 태그부터 HEAD까지
- `/changelog-generator --lang en` — 영어 출력 (기본: `ko`)
- `/changelog-generator --version 2.1.0` — 버전 직접 지정 (기본: semver 자동 추론)
- `/changelog-generator --lang en --version 2.1.0 --from v2.0.0` — 전체 옵션 조합

---

## Step 0: Pre-flight 확인

```bash
# Git 저장소 확인
ls -la .git 2>/dev/null || echo "ERROR: Git 저장소가 아닙니다"

# 태그 목록 확인
git tag --sort=-version:refname | head -10

# 현재 브랜치 확인
git branch --show-current
```

- Git 저장소가 아니면 중단.
- `--from` 미지정 시 가장 최근 태그를 자동 탐지. 태그가 없으면 최초 커밋부터 HEAD까지.
- `--to` 미지정 시 HEAD 사용.

---

## Step 1: git 히스토리 스캔

```bash
# 범위 내 커밋 수집
git log <from>..<to> --pretty=format:"%H|%s|%b|%an|%ad" --date=short

# 예시: 마지막 태그부터 HEAD
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%H|%s|%b|%an|%ad" --date=short

# 변경된 파일 통계 (심각도 판단에 활용)
git diff <from>..<to> --stat
```

- 커밋 해시, 제목(subject), 본문(body), 작성자, 날짜 수집.
- 변경 줄 수 집계: VERSION bump 자동 추론 시 참조.

---

## Step 2: 노이즈 필터링

아래 패턴의 커밋은 CHANGELOG에서 **제외**한다:

| 제외 패턴 | 이유 |
|-----------|------|
| `chore:`, `ci:`, `build:` | 내부 인프라 작업 |
| `refactor:` (기능 변경 없음) | 사용자에게 무관 |
| `test:`, `spec:` | 테스트 코드 변경 |
| `style:`, `format:` | 코드 포맷팅만 |
| `merge branch`, `merge pull request` | 병합 커밋 |
| `bump version`, `chore: release` | 버전 범프 자동 커밋 |
| `Co-Authored-By:` 관련 커밋 | 봇 생성 메타 커밋 |

> 예외: `refactor:` 중 API 인터페이스 변경이 포함된 경우 `### Changed`로 포함.

---

## Step 3: 변경사항 카테고리화

Conventional Commits 규칙 기반으로 분류:

| 카테고리 | 이모지 | 커밋 prefix | Keep a Changelog 섹션 |
|----------|--------|-------------|----------------------|
| 새 기능 | ✨ | `feat:` | `### Added` |
| 개선/변경 | 🔧 | `refactor:` (기능 변경), `perf:`, `enhance:` | `### Changed` |
| 버그 수정 | 🐛 | `fix:` | `### Fixed` |
| 삭제 | 🗑️ | `remove:`, `delete:` + `feat:` (삭제 내용) | `### Removed` |
| 보안 | 🔒 | `security:`, `fix(security):` | `### Security` |
| 브레이킹 체인지 | ⚠️ | `BREAKING CHANGE:`, `feat!:`, `fix!:` | `### Breaking Changes` |
| 의존성 | 📦 | `deps:`, `chore(deps):` | `### Dependencies` |

> prefix가 없는 커밋은 내용 분석 후 가장 적절한 카테고리로 자동 배치.

---

## Step 4: 기술 언어 → 사용자 친화적 언어 변환

커밋 메시지를 사용자가 이해하기 쉬운 언어로 변환한다.

**변환 원칙:**
- 기술 용어 최소화 (내부 변수명, 파일 경로 제거)
- 사용자 관점으로 서술 ("~를 수정" → "~이 올바르게 동작합니다")
- 불필요한 세부 구현 제거

**변환 예시:**

```
원본: fix: resolve NullPointerException in UserAuthService.validateToken()
변환 (ko): 토큰 유효성 검사 오류 수정
변환 (en): Fixed token validation error

원본: feat: add Redis caching layer to product listing API endpoint
변환 (ko): 상품 목록 조회 속도 개선 (캐싱 적용)
변환 (en): Improved product listing performance with caching

원본: BREAKING CHANGE: remove deprecated /api/v1/users endpoint
변환 (ko): ⚠️ [브레이킹] /api/v1/users 엔드포인트 제거 (v2 사용 권장)
변환 (en): ⚠️ [Breaking] Removed /api/v1/users endpoint (use v2)
```

---

## Step 5: 버전 자동 추론

`--version` 미지정 시 변경사항 기반으로 semver 자동 결정:

```
브레이킹 체인지 존재  → MAJOR 업 (X.0.0) — 반드시 사용자 확인
feat: 1개 이상 존재   → MINOR 업 (x.Y.0)
fix: 만 존재          → PATCH 업 (x.y.Z)
```

- 마지막 git 태그에서 현재 버전 파악.
- `VERSION` 파일이 있으면 해당 버전 참조.
- MAJOR 업 시 사용자에게 확인 요청 후 진행.

---

## Step 6: CHANGELOG.md 작성

Keep a Changelog(https://keepachangelog.com) 포맷 준수:

```markdown
# Changelog

모든 주요 변경사항이 이 파일에 기록됩니다.
포맷: [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)
버전 관리: [Semantic Versioning](https://semver.org/lang/ko/)

## [Unreleased]

## [2.1.0] - 2026-04-12

### ✨ Added (신규 기능)
- 보험 청구 자동 심사 기능 추가
- 다크 모드 지원

### 🔧 Changed (변경/개선)
- 상품 목록 조회 속도 개선 (캐싱 적용)

### 🐛 Fixed (버그 수정)
- 토큰 유효성 검사 오류 수정
- 모바일 화면에서 폼 레이아웃 깨짐 수정

### 🔒 Security (보안)
- SQL Injection 취약점 패치 (A03)

### ⚠️ Breaking Changes
- /api/v1/users 엔드포인트 제거 (v2 사용 권장)

## [2.0.1] - 2026-03-15
...

[Unreleased]: https://github.com/org/repo/compare/v2.1.0...HEAD
[2.1.0]: https://github.com/org/repo/compare/v2.0.1...v2.1.0
[2.0.1]: https://github.com/org/repo/compare/v2.0.0...v2.0.1
```

**이중 언어 옵션 (`--lang ko` / `--lang en`):**
- `ko` (기본): 섹션 헤더에 한국어 부제 포함 (예: `### ✨ Added (신규 기능)`)
- `en`: 섹션 헤더 영문만 (예: `### ✨ Added`)

---

## Step 7: CHANGELOG.md 파일 업데이트

```bash
# 기존 CHANGELOG.md 확인
ls -la CHANGELOG.md 2>/dev/null

# 없으면 새로 생성, 있으면 최신 버전 항목을 맨 위에 삽입
# (기존 내용은 보존, ## [Unreleased] 아래에 새 항목 추가)
```

- 기존 `## [Unreleased]` 섹션이 있으면 그 아래에 새 버전 블록 삽입.
- 기존 `CHANGELOG.md`가 없으면 전체 파일 새로 생성.
- 파일 말미에 비교 링크(diff URL) 자동 생성.

---

## 산출물

- `CHANGELOG.md` 생성 또는 업데이트
- 터미널에 변경사항 요약 출력:
  ```
  [changelog-generator] v2.0.1 → v2.1.0
    ✨ Added: 2건
    🔧 Changed: 1건
    🐛 Fixed: 2건
    🔒 Security: 1건
  CHANGELOG.md 업데이트 완료
  ```

---

## ship 스킬과의 관계

| 항목 | `/ship` | `/changelog-generator` |
|------|---------|------------------------|
| 목적 | 배포 워크플로우 전체 | CHANGELOG 전용 |
| 실행 시점 | PR 생성 직전 (Step 6) | 독립 실행 가능 |
| 범위 | `origin/main..HEAD` 고정 | 임의 버전 범위 지정 가능 |
| 언어 지원 | 단일 (자동) | `--lang ko/en` 선택 |
| 버전 관리 | VERSION 파일 연동 | semver 자동 추론 + 직접 지정 |

`/ship` 실행 중 CHANGELOG가 부족하다고 판단되면 `/changelog-generator`를 먼저 실행하고 `ship`을 재개하는 방식으로 보완적으로 사용한다.

---

## Important Rules

- **원본 커밋 메시지를 그대로 복사하지 않는다.** 반드시 사용자 친화적 언어로 변환.
- **노이즈 커밋은 포함하지 않는다.** `chore:`, `test:`, `style:` 등 내부 커밋 제외.
- **브레이킹 체인지는 반드시 상단 강조 표시.** `⚠️` 이모지 + `[브레이킹]` 레이블 필수.
- **기존 CHANGELOG 내용은 절대 삭제하지 않는다.** 최상단에 새 항목 삽입만 허용.
- **Keep a Changelog 포맷 준수 필수.** 섹션 순서: Added → Changed → Deprecated → Removed → Fixed → Security.

---

**스킬 버전**: v1.0
**작성일**: 2026-04-12
**출처**: ComposioHQ/awesome-claude-skills `changelog-generator` 커스텀
**담당**: 스바로그 (백엔드), 개발6팀
