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

153 lines
4.1 KiB
Markdown

# Android 코드 서명 설정 가이드
## 1. Android 키스토어 생성
### 키스토어 파일 생성
```bash
# 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
```
### 키스토어 정보 확인
```bash
keytool -list -v -keystore keystore/release.keystore -alias zellyy-finance-key
```
## 2. Android 빌드 설정
### key.properties 파일 생성 (로컬 개발용)
```bash
# 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`에서 릴리즈 서명 설정이 올바른지 확인:
```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로 인코딩하는 방법
```bash
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. 빌드 테스트
### 로컬 릴리즈 빌드 테스트
```bash
# 웹 앱 빌드
npm run build:prod
# Capacitor 동기화
npm run mobile:sync
# Android 릴리즈 번들 빌드
cd android
./gradlew bundleRelease
# 생성된 파일 확인
ls -la app/build/outputs/bundle/release/
```
### APK 빌드 테스트
```bash
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 로그 확인
### 디버깅 명령어
```bash
# Gradle 빌드 상세 로그
./gradlew bundleRelease --info --stacktrace
# 키스토어 정보 확인
keytool -list -v -keystore keystore/release.keystore
```