✨ 주요 개선사항: - 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>
4.1 KiB
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 URLVITE_SUPABASE_ANON_KEY: Supabase Anonymous KeyVITE_CLERK_PUBLISHABLE_KEY: Clerk Publishable KeyVITE_SENTRY_DSN: Sentry DSN
4. Google Play Console 설정
서비스 계정 생성
- Google Cloud Console에서 프로젝트 생성/선택
- APIs & Services > Credentials에서 서비스 계정 생성
- 서비스 계정 키(JSON) 다운로드
- 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