React Native 앱 번들 크기 최적화 작업 기록

문제 상황

안드로이드 APK 크기가 52MB에 달해 배포 전 최적화가 필요했다. 특히 저사양 기기 사용자가 많은 서비스 특성상 용량 문제는 치명적이었다.

원인 분석

npx react-native-bundle-visualizer로 번들을 분석한 결과:

  • Moment.js의 모든 locale 파일이 포함됨 (500KB)
  • 사용하지 않는 Lottie 애니메이션 파일들
  • 디버그용 소스맵이 릴리즈 빌드에 포함

적용한 최적화

1. ProGuard 설정 강화

// android/app/build.gradle
android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

2. Moment.js 대신 date-fns 사용

// Before
import moment from 'moment';
moment(date).format('YYYY-MM-DD');

// After
import { format } from 'date-fns';
format(date, 'yyyy-MM-dd');

번들 크기 8MB 감소.

3. 이미지 리소스 최적화

  • PNG를 WebP로 변환 (화질 손실 거의 없음)
  • Lottie 애니메이션 중 미사용 파일 제거
  • react-native-fast-image 도입으로 캐싱 개선

4. Split APK 적용

android {
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a', 'arm64-v8a'
            universalApk false
        }
    }
}

ABI별로 APK를 분리해 각 아키텍처당 10MB씩 절약.

결과

  • 최종 APK 크기: 28~32MB (ABI별)
  • 앱 설치 시간 체감상 개선
  • Play Store 다운로드 전환율 소폭 상승

번들 분석 도구를 정기적으로 돌려보는 것이 중요하다는 것을 다시 한번 확인했다.