✅ React Native CLI vs Expo: 앱 프로젝트에 적합한 선택
1️⃣ React Native CLI란?
특징:
- Native 코드(Android/iOS)에 직접 접근 가능
- 커스터마이징 자유도가 높음 (Java, Kotlin, Swift, Objective-C 코드 수정 가능)
- Native Module과의 통합이 쉬움
- 성능 최적화가 필요한 복잡한 앱 개발에 적합
✅ 장점:
- 고급 기능 구현이 용이 (예: Bluetooth, Background Service, Custom Animation)
- 강화학습 모델과의 로우 레벨 API 통합이 쉬움
- Android/iOS 환경에 최적화된 빌드 가능
⚠️ 단점:
- 초기 설정이 복잡 (Xcode, Android Studio 필수)
- 빌드 시간이 상대적으로 길고, 디버깅 난이도 ↑
- 개발 환경 설정에 더 많은 시간 소요
2️⃣ Expo란?
특징:
- 빠른 앱 프로토타이핑 및 개발에 적합
- Native 코드 작성 없이도 다양한 기능 지원
- Expo SDK로 카메라, 위치, 센서 등의 기능 간편하게 사용 가능
- 웹, iOS, Android를 동시에 지원하는 크로스플랫폼 환경
✅ 장점:
- 빠른 개발 속도 (설정 간단,
expo start로 바로 실행 가능)
- 강화학습 API 호출과 UI 개발이 간편함
- OTA(Over-The-Air) 업데이트 지원 → 앱스토어 업데이트 없이 배포 가능
⚠️ 단점:
- Native 코드 커스터마이징 어려움 (필요 시 "eject" 과정 필요)
- 무거운 머신러닝 라이브러리나 복잡한 로직에서는 제약이 있을 수 있음
- 고성능 최적화가 필요한 앱에는 한계 존재
📊 3️⃣ 비교 요약
| 항목 | React Native CLI | Expo |
|---|
| 개발 속도 | ⏱️ 느림 (환경 설정 필요) | ⚡ 빠름 (설치 후 바로 개발 가능) |
| 성능 최적화 | ✅ 고성능 최적화 가능 | ⚠️ 성능 최적화 한계 (Native 코드 접근 제한) |
| Native 모듈 통합 | ✅ 자유롭게 가능 | ❌ 제한적 (복잡한 기능은 "eject" 필요) |
| 빌드 관리 | 복잡 (Xcode/Android Studio 필요) | 간편 (expo build 명령어로 쉽게 빌드) |
| 강화학습 API 연동 | ✅ 유연한 커스터마이징 가능 | ✅ 간단한 API 호출에는 문제 없음 |
| 배포 및 업데이트 | 앱스토어를 통한 배포 필요 | OTA 업데이트 지원 (앱스토어 업데이트 불필요) |
4️⃣ 앱 프로젝트에 맞는 선택
✅ React Native CLI 추천 상황
- 강화학습 모델을 직접 로컬에 배포하거나 고성능 처리가 필요한 경우
- 복잡한 데이터 시각화, 고급 애니메이션, 센서 활용 등 Native 최적화가 필요한 기능이 있을 때
- API 외에도 Native 모듈과 깊이 있는 연동이 필요한 경우
npx react-native init ReinforcementApp
✅ Expo 추천 상황
- 빠른 프로토타입 개발이 필요한 경우
- 주로 강화학습 API 서버와의 통신이 핵심 기능일 때
- 앱의 주요 기능이 데이터 표시, 간단한 사용자 입력 등 UI 중심일 때
npx create-expo-app ReinforcementApp
📢 최종 결론
| 상황 | 추천 도구 |
|---|
| 고성능 최적화, Native 커스터마이징 필요 | React Native CLI |
| 빠른 개발, API 연동 중심, 프로토타이핑 | Expo |
| 기본은 Expo → 필요 시 Eject | Expo로 시작하고 eject 고려 가능 |
🔑 결론:
- 초기 개발 단계: Expo로 빠르게 개발 → 유지 관리 및 테스트
- 성능 최적화 필요 시: React Native CLI로 전환 (Expo "eject" 가능)
⚡ 추가 팁 (Expo Eject 방법)
만약 Expo로 개발을 시작했지만 나중에 Native 코드가 필요하다면:
npx expo eject
- 이 과정 후에는 React Native CLI 환경으로 전환되어 Native 코드 수정 가능