Expo CLI vs. React Native CLI: 어떤 것을 선택해야 할까?

·
6 min read

React Native를 처음 공부하면 Expo CLI와 React Native CLI 중 어떤 것을 선택해야 할지 고민하게 된다. 두 가지 방법 모두 React Native 앱을 만들고 실행하는 데 사용되지만, 각각의 차이점이 분명하다. 이번 글에서는 두 CLI의 차이점과 어떤 경우에 Expo를, 어떤 경우에 React Native CLI를 선택하는 것이 좋은지 정리한다.

1. React Native 개발 환경을 만드는 방법

React Native 프로젝트를 만들 때, 보통 다음 두 가지 방법 중 하나를 선택할 수 있다.

  1. Expo CLI
    • npx create-expo-app my-app
    • Expo에서 제공하는 환경을 기반으로 개발
  2. React Native CLI
    • npx react-native init MyApp
    • 네이티브 코드(iOS/Android)를 직접 설정해야 함

2. Expo CLI란?

Expo는 React Native 개발을 더 쉽게 만들어주는 프레임워크이자 플랫폼이다. 설치부터 실행까지 빠르고 간단하며, 여러 가지 편리한 기능을 제공한다.

Expo의 장점

  1. 빠른 개발 환경 설정: 네이티브 코드 설정 없이 바로 개발 가능
  2. Expo Go 앱을 사용해 즉시 실행 가능 (iOS/Android에서 테스트가 쉬움)
  3. 다양한 유용한 패키지 제공 (expo-camera, expo-location 등)
  4. OTA(Over The Air) 업데이트 가능: 앱스토어를 거치지 않고 업데이트 가능

Expo의 단점

  1. 네이티브 코드 수정이 제한적임
    • Objective-C, Swift, Kotlin 등을 직접 수정하려면 expo prebuild를 실행하여 네이티브 프로젝트를 생성해야 함
    • expo prebuild를 사용하면 네이티브 코드 수정이 가능하지만, Expo의 관리형 기능(Expo Go 실행, OTA 업데이트 등)이 일부 제한될 수 있음
  2. 일부 서드파티 라이브러리 지원이 제한적
    • 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의 장점

  1. 네이티브 모듈을 직접 수정하고 추가할 수 있음
  2. Expo보다 자유로운 패키지 설치 가능(react-native-reanimated, react-native-vision-camera 등)
  3. 네이티브 기능을 직접 제어할 수 있음
    • iOS/Android 네이티브 모듈을 직접 추가하고, 필요한 경우 네이티브 코드를 직접 수정할 수 있음

React Native CLI의 단점

  1. 설정이 복잡함: Xcode, Android Studio 설치 필요
  2. Expo처럼 바로 실행할 수 있는 환경이 아님
  3. 초보자에게는 어려울 수 있음

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를 활용하여 인앱 결제를 적용해 보면 좋을 것 같다.