React Native에서 Hermes 엔진 적용 후 앱 시작 속도 개선

배경

운영 중인 React Native 앱의 초기 로딩 속도가 느리다는 피드백이 계속 들어왔다. 특히 저사양 Android 기기에서 앱 시작까지 3~4초가 걸렸다.

React Native 0.64부터 Hermes가 iOS에서도 정식 지원되면서, 이번 기회에 양쪽 플랫폼 모두 적용하기로 했다.

Hermes 적용

android/app/build.gradle에서 설정 추가:

project.ext.react = [
    enableHermes: true
]

iOS는 Podfile에서:

use_react_native!(
  :hermes_enabled => true
)

발생한 문제

1. Intl API 미지원

Hermes는 기본적으로 Intl API를 지원하지 않았다. 날짜 포맷팅에 Intl.DateTimeFormat을 쓰던 부분이 모두 크래시가 났다.

해결책으로 @formatjs/intl-polyfill 시리즈를 추가했다:

import '@formatjs/intl-getcanonicallocales/polyfill';
import '@formatjs/intl-locale/polyfill';
import '@formatjs/intl-datetimeformat/polyfill';

2. Proxy 미지원

MobX에서 Proxy를 사용하는 부분이 있었는데, Hermes는 Proxy를 지원하지 않았다. MobX 설정에서 useProxies: false 옵션을 추가해 해결했다.

import { configure } from 'mobx';

configure({
  useProxies: 'never'
});

성능 측정 결과

Galaxy S9 기준:

  • 적용 전: 3.2초
  • 적용 후: 1.9초 (약 40% 개선)

iPhone 11:

  • 적용 전: 1.8초
  • 적용 후: 1.3초 (약 28% 개선)

APK 크기는 약 2MB 감소했다. Bundle 크기가 줄어든 효과였다.

결론

Hermes 적용으로 체감 가능한 성능 개선을 얻었다. Intl, Proxy 등 일부 JS 기능이 제한되지만, polyfill로 충분히 해결 가능했다.

저사양 기기 사용자 비율이 높은 서비스라면 적용을 고려해볼 만하다.