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>
This commit is contained in:
153
docs/android-signing-setup.md
Normal file
153
docs/android-signing-setup.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user