본문 바로가기

리액트 네이티브

리액트 네이티브 앱의 소스 코드 보호

create-react-app로 생성한 프로젝트는 android/app/build.gradle 파일에서 Hermes와 Proguard 설정을 할 수 있도록 되어 있습니다.

 

Hermes는 자바스크립트 코드를 바이트 코드로 변환하여 실행시키는 엔진으로 성능이 향상된다고 합니다. 바이트 코드로 변환되는 과정에서 소스 코드가 직접 노출되지 않지만, hermes-engine-cli를 사용하여 디컴파일할 수 있습니다.

 

Proguard는 소스 코드를 난독화해 주는 도구입니다. Proguard 설정을 하는 것이 소스 코드를 보호하는데 더 효과적이라고 합니다.

 

그런데 build.gradle 파일에서 def enableProguardInReleaseBuilds = true로 설정하고 릴리즈 모드로 앱을 실행해 보면 앱이 바로 종료됩니다.

 

Proguard 난독화 규칙은 android/app/proguard-rules.pro 파일에서 설정할 수 있습니다.

 

FastImage 라이브러리와 Hermes를 사용하고 있었기 때문에, FastImage와 Hermes 규칙을 추가해 주었고, 당연히 이상없이 동작할줄 알았지만 오류가 발생하더군요.

 

그래서 Expo에서 사용된 Proguard 규칙에 FastImage와 Hermes 규칙을 추가해 주었더니 릴리즈 모드에서도 정상적으로 동작했습니다.

 

물론 스크립트 언어라서 소스 코드를 완벽하게 보호할 수는 없지만, Proguard 정도는 간단하게 적용할 수 있기 때문에, 이 정도는 해 주는 것이 좋다고 생각됩니다.

 

추가로 FastImage 외에 Proguard 설정이 필요한 라이브러리는 아직 보지 못했습니다.