Expo vs React Native CLI - 목적에 맞는 선택하기
회사에서 신규 프로젝트를 앱개발로 진행함에 따라 앱서비스가 필요해졌다. 세 프레임워크를 모두 이용해본 후 각각의 장단점에 따라 선택이 달라질 수 있어 정리해보았다. 우선 팀 내에 모든 인원이 웹개발자라 어떤 프레임워크를 이용하는 것이 가장 팀에 적합한지 판단해줄 사람이 필요하여 프레임워크를 이용해보고 적합한 선택지를 제안하기로 하였다. 현재 크게 3가지의 하이브리드 앱개발 프레임워크가 존재한다.
- flutter
- expo
- rn cli
결론적으로 flutter는 초기 러닝커브가 클 수 있고, 렌더링 엔진의 차이(dart vm)가 있어 앱 번들 사이즈가 크다. 또한 js 기반의 rn, expo 대비 커뮤니티의 크기가 작아 라이브러리의 다양성이나 정보의 격차가 체감될 정도이다.
따라서 요즘 급부상하는 expo와 rn-cli 중 선택하고자 하였다. expo는 zero conifg의 빠른 셋팅과 expo go를 통한 디버깅의 편리함 eas build를 통한 별도의 빌드 파이프라인 없이 자동화가 가능하였다. 다만 rn의 브릿지와 native 코드를 전부 고정하고 javascript만 컨트롤 할 수 있기에 native 기능에 굉장히 제한적인 단점이 있었다. 반면 react-native-cli를 사용하는 경우, ios의 podfile, java의 gradle등 원하는 버전관리 및 네이티브 기능의 사용이 자유롭다. 초기 설정이 매우 번거롭고, expo에 비해 관리의 리소스가 많이 들어간다.
결국 목적은 명확하다 (expo vs rn-cli)
현재 RN 공식 docs에 가면 공식적으로 expo 사용을 권장하고 있다. 과거 expo에 비해 네이티브 기능의 지원도 확대되었으며 사용성 또한 굉장히 만족스럽게 변경되었다. 그러나 큰 서비스를 만들고자 한다면 여전히 rn-cli가 자율성이 높으며, 이는 초기 서비스 시작 시, 고려해야할 요소이다. 이하는 두 플랫폼을 비교해보고 목적에 맞는 선택을 위한 정보를 제공한다.
1) 개발 속도 및 접근성
- Expo는 초보 개발자나 빠르게 프로토타입을 만들어야 하는 경우 유용하다. 여러 설정을 신경 쓸 필요 없이 ‘expo init’ 명령어로 간단하게 시작할 수 있고, 많은 네이티브 기능이 기본적으로 포함되어 있다.
- React Native CLI는 초기 설정이 복잡하고 시간이 더 걸리지만, 프로젝트의 세세한 부분까지 설정할 수 있어 더 높은 유연성을 제공하다. 네이티브 코드에 접근할 수 있어, 복잡한 기능을 구현하거나 성능 최적화를 하는 데 유리하다.
2) 네이티브 코드 접근성
- Expo는 네이티브 코드 수정이 불가능하거나 제한적이다. Expo SDK에 포함된 기능 외에는 추가가 어렵기 때문에 특정 라이브러리나 기능을 사용해야 할 때 Expo의 한계를 느낄 수 있다. 예를 들어, Expo에서 지원하지 않는 네이티브 기능을 사용하려면 “Ejected” 상태로 전환해야 하며, 이는 Expo의 장점을 잃고 React Native CLI와 유사한 환경으로 변경된다.
- React Native CLI는 네이티브 코드에 대한 완전한 제어가 가능하다. Java, Swift, Kotlin 등의 네이티브 모듈을 자유롭게 추가하거나 수정할 수 있어 특정 플랫폼별 요구 사항을 구현할 때 매우 유용하다.
3) 빌드 및 배포
- Expo는 Expo 서버를 통해 빌드를 관리하므로, 개발자가 빌드 환경 설정을 별도로 하지 않아도 된다. 이는 초보 개발자에게 편리한 기능이지만, 빌드 시간이 다소 길어질 수 있고 Expo 서버에 의존하게 된다. 또한 Expo의 무료 계정은 배포 속도나 기능 면에서 제한이 있다.
- React Native CLI는 Xcode와 Android Studio 등 로컬 환경에서 직접 빌드해야 하지만, 자유로운 환경 설정과 최적화가 가능하다. 또한 빌드 과정이 완전히 로컬에서 이루어지기 때문에 네트워크 환경에 영향을 덜 받는다.
4) 성능 및 최적화
- Expo는 다양한 기능을 포함한 SDK로 인해 앱이 약간 무거워질 수 있다. 많은 기능이 프레임워크에 포함되어 있는 만큼 앱의 크기와 성능에서 약간의 오버헤드가 발생할 수 있다.
- React Native CLI는 필요한 네이티브 모듈만을 추가하기 때문에 앱의 성능과 크기를 최적화할 수 있다. 성능이 중요한 프로젝트나 대규모 앱 개발에 더 적합하다.
선택 가이드
기준 | Expo | React Native CLI |
---|---|---|
설치 및 설정 | 간단하고 빠르다 | 다소 복잡하나 자유도가 높다 |
네이티브 코드 | 제한적 (Eject 필요) | 자유로운 접근이 가능하다 |
빌드 및 배포 | Expo 서버에 의존하다 | 로컬 빌드 및 배포가 가능하다 |
앱 크기 및 성능 | 기본 SDK 오버헤드로 다소 무거울 수 있다 | 모듈 선택을 통해 최적화할 수 있다 |
사용 용도 | 빠른 프로토타입, 간단한 앱 | 고급 기능이 필요한 복잡한 앱 |
둘 다 써보고 나니..
결론
Expo는 빠르고 간편한 개발 환경을 제공하여 입문자나 간단한 애플리케이션을 만들고자 할 때 이상적이다. 반면, React Native CLI는 고급 기능과 최적화가 필요한 프로젝트에서 탁월한 선택이다. 특히 네이티브 기능을 자유롭게 추가하고 싶다면 React Native CLI가 더 유리하다.
따라서, 간단한 프로젝트나 빠른 프로토타입을 원한다면 Expo를 추천하며, 복잡한 기능이 요구되거나 성능 최적화가 중요한 프로젝트에는 React Native CLI가 더 적합하다. (Expo에서 시작하여 필요에 따라 Eject하는 방법도 고려해볼 만하다.)