Expo CLI vs. React Native CLI: 어떤 것을 선택해야 할까?
React Native를 처음 공부하면 Expo CLI와 React Native CLI 중 어떤 것을 선택해야 할지 고민하게 된다. 두 가지 방법 모두 React Native 앱을 만들고 실행하는 데 사용되지만, 각각의 차이점이 분명하다. 이번 글에서는 두 CLI의 차이점과 어떤 경우에 Expo를, 어떤 경우에 React Native CLI를 선택하는 것이 좋은지 정리한다.
1. React Native 개발 환경을 만드는 방법
React Native 프로젝트를 만들 때, 보통 다음 두 가지 방법 중 하나를 선택할 수 있다.
- Expo CLI
npx create-expo-app my-app
- Expo에서 제공하는 환경을 기반으로 개발
- React Native CLI
npx react-native init MyApp
- 네이티브 코드(iOS/Android)를 직접 설정해야 함
2. Expo CLI란?
Expo는 React Native 개발을 더 쉽게 만들어주는 프레임워크이자 플랫폼이다. 설치부터 실행까지 빠르고 간단하며, 여러 가지 편리한 기능을 제공한다.
Expo의 장점
- 빠른 개발 환경 설정: 네이티브 코드 설정 없이 바로 개발 가능
- Expo Go 앱을 사용해 즉시 실행 가능 (iOS/Android에서 테스트가 쉬움)
- 다양한 유용한 패키지 제공 (
expo-camera
,expo-location
등) - OTA(Over The Air) 업데이트 가능: 앱스토어를 거치지 않고 업데이트 가능
Expo의 단점
- 네이티브 코드 수정이 제한적임
- Objective-C, Swift, Kotlin 등을 직접 수정하려면
expo prebuild
를 실행하여 네이티브 프로젝트를 생성해야 함 expo prebuild
를 사용하면 네이티브 코드 수정이 가능하지만, Expo의 관리형 기능(Expo Go 실행, OTA 업데이트 등)이 일부 제한될 수 있음
- Objective-C, Swift, Kotlin 등을 직접 수정하려면
- 일부 서드파티 라이브러리 지원이 제한적
react-native-gesture-handler
같은 일부 네이티브 라이브러리는 Expo에서 바로 실행할 수 없으며, 개발용 빌드(Development Build)가 필요할 수 있음
Expo를 추천하는 경우
- React Native를 처음 시작하는 경우
- 네이티브 코드 없이 순수 JavaScript/TypeScipt로 개발하고 싶은 경우
- 빠르게 MVP(최소 기능 제품)를 개발해야 하는 경우
3. React Native CLI란?
React Native CLI는 네이티브 코드를 직접 설정하고 다룰 수 있는 완전한 React Native 개발 환경을 제공한다. Expo보다 더 많은 설정이 필요하지만, 네이티브 코드 수정이 가능하다는 점이 가장 큰 차이이다.
React Native CLI의 장점
- 네이티브 모듈을 직접 수정하고 추가할 수 있음
- Expo보다 자유로운 패키지 설치 가능(
react-native-reanimated
,react-native-vision-camera
등) - 네이티브 기능을 직접 제어할 수 있음
- iOS/Android 네이티브 모듈을 직접 추가하고, 필요한 경우 네이티브 코드를 직접 수정할 수 있음
React Native CLI의 단점
- 설정이 복잡함: Xcode, Android Studio 설치 필요
- Expo처럼 바로 실행할 수 있는 환경이 아님
- 초보자에게는 어려울 수 있음
React Native CLI를 추천하는 경우
- 네이티브 기능(카메라, 블루투스, NFC 등)을 커스텀해야 하는 경우
- Expo의 제한을 넘어서 자유롭게 개발하고 싶은 경우
- 이미 React Native 경험이 있고 네이티브 개발이 필요한 경우
마무리
이번 글에서는 Expo CLI와 React Native CLI의 차이점을 알아보다. 결국 개발하려는 앱의 성격에 따라 선택이 달라질 수 있다.
✔️ 간단한 앱, 빠른 개발 → Expo
✔️ 네이티브 코드 활용, 커스텀 기능 추가 → React Native CLI
React Native를 공부하면서 Expo와 React Native CLI를 직접 사용해 보는 것도 좋은 경험이 될 것이다.
또한, 최근 expo-dev-client
를 활용하면 Expo Go의 제한을 넘어서 네이티브 모듈을 실행할 수 있다는 점을 알게 되었다.
특히 EAS(Expo Application Services)와 expo-dev-client
를 함께 사용하면, Expo 환경에서도 네이티브 모듈(react-native-iap
등)을 추가하고 실행할 수 있으며, 이를 통해 인앱 결제 같은 기능도 구현할 수 있다고 한다.
아직 직접 사용해 보지는 않았지만, 추후에 EAS Build와 함께 expo-dev-client
를 활용하여 인앱 결제를 적용해 보면 좋을 것 같다.