Files
zellyy-finance/docs/version-management-guide.md
hansoo 8343b25439 feat: Stage 2 TypeScript 타입 안전성 개선 - any 타입 83개 → 62개 대폭 감소
 주요 개선사항:
- any 타입 83개에서 62개로 21개 수정 (25% 감소)
- 모든 ESLint 에러 11개 → 0개 완전 해결
- 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소

🔧 수정된 파일들:
• PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가
• categoryUtils.ts - 불필요한 any 캐스트 제거
• TransactionsHeader.tsx - BudgetData 인터페이스 정의
• storageUtils.ts - generic 타입과 unknown 타입 적용
• 각종 error handler들 - Error | {message?: string} 타입 적용
• test 파일들 - 적절한 mock 인터페이스 정의
• 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체

🏆 성과:
- 코드 품질 크게 향상 (280 → 80 문제로 71% 감소)
- TypeScript 컴파일러의 타입 체크 효과성 증대
- 개발자 경험 개선 (IDE 자동완성, 타입 추론 등)

🧹 추가 정리:
- ESLint no-console/no-alert 경고 해결
- Prettier 포맷팅 적용으로 코드 스타일 통일

🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:08:51 +09:00

314 lines
8.1 KiB
Markdown

# 버전 관리 및 릴리즈 자동화 가이드
## 개요
Zellyy Finance 프로젝트는 Conventional Commits과 Semantic Release를 사용하여 완전히 자동화된 버전 관리 시스템을 구축했습니다. 커밋 메시지를 기반으로 버전을 자동으로 관리하고, 릴리즈 노트를 생성하며, 모든 플랫폼의 버전을 동기화합니다.
## 시스템 구성 요소
### 1. Semantic Release 설정 (`.releaserc.json`)
```json
{
"branches": ["main", {"name": "beta", "prerelease": true}],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/exec",
"@semantic-release/git"
]
}
```
### 2. 버전 동기화 스크립트 (`scripts/sync-versions.cjs`)
- `package.json` 버전을 Android `build.gradle`과 iOS `Info.plist`에 동기화
- 시맨틱 버전을 빌드 코드로 변환 (예: `1.2.3``10203`)
- 검증 모드 지원 (`--check` 플래그)
### 3. 릴리즈 후 처리 스크립트 (`scripts/release-version.cjs`)
- Semantic Release 완료 후 자동 실행
- 모바일 플랫폼 버전 동기화
- Capacitor 동기화
## 커밋 메시지 규칙 (Conventional Commits)
### 기본 형식
```
<type>(<scope>): <description>
[optional body]
[optional footer]
```
### 지원하는 타입과 버전 영향
| 타입 | 설명 | 버전 영향 | 예시 |
|------|------|-----------|------|
| `feat` | 새로운 기능 | **Minor** (1.0.0 → 1.1.0) | `feat: 거래 필터링 기능 추가` |
| `fix` | 버그 수정 | **Patch** (1.0.0 → 1.0.1) | `fix: 로그인 오류 수정` |
| `perf` | 성능 개선 | **Patch** (1.0.0 → 1.0.1) | `perf: 차트 렌더링 최적화` |
| `docs` | 문서 변경 | **Patch** (1.0.0 → 1.0.1) | `docs: API 문서 업데이트` |
| `refactor` | 리팩토링 | **Patch** (1.0.0 → 1.0.1) | `refactor: 컴포넌트 구조 개선` |
| `revert` | 되돌리기 | **Patch** (1.0.0 → 1.0.1) | `revert: feat: 거래 필터링 기능 제거` |
| `style` | 스타일 변경 | **없음** | `style: 코드 포맷팅` |
| `test` | 테스트 추가/수정 | **없음** | `test: 로그인 테스트 추가` |
| `build` | 빌드 시스템 변경 | **없음** | `build: Webpack 설정 변경` |
| `ci` | CI 설정 변경 | **없음** | `ci: GitHub Actions 업데이트` |
| `chore` | 기타 변경 | **없음** | `chore: 의존성 업데이트` |
### Breaking Changes (Major 버전)
Major 버전 증가 (1.0.0 → 2.0.0)를 위해서는 다음 중 하나를 사용:
1. **느낌표 표기법:**
```
feat!: 새로운 API 인터페이스 도입
```
2. **Footer 표기법:**
```
feat: 사용자 인증 시스템 개편
BREAKING CHANGE: 기존 auth API가 제거되고 새로운 인터페이스로 교체됨
```
## 릴리즈 프로세스
### 자동 릴리즈 흐름
```mermaid
graph TD
A[커밋 & 푸시] --> B[GitHub Actions 트리거]
B --> C[테스트 실행]
C --> D[빌드 검증]
D --> E[Semantic Release 실행]
E --> F[버전 분석]
F --> G[릴리즈 노트 생성]
G --> H[package.json 업데이트]
H --> I[버전 동기화 스크립트 실행]
I --> J[모바일 플랫폼 동기화]
J --> K[Git 커밋 & 태그]
K --> L[GitHub Release 생성]
L --> M[앱스토어 배포]
```
### 1. 개발 단계
```bash
# 기능 브랜치에서 개발
git checkout -b feature/new-transaction-filter
# 커밋 (Conventional Commits 규칙 준수)
git commit -m "feat: 거래 내역 필터링 기능 추가
사용자가 날짜, 카테고리, 금액 범위로 거래를 필터링할 수 있는 기능을 추가했습니다."
# PR 생성 후 main 브랜치에 머지
```
### 2. 자동 릴리즈 (main 브랜치 푸시 시)
```bash
# GitHub Actions에서 자동 실행:
# 1. 테스트 & 빌드
# 2. Semantic Release
# 3. 버전 업데이트 (1.0.0 → 1.1.0)
# 4. 릴리즈 노트 생성
# 5. GitHub Release 생성
# 6. 앱스토어 배포
```
## 릴리즈 노트 형식
자동 생성되는 릴리즈 노트 예시:
```markdown
# [1.1.0](https://github.com/user/repo/compare/v1.0.0...v1.1.0) (2024-01-15)
## ✨ Features
* 거래 내역 필터링 기능 추가 ([a1b2c3d](https://github.com/user/repo/commit/a1b2c3d))
* 다크 모드 지원 ([e4f5g6h](https://github.com/user/repo/commit/e4f5g6h))
## 🐛 Bug Fixes
* 로그인 세션 만료 오류 수정 ([i7j8k9l](https://github.com/user/repo/commit/i7j8k9l))
## ⚡ Performance Improvements
* 차트 렌더링 성능 50% 개선 ([m0n1o2p](https://github.com/user/repo/commit/m0n1o2p))
```
## 버전 동기화
### 플랫폼별 버전 관리
| 플랫폼 | 파일 | 버전 필드 | 예시 값 |
|--------|------|-----------|---------|
| **Web** | `package.json` | `version` | `"1.2.3"` |
| **Android** | `android/app/build.gradle` | `versionName`, `versionCode` | `"1.2.3"`, `10203` |
| **iOS** | `ios/App/App/Info.plist` | `CFBundleShortVersionString`, `CFBundleVersion` | `"1.2.3"`, `10203` |
### 버전 코드 변환 규칙
```javascript
// "1.2.3" → 10203
function versionToCode(version) {
const [major, minor, patch] = version.split('.').map(Number);
return major * 10000 + minor * 100 + patch;
}
```
### 수동 버전 동기화
```bash
# 모든 플랫폼 버전 동기화
npm run version:sync
# 버전 일관성 검사
npm run version:check
# 릴리즈 후 처리 (일반적으로 자동 실행)
npm run version:post-release
```
## GitHub Actions 설정
### Workflow 트리거
```yaml
on:
push:
branches: [main] # 자동 릴리즈
tags: ['v*'] # 수동 릴리즈
pull_request:
branches: [main] # 테스트만 실행
```
### 주요 단계
1. **Test & Lint**: 코드 품질 검증
2. **Build Web**: 웹 앱 빌드
3. **Build Mobile**: Android/iOS 앱 빌드
4. **Release**: Semantic Release 실행
5. **Deploy**: 앱스토어 자동 배포
## 환경별 설정
### Beta 릴리즈 (베타 브랜치)
```bash
# 베타 브랜치로 푸시하면 prerelease 생성
git checkout -b beta
git push origin beta
# → v1.1.0-beta.1 릴리즈 생성
```
### 핫픽스 릴리즈
```bash
# main에서 직접 핫픽스
git checkout main
git commit -m "fix: 긴급 보안 패치"
git push origin main
# → 자동으로 v1.0.1 릴리즈 생성
```
## 모니터링 및 디버깅
### 릴리즈 상태 확인
```bash
# 최신 릴리즈 정보
gh release list
# 특정 릴리즈 상세 정보
gh release view v1.1.0
# GitHub Actions 실행 상태
gh run list --workflow=mobile-build.yml
```
### 일반적인 문제 해결
#### 1. 버전 동기화 실패
```bash
# 수동으로 버전 확인
npm run version:check
# 문제가 있으면 수동 동기화
npm run version:sync
```
#### 2. Semantic Release 실패
```bash
# 커밋 메시지 형식 확인
git log --oneline -5
# 수동으로 semantic-release 실행 (로컬)
npx semantic-release --dry-run
```
#### 3. 모바일 빌드 실패
```bash
# Android 버전 확인
grep -E "versionCode|versionName" android/app/build.gradle
# iOS 버전 확인 (macOS only)
/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ios/App/App/Info.plist
```
## 베스트 프랙티스
### 1. 커밋 메시지 작성
✅ **좋은 예시:**
```bash
feat(auth): OAuth 2.0 로그인 지원 추가
Google, GitHub OAuth 프로바이더를 통한 소셜 로그인 기능을 구현했습니다.
- Google OAuth 2.0 클라이언트 설정
- GitHub OAuth 앱 연동
- 기존 이메일 로그인과 호환성 유지
Closes #123
```
❌ **나쁜 예시:**
```bash
update login
fix bug
change ui
```
### 2. 릴리즈 전 체크리스트
- [ ] 모든 테스트 통과
- [ ] 타입 체크 통과
- [ ] 린트 검사 통과
- [ ] 빌드 검증 완료
- [ ] 브레이킹 체인지 문서화
- [ ] 버전 호환성 확인
### 3. 긴급 상황 대응
```bash
# 문제가 있는 릴리즈 되돌리기
git revert <commit-hash>
git commit -m "revert: v1.1.0 롤백 - 로그인 오류"
git push origin main
# → 자동으로 v1.1.1 패치 릴리즈 생성
```
---
이 가이드는 Zellyy Finance의 자동화된 버전 관리 시스템의 완전한 참조 문서입니다. 추가 질문이나 문제가 있으면 개발팀에 문의하세요.