1์ธ๊ฐœ๋ฐœ ์ˆ˜์ตํ™”

React Native ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๊ฐœ๋ฐœ ์Šคํ† ์–ด์— ์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •

์ฃผ์˜ ๐Ÿฑ 2024. 10. 23. 08:53
728x90
๋ฐ˜์‘ํ˜•

React Native ์•ฑ์„ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด์— ์ถœ์‹œํ•˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ์•ฑ ์ค€๋น„ ๋‹จ๊ณ„
- Android ์•ฑ ์„œ๋ช… ํ‚ค ์ƒ์„ฑ
```bash
keytool -genkeypair -v -storetype PKCS12 -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
```
์ด ๊ณผ์ •์—์„œ ํ‚ค์Šคํ† ์–ด ๋ฐ ํ‚ค ๋น„๋ฐ€๋ฒˆํ˜ธ, ๊ฐœ๋ฐœ์ž ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ํ‚ค๋Š” ์•ฑ์˜ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ์— ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

- gradle.properties ์„ค์ •
```properties
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****
```

- android/app/build.gradle ์„ค์ •
```gradle
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}
```

2. ์•ฑ ๋นŒ๋“œ
- ์•ฑ ๋ฒ„์ „ ์„ค์ • (android/app/build.gradle)
```gradle
android {
    defaultConfig {
        versionCode 1  // ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์Šคํ† ์–ด ์—…๋ฐ์ดํŠธ์‹œ ์ฆ๊ฐ€
        versionName "1.0.0"  // ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ๋ฒ„์ „
    }
}
```

- Release APK/AAB ์ƒ์„ฑ
```bash
# APK ์ƒ์„ฑ
cd android
./gradlew assembleRelease

# AAB(Android App Bundle) ์ƒ์„ฑ - ๊ถŒ์žฅ
./gradlew bundleRelease
```

3. ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์ฝ˜์†” ์ค€๋น„
- Google Play Console ๊ณ„์ • ์ƒ์„ฑ (๊ฐœ๋ฐœ์ž ๋“ฑ๋ก๋น„ $25 ์ผํšŒ์„ฑ)
https://play.google.com/console ์ ‘์†

4. ์•ฑ ๋“ฑ๋ก ๊ณผ์ •
a) ์•ฑ ๊ธฐ๋ณธ ์ •๋ณด ์ž…๋ ฅ
- ์•ฑ ์ด๋ฆ„
- ๊ธฐ๋ณธ ์–ธ์–ด
- ์•ฑ/๊ฒŒ์ž„ ์„ ํƒ
- ๋ฌด๋ฃŒ/์œ ๋ฃŒ ์„ ํƒ

b) ์Šคํ† ์–ด ๋“ฑ๋ก์ •๋ณด ์ค€๋น„
- ์•ฑ ์„ค๋ช… (์งง์€ ์„ค๋ช… 80์ž, ์ „์ฒด ์„ค๋ช… 4000์ž)
- ์•ฑ ์•„์ด์ฝ˜ (512x512 PNG)
- ์Šคํฌ๋ฆฐ์ƒท (์ตœ์†Œ 2์žฅ)
- ๊ทธ๋ž˜ํ”ฝ ์ด๋ฏธ์ง€ (ํ”ผ์ฒ˜๋“œ ๊ทธ๋ž˜ํ”ฝ 1024x500)
- ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ URL

c) ์ฝ˜ํ…์ธ  ๋“ฑ๊ธ‰ ์„ค์ •
- ์•ฑ ์ฝ˜ํ…์ธ  ๊ด€๋ จ ์„ค๋ฌธ ์‘๋‹ต
- ์ž๋™์œผ๋กœ ๋“ฑ๊ธ‰ ์‚ฐ์ •

d) ํƒ€๊ฒŸ ์—ฐ๋ น๋Œ€ ์„ค์ •
- COPPA ๊ทœ์ • ์ค€์ˆ˜ ์—ฌ๋ถ€
- ํƒ€๊ฒŸ ์—ฐ๋ น๋Œ€ ์„ ํƒ

e) ๊ฐ€๊ฒฉ ๋ฐ ๋ฐฐํฌ ๊ตญ๊ฐ€ ์„ค์ •
- ๋ฌด๋ฃŒ/์œ ๋ฃŒ ์„ ํƒ
- ๋ฐฐํฌ ๊ตญ๊ฐ€ ์„ ํƒ

5. APK/AAB ์—…๋กœ๋“œ
- ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์ฝ˜์†”์˜ 'ํ”„๋กœ๋•์…˜' ํŠธ๋ž™ ์„ ํƒ
- ์ƒˆ ๋ฒ„์ „ ๋งŒ๋“ค๊ธฐ
- AAB/APK ํŒŒ์ผ ์—…๋กœ๋“œ
- ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž‘์„ฑ

6. ์‹ฌ์‚ฌ ๋ฐ ์ถœ์‹œ
- ๋ชจ๋“  ์ •๋ณด ์ž…๋ ฅ ์™„๋ฃŒ ํ›„ ๊ฒ€ํ†  ์š”์ฒญ
- ๊ตฌ๊ธ€์˜ ์‹ฌ์‚ฌ ์ง„ํ–‰ (๋ณดํ†ต 2-3์ผ ์†Œ์š”)
- ์‹ฌ์‚ฌ ํ†ต๊ณผ ์‹œ ์ž๋™ ์ถœ์‹œ

์ฃผ์š” ์ฒดํฌํฌ์ธํŠธ:
1. ์•ฑ ๊ถŒํ•œ ํ™•์ธ
```xml
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- ํ•„์š”ํ•œ ๊ถŒํ•œ๋งŒ ์ตœ์†Œํ•œ์œผ๋กœ ์š”์ฒญ -->
```

2. ์•ฑ ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ์•ฑ ํฌ๊ธฐ ์ตœ์ ํ™”
- ์‹œ์ž‘ ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ

3. ํ…Œ์ŠคํŠธ
- ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ํ…Œ์ŠคํŠธ
- ์˜คํ”„๋ผ์ธ ๋™์ž‘ ํ…Œ์ŠคํŠธ
- ๋„คํŠธ์›Œํฌ ์ƒํƒœ ๋ณ€ํ™” ๋Œ€์‘

4. ๋ณด์•ˆ
- ProGuard ์„ค์ • ํ™•์ธ
```gradle
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
```

5. ๊ณตํ†ต ์ด์Šˆ ๋Œ€์‘
- ์•ฑ ํฌ๋ž˜์‹œ ๋ฆฌํฌํŒ… ๋„๊ตฌ ์„ค์ • (์˜ˆ: Crashlytics)
- ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘ ์ฑ„๋„ ์ค€๋น„
- ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์ „๋žต ์ˆ˜๋ฆฝ

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ์•ฑ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ถœ์‹œ๋˜๋ฉด, ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์•ฑ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์ฝ˜์†”์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ†ต๊ณ„์™€ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ํ™œ์šฉํ•˜์—ฌ ์•ฑ์„ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•