React Native에서 Hermes 엔진 도입 후 앱 시작 속도 개선
배경
운영 중인 React Native 앱의 Android 버전에서 초기 로딩 속도가 느리다는 피드백이 지속적으로 들어왔다. 특히 중저가 디바이스에서 흰 화면이 3초 이상 지속되는 문제가 있었다.
React Native 0.64부터 Hermes가 안정화되었다는 소식을 듣고 적용을 결정했다.
Hermes 적용
android/app/build.gradle에서 설정을 변경했다.
project.ext.react = [
enableHermes: true
]
적용 후 클린 빌드가 필요했다.
cd android
./gradlew clean
cd ..
npx react-native run-android
결과
- TTI(Time to Interactive): 2.8초 → 1.7초 (약 39% 개선)
- APK 크기: 52MB → 48MB (약 8% 감소)
- 메모리 사용량: 큰 차이 없음
이슈 대응
Intl API 미지원
날짜 포맷팅에 사용하던 Intl.DateTimeFormat이 Hermes에서 동작하지 않았다. date-fns로 교체했다.
// Before
const formatted = new Intl.DateTimeFormat('ko-KR').format(date);
// After
import { format } from 'date-fns';
const formatted = format(date, 'yyyy-MM-dd');
Proxy 미지원
MobX에서 Proxy를 사용하는 부분이 있었는데, Hermes는 Proxy를 지원하지 않았다. MobX 설정에서 useProxies: "never"를 추가했다.
정리
Hermes 도입으로 Android 성능이 체감 가능할 정도로 개선되었다. iOS는 JavaScriptCore가 충분히 빠르기 때문에 당분간 적용하지 않기로 했다. 일부 호환성 이슈가 있지만 대부분 대안이 존재했고, 성능 개선 효과가 확실했다.