Files
zellyy-finance/docs/android-signing-setup.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

4.1 KiB

Android 코드 서명 설정 가이드

1. Android 키스토어 생성

키스토어 파일 생성

# Android 프로젝트 루트에서 실행
cd android/app
mkdir -p keystore

# 키스토어 생성 (1회만 실행)
keytool -genkey -v -keystore keystore/release.keystore -alias zellyy-finance-key -keyalg RSA -keysize 2048 -validity 10000

# 입력할 정보:
# - 키스토어 비밀번호: [안전한 비밀번호]
# - 키 비밀번호: [안전한 비밀번호]
# - 이름과 조직: Zellyy Finance Team
# - 조직 단위: Development
# - 도시: Seoul
# - 시/도: Seoul
# - 국가 코드: KR

키스토어 정보 확인

keytool -list -v -keystore keystore/release.keystore -alias zellyy-finance-key

2. Android 빌드 설정

key.properties 파일 생성 (로컬 개발용)

# android/key.properties
storePassword=your_keystore_password
keyPassword=your_key_password
keyAlias=zellyy-finance-key
storeFile=keystore/release.keystore

build.gradle 설정 확인

android/app/build.gradle에서 릴리즈 서명 설정이 올바른지 확인:

android {
    signingConfigs {
        release {
            if (project.hasProperty('storeFile')) {
                storeFile file(project.property('storeFile'))
                storePassword project.property('storePassword')
                keyAlias project.property('keyAlias')
                keyPassword project.property('keyPassword')
            }
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

3. GitHub Secrets 설정

GitHub 리포지토리 Settings > Secrets and variables > Actions에서 다음 시크릿들을 추가:

Android 관련 시크릿

  • ANDROID_KEYSTORE_BASE64: 키스토어 파일을 base64로 인코딩한 값
  • ANDROID_KEYSTORE_PASSWORD: 키스토어 비밀번호
  • ANDROID_KEY_PASSWORD: 키 비밀번호
  • ANDROID_KEY_ALIAS: 키 별칭 (zellyy-finance-key)

키스토어 파일을 base64로 인코딩하는 방법

base64 -i android/app/keystore/release.keystore | pbcopy
# 결과를 ANDROID_KEYSTORE_BASE64 시크릿에 저장

환경 변수 시크릿

  • VITE_SUPABASE_URL: Supabase URL
  • VITE_SUPABASE_ANON_KEY: Supabase Anonymous Key
  • VITE_CLERK_PUBLISHABLE_KEY: Clerk Publishable Key
  • VITE_SENTRY_DSN: Sentry DSN

4. Google Play Console 설정

서비스 계정 생성

  1. Google Cloud Console에서 프로젝트 생성/선택
  2. APIs & Services > Credentials에서 서비스 계정 생성
  3. 서비스 계정 키(JSON) 다운로드
  4. Google Play Console에서 서비스 계정에 앱 권한 부여

GitHub 시크릿 추가

  • GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: 서비스 계정 JSON 파일 내용

5. 빌드 테스트

로컬 릴리즈 빌드 테스트

# 웹 앱 빌드
npm run build:prod

# Capacitor 동기화
npm run mobile:sync

# Android 릴리즈 번들 빌드
cd android
./gradlew bundleRelease

# 생성된 파일 확인
ls -la app/build/outputs/bundle/release/

APK 빌드 테스트

cd android
./gradlew assembleRelease

# 생성된 파일 확인
ls -la app/build/outputs/apk/release/

6. 보안 고려사항

키스토어 관리

  • 키스토어 파일은 절대 git에 커밋하지 않음
  • .gitignore*.keystore, key.properties 추가
  • 키스토어 백업을 안전한 곳에 보관
  • 비밀번호는 안전한 패스워드 매니저에 저장

CI/CD 보안

  • GitHub Secrets 사용으로 민감 정보 보호
  • 빌드 로그에 비밀번호 노출 방지
  • 릴리즈 브랜치에서만 서명된 빌드 생성

7. 문제 해결

일반적인 오류들

  • Could not find keystore: 키스토어 경로 확인
  • Keystore password incorrect: 비밀번호 확인
  • Key alias not found: 별칭 이름 확인
  • Build failed: Gradle 로그 확인

디버깅 명령어

# Gradle 빌드 상세 로그
./gradlew bundleRelease --info --stacktrace

# 키스토어 정보 확인
keytool -list -v -keystore keystore/release.keystore