Files
zellyy-finance/docs/ci-cd-setup-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

6.9 KiB

CI/CD 파이프라인 설정 가이드

개요

Zellyy Finance 프로젝트는 GitHub Actions를 사용하여 완전히 자동화된 CI/CD 파이프라인을 구축했습니다. 이 가이드는 파이프라인 설정과 사용 방법을 설명합니다.

파이프라인 구조

워크플로우 흐름

코드 푸시 → 테스트 → 웹 빌드 → 모바일 빌드 → 릴리즈 → 앱스토어 배포

지원 플랫폼

  • Web: Vercel 배포 (별도 워크플로우)
  • Android: Google Play Store (AAB/APK)
  • iOS: App Store Connect / TestFlight (IPA)

GitHub Secrets 설정

1. Android 관련 Secrets

Secret 이름 설명 생성 방법
ANDROID_KEYSTORE_BASE64 키스토어 파일 (base64) base64 -i release.keystore | pbcopy
ANDROID_KEYSTORE_PASSWORD 키스토어 비밀번호 키스토어 생성 시 설정한 비밀번호
ANDROID_KEY_PASSWORD 키 비밀번호 키 생성 시 설정한 비밀번호
ANDROID_KEY_ALIAS 키 별칭 기본값: zellyy-finance-key

2. iOS 관련 Secrets

Secret 이름 설명 생성 방법
IOS_CERTIFICATES_P12_BASE64 배포 인증서 (base64) Keychain에서 P12로 내보내기 후 base64 변환
IOS_CERTIFICATES_P12_PASSWORD P12 파일 비밀번호 P12 내보내기 시 설정한 비밀번호
APPSTORE_ISSUER_ID App Store Connect API 발급자 ID App Store Connect > API 키 생성
APPSTORE_KEY_ID App Store Connect API 키 ID API 키 생성 시 표시되는 키 ID
APPSTORE_PRIVATE_KEY App Store Connect API 개인 키 .p8 파일 내용 전체

3. Google Play Store Secrets

Secret 이름 설명 생성 방법
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON 서비스 계정 JSON Google Cloud Console에서 서비스 계정 키 생성

4. 앱 환경 변수 Secrets

Secret 이름 설명
VITE_SUPABASE_URL Supabase 프로젝트 URL
VITE_SUPABASE_ANON_KEY Supabase Anonymous Key
VITE_CLERK_PUBLISHABLE_KEY Clerk Publishable Key
VITE_SENTRY_DSN Sentry DSN

워크플로우 트리거 조건

자동 트리거

  • PR 생성/업데이트: 테스트 + 디버그 빌드만 실행
  • main 브랜치 푸시: 전체 파이프라인 실행 (릴리즈 빌드 + 배포)
  • 태그 푸시 (v*): 전체 파이프라인 실행

수동 트리거

GitHub Actions 탭에서 workflow_dispatch 이벤트로 수동 실행 가능

빌드 환경별 설정

Development 환경

npm run build:dev
# - 앱 이름: Zellyy Finance (Dev)
# - 앱 ID: com.zellyy.finance.dev
# - 배경색: 노란색 톤 (#FEF3C7)

Staging 환경

npm run build:staging
# - 앱 이름: Zellyy Finance (Beta)
# - 앱 ID: com.zellyy.finance.beta
# - 배경색: 파란색 톤 (#DBEAFE)

Production 환경

npm run build:prod
# - 앱 이름: Zellyy Finance
# - 앱 ID: com.zellyy.finance
# - 배경색: 기본색 (#F8FAFC)

로컬 테스트

1. 디버그 키스토어 생성

npm run keystore:debug

2. 빌드 파이프라인 테스트

npm run pipeline:test

3. 단계별 테스트

# 빌드 검증
npm run pipeline:validate

# 모바일 빌드
npm run mobile:build

# Android 디버그 빌드
cd android && ./gradlew assembleDebug

# iOS 디버그 빌드 (macOS만)
npm run ios:open

버전 관리 자동화

Semantic Release 구성

  • feat: Minor 버전 증가 (1.0.0 → 1.1.0)
  • fix: Patch 버전 증가 (1.0.0 → 1.0.1)
  • BREAKING CHANGE: Major 버전 증가 (1.0.0 → 2.0.0)

커밋 메시지 규칙

# 새 기능
git commit -m "feat: 거래 내역 필터링 기능 추가"

# 버그 수정
git commit -m "fix: 로그인 에러 수정"

# 중대한 변경
git commit -m "feat!: 데이터베이스 스키마 변경

BREAKING CHANGE: 기존 데이터와 호환되지 않음"

자동 버전 동기화

# package.json → Android/iOS 버전 동기화
npm run version:sync

배포 프로세스

1. 개발 → 배포 흐름

1. 기능 개발 (feature branch)
2. PR 생성 → 자동 테스트 실행
3. main 브랜치 머지 → 자동 릴리즈 빌드
4. Semantic Release → 버전 태그 생성
5. 앱스토어 자동 업로드

2. Google Play Store 배포

  • 트랙: Internal Testing (내부 테스트)
  • 파일 형식: AAB (Android App Bundle)
  • 자동 업로드: main 브랜치 빌드 시

3. App Store / TestFlight 배포

  • 트랙: TestFlight (베타 테스트)
  • 파일 형식: IPA
  • 자동 업로드: main 브랜치 빌드 시

모니터링 및 알림

빌드 상태 확인

  • GitHub Actions 탭에서 실시간 빌드 상태 확인
  • 이메일 알림 (빌드 실패 시)
  • Slack 연동 (선택사항)

아티팩트 관리

  • 보관 기간: 90일
  • 다운로드: GitHub Actions Artifacts 섹션
  • 크기 제한: 2GB per artifact

보안 고려사항

Secrets 관리

  • GitHub Secrets 사용으로 민감 정보 보호
  • 환경별 Secret 분리
  • 정기적인 키 로테이션

빌드 보안

  • 서명된 릴리즈 빌드만 배포
  • 소스맵 업로드 (Sentry)
  • 의존성 보안 스캔

문제 해결

일반적인 빌드 오류

Android 빌드 실패

# 키스토어 관련 오류
Error: Keystore file not found
→ Solution: ANDROID_KEYSTORE_BASE64 Secret 확인

# 버전 충돌
Error: Version conflict
→ Solution: android/app/build.gradle 버전 확인

iOS 빌드 실패

# 인증서 오류
Error: Code signing failed
→ Solution: IOS_CERTIFICATES_P12_BASE64 Secret 확인

# 프로비저닝 프로파일 오류
Error: No matching provisioning profile
→ Solution: Apple Developer Portal에서 프로파일 확인

환경 변수 오류

# Undefined environment variable
Error: VITE_SUPABASE_URL is not defined
→ Solution: GitHub Secrets에 모든 필수 환경 변수 설정

디버깅 도구

로컬 디버깅

# 빌드 로그 상세 출력
npm run android:build -- --info

# 키스토어 정보 확인
npm run keystore:info

# 의존성 확인
npm audit

CI 디버깅

# GitHub Actions 로그 다운로드
gh run download [run-id]

# 특정 job 재실행
gh workflow run mobile-build.yml

성능 최적화

빌드 시간 단축

  • 의존성 캐싱 활성화
  • 병렬 빌드 사용
  • 불필요한 단계 제거

아티팩트 크기 최적화

  • Tree shaking 활성화
  • Code splitting 적용
  • 이미지 압축

확장 계획

추가 예정 기능

  • Slack 알림 연동
  • 자동 스크린샷 테스트
  • E2E 테스트 자동화
  • 성능 벤치마크 자동화

다중 환경 지원

  • Staging 환경 자동 배포
  • Feature branch 미리보기
  • A/B 테스트 지원

이 문서는 Zellyy Finance CI/CD 파이프라인의 완전한 가이드입니다. 추가 질문이나 문제가 있으면 개발팀에 문의하세요.