✅ 왜 Cross-platform 개발이 필요한가?

Cross-platform 개발은 한번의 개발로 여러 플랫폼에 적용 가능한 것을 이야기 한다.

무엇 보다도 비싼 개발 리소스 절감이 가능하다. 모바일도 크게는 Android와 iOS로 나뉘어 있어서 각각 따로 개발해야 한다. 개발 인력만 봐도 최소 2배가 필요하다. 개발도 효율화가 되지만, 유지보수 효율도 높아 진다. 공통 코드이므로 한번만 수정하면 된다. 또한, 일부 플랫폼 특화 기능만 분기 처리 (예: Platform.OS === 'ios')도 가능하다.

스타트업 같은 경우는 시장 대응 속도도 빠르게 가능하다. 특히, 초기 MVP 또는 실험적 서비스는 짧은 시간에 양 플랫폼에 출시하는 것이 중요할 수 있다. 이 때, Cross-platform은 런칭 시간 단축, 빠른 배포 가능하다.

무엇 보다도 중요한 것 중에 하나는 일관된 사용자 경험 이라고 할 수 있겠다. 동일한 UI 구성 요소와 로직을 공유함으로써 Android/iOS 간 UI/UX의 일관성 확보하고, 디자인 시스템이나 UI 패턴을 통합하여 관리할 수 있다.

하지만, Cross-platform이 만능은 아니다. 다음과 같은 지적도 있다. 그래서 많은 기업들이 "핵심 기능은 Native, 나머지는 Cross-platform" 구조를 도입한다. "Cross-platform은 하나의 기술 방식이고, Hybrid는 이를 Native와 조합하는 전략이라고 할 수 있다.

반론 설명
성능 문제 아주 고성능(게임, AR, 애니메이션 등)에서는 Native가 우위
플랫폼 특화 기능 OS 레벨 기능이나 복잡한 센서 접근은 Native로 작성 필요
디버깅 복잡도 RN/Flutter 모두 브리지나 엔진 레이어가 있어 디버깅이 더 어려움

이러한 Cross-platform 전략에는 Flutter, React Native 등이 있다. React Native의 경우는 기존의 Web 개발자들이 접근이 용이하여 많이 채용되고 있는 상황이다. 위에서 언급한 것처럼 Native도 일부 적용하고 있으므로 기존 iOS, Android 개발 경험도 도움이 될 수 있겠다.

React Native로 사용할 수 있는 옵션은 크게 세 가지 범주로 나뉘며, 개발 목적과 프로젝트 규모, 유지보수 편의성에 따라 적절한 선택이 필요합니다:

✅ 1. 기본 React Native (Bare React Native)

✦ 설명:

  • Facebook에서 만든 기본 react-native 프레임워크
  • Native 모듈(Android/iOS) 직접 개발 가능

✦ 장점:

  • Native 기능에 가장 직접적으로 접근 가능
  • 필요한 라이브러리만 선택해서 구성 가능 (유연함)
  • EAS Build 또는 Xcode/Android Studio 사용 가능

✦ 단점:

  • 환경 설정 복잡 (Xcode, Android SDK, CocoaPods 등)
  • 초기 설정과 유지보수 부담 큼

✅ 2. Expo (Managed Workflow)

✦ 설명:

  • React Native 위에 구축된 프레임워크
  • 설정, 빌드, 배포까지 쉽게 만들어주는 도구 포함 (Expo Go, EAS Build)

✦ 장점:

  • 개발 시작이 매우 빠름 (npx create-expo-app)
  • Hot Reload, Expo Go로 실시간 테스트 가능
  • 다수의 기본 API 내장 (카메라, 위치, 센서 등)

✦ 단점:

  • Expo SDK에 없는 기능은 eject 필요
  • 네이티브 코드 직접 수정이 어려움 (Managed Workflow 기준)

✅ 3. Expo Bare Workflow (또는 Ejected Workflow)

✦ 설명:

  • Expo의 유용한 기능은 유지하면서도 native code 수정이 가능하도록 한 방식
  • expo eject 명령으로 전환 가능

✦ 장점:

  • Expo SDK의 일부 기능 사용 가능
  • Native 모듈 직접 커스터마이징 가능

✦ 단점:

  • Expo 관리형 워크플로우의 간편함은 일부 상실됨
  • Native 설정 및 빌드 환경 세팅 필요

✅ 주요 선택 기준 비교

기준 Expo Managed Workflow Expo Bare Workflow Bare React Native
초기 설정 매우 쉬움 중간 복잡
네이티브 모듈 사용 제한적 (eject 필요) 자유로움 자유로움
빠른 프로토타이핑 매우 유리 보통 불리
성능 최적화/커스터마이징 제한적 가능 가능
빌드 도구 지원 (EAS, etc.) 완전 지원 일부 지원 외부 설정 필요

![[react_native_workflows.png]]

 

✅ 사용 예시

  • 간단한 앱 + 빠른 배포가 목적: Expo Managed Workflow
  • 카메라, Bluetooth, Background task 등 Native 기능 필요: Expo Bare 또는 Bare React Native
  • 기업 앱, 고성능/맞춤형 기능이 많은 앱: Bare React Native

대표적인 사례로 React Native는 Facebook, Instagram, Discord 등에서 채용하고 있다고 한다. 하지만, React Native만 쓴다기 보다는 Native도 활용하는 Hybrid가 대세라고 하겠다. 보안이나 HW와 연동하는 부분에서는 특히 이러한 것들이 필요하겠다.

다음은 React Native에서도 접근 가능한 전략이라고 하겠다. Native와 연동은 모두 가능하다고 하겠다.

당신의 목표는?
├── 빠르게 MVP 출시 or 간단한 앱 → Expo Managed Workflow
│
├── 네이티브 기능이 일부 필요하다면? (카메라, Bluetooth 등)
│   ├── Expo 기능도 일부 쓰고 싶다 → Expo Bare Workflow
│   └── Expo 없이 완전한 커스터마이징 원함 → Bare React Native
│
└── 고성능 앱 or 대규모 앱 (예: 게임, 복잡한 비즈니스 로직)
    → Bare React Native 권장

✅ 마무리

이 글은 React Native로 간단한 구현을 하면서 검토하기 시작했고, 마무리 단계에서 다시 정리해 본 글이다. Android가 주된 개발 경험인 입장에서 이러한 설계에 가까운 개념 검토와 정리는 향후 어려 설계 및 구현에도 도움이 될 것이라 기대해 본다.

+ Recent posts