모바일 앱을 만들고 싶은데 iOS와 Android를 따로 개발하자니 시간도 돈도 두 배로 드는 느낌, 다들 한 번쯤 느껴보셨죠? 저도 처음 앱 개발에 발을 들였을 때 가장 먼저 고민했던 부분이 바로 이것이었다. 그때 만난 것이 바로 React Native와 Expo였고, 솔직히 말해서 앱 개발의 진입 장벽을 확 낮춰준 고마운 조합이었다. 이 글에서는 React Native Expo를 활용한 앱 개발 입문 과정을 실제 경험을 바탕으로 솔직하게 풀어보겠다.
React Native와 Expo, 도대체 뭐가 다를까?
React Native의 핵심 개념
React Native는 Meta(구 Facebook)에서 만든 오픈소스 프레임워크로, JavaScript와 React 문법을 사용해 네이티브 모바일 앱을 만들 수 있게 해준다. 웹 개발자라면 익숙한 컴포넌트 기반 구조를 그대로 활용할 수 있어서, "웹은 할 줄 아는데 앱은 처음이다"라는 사람에게 특히 매력적이다. 실제로 HTML의 div 대신 View를, span 대신 Text를 쓰는 정도의 차이만 익히면 기본적인 UI 구성이 가능하다. React를 알고 있다면 학습 곡선이 정말 완만하다. 2026년 기준 최신 안정 버전인 React Native 0.85(Expo SDK 56)는 New Architecture 위에서만 동작하며, 0.82부터 구 아키텍처로 되돌리는 옵션이 완전히 제거됐다.
Expo가 필요한 이유
React Native만으로도 앱을 만들 수 있지만, 초기 환경 설정이 꽤 까다롭다. Android Studio 설치, Xcode 설정, 네이티브 모듈 연결 등 시작하기도 전에 지칠 수 있다. Expo는 이런 복잡한 설정 과정을 대폭 줄여주는 도구 모음이다. 터미널에 명령어 한 줄만 입력하면 프로젝트가 생성되고, QR코드를 스캔하면 실제 기기에서 바로 앱을 확인할 수 있다. 나도 처음 Expo로 "Hello World"를 띄웠을 때 "이게 이렇게 쉽다고?" 하고 놀랐던 기억이 난다.
Expo Go와 Development Build의 차이
Expo 생태계에서 자주 혼동하는 부분이 바로 Expo Go와 Development Build다. Expo Go는 스토어에서 다운로드할 수 있는 클라이언트 앱으로, 별도의 빌드 없이 개발 중인 앱을 바로 미리볼 수 있다. 빠른 프로토타이핑에 최적이다. 반면 Development Build는 커스텀 네이티브 모듈이 필요할 때 사용하는 방식으로, 자신만의 Expo Go를 빌드하는 개념이다. SDK 53 이후 모든 expo-* 패키지가 New Architecture(Fabric, TurboModules, 브리지리스)를 지원하므로, 이제는 처음부터 Development Build를 기본 워크플로로 삼는 것이 공식 권장이다. 가벼운 실험은 Expo Go로, 실제 출시를 염두에 둔 프로젝트는 Development Build로 시작하는 전략을 추천한다.
프로젝트 시작하기: 설치부터 첫 화면까지
개발 환경 세팅
Expo로 앱 개발을 시작하려면 먼저 Node.js가 설치되어 있어야 한다. SDK 56 기준으로는 Node.js 20 LTS 이상을 권장하며, 설치 후 터미널에서 다음 과정을 따르면 된다. npx create-expo-app@latest my-first-app 명령어를 실행하면 타입스크립트와 Expo Router가 기본 설정된 프로젝트 템플릿이 자동으로 생성된다. SDK 56부터는 SwiftUI(iOS)와 Jetpack Compose(Android)를 감싸는 Expo UI가 기본 템플릿에 함께 포함된다. 이후 프로젝트 폴더로 이동해서 npx expo start를 실행하면 개발 서버가 시작되고, 터미널에 QR코드가 표시된다. 스마트폰에 Expo Go 앱을 설치한 뒤 QR코드를 스캔하면 바로 앱이 실행된다. 정말 5분이면 첫 화면을 볼 수 있다.
프로젝트 구조 이해하기
생성된 프로젝트를 열어보면 몇 가지 핵심 폴더와 파일이 보인다. app/ 폴더는 Expo Router 기반의 파일 시스템 라우팅을 담당하는데, Next.js를 써본 사람이라면 바로 감이 올 것이다. 파일 이름이 곧 경로가 되는 구조다. app/(tabs)/ 안에 탭 네비게이션 화면들이 있고, app/_layout.tsx가 전체 레이아웃을 정의한다. components/ 폴더에는 재사용 가능한 컴포넌트를, assets/에는 이미지나 폰트 같은 정적 리소스를 넣는다. 처음에는 기본 템플릿 코드를 하나하나 수정해보면서 구조를 파악하는 것이 가장 효과적이다.
핫 리로딩으로 빠르게 개발하기
Expo의 가장 큰 장점 중 하나는 Fast Refresh 기능이다. 코드를 수정하고 저장하면 앱이 자동으로 업데이트되는데, 전체 앱이 다시 시작되는 것이 아니라 변경된 컴포넌트만 교체된다. 덕분에 상태를 유지한 채로 UI 변경 사항을 즉시 확인할 수 있다. 네이티브 앱 개발에서 빌드 한 번에 몇 분씩 걸리는 것과 비교하면 생산성 차이가 어마어마하다. SDK 56의 기본 엔진인 Hermes v1은 시작 속도와 메모리 사용량이 한층 개선돼, 큰 프로젝트에서도 리로딩 체감이 가볍다. 코드 한 줄 바꾸고 1초 만에 결과를 확인하는 이 경험은 한번 맛보면 돌아가기 어렵다.
실전 개발 팁: 라우팅부터 OTA 배포까지
Expo Router로 화면 구성하기
요즘 Expo 프로젝트는 사실상 Expo Router를 기본으로 깔고 간다. 화면 하나를 추가하고 싶으면 app/ 폴더 안에 파일을 만들기만 하면 된다. 예를 들어 app/profile.tsx를 만들면 곧바로 /profile 경로가 생긴다. 화면 이동은 Link 컴포넌트나 router.push()로 처리한다. 아래는 가장 단순한 화면과 이동 코드다.
파일 이름 앞뒤로 괄호를 붙인 (tabs) 같은 폴더는 경로에는 드러나지 않으면서 레이아웃만 묶어주는 그룹이다. 탭 바, 스택 헤더, 모달을 이 구조로 깔끔하게 분리할 수 있어 화면이 늘어나도 관리가 수월하다.
EAS Build로 실제 설치 파일 만들기
Expo Go 미리보기를 넘어 실제 스토어용 빌드가 필요해지면 EAS(Expo Application Services) Build가 등장한다. 로컬에 Xcode나 Android Studio 풀 세팅이 없어도 클라우드에서 iOS와 Android 빌드를 뽑아준다. 처음 설정은 두 줄이면 끝난다.
2026년 기준으로 EAS Build에는 빌드 캐싱이 무료로 제공돼, 두 번째 빌드부터는 iOS와 Android 모두 최대 30%가량 빌드 시간이 단축된다. RN 0.81(SDK 54)부터 iOS 의존성이 미리 컴파일된 XCFramework로 배포되면서 클린 빌드 시간도 크게 줄었다.
EAS Update로 OTA 즉시 배포
앱을 한 번 스토어에 올린 뒤 자잘한 버그를 고칠 때마다 심사를 다시 받는 건 비효율적이다. EAS Update는 자바스크립트 번들과 에셋을 무선(OTA)으로 내려보내, 스토어 심사 없이 사용자 기기에 즉시 반영한다. create-expo-app으로 만든 프로젝트나 Expo Router를 쓰는 앱은 별도 설정 없이 바로 연동된다.
channel과 branch를 나눠두면 preview 빌드에만 먼저 업데이트를 흘려보고, 문제가 없을 때 production으로 올리는 안전한 배포 흐름을 만들 수 있다. 단, 네이티브 모듈이 바뀌는 변경(새 SDK 적용 등)은 OTA로 덮을 수 없고 새 빌드가 필요하다는 점은 기억해두자.
장단점 비교: 언제 Expo를 선택할까
Expo가 만능은 아니다. 어떤 상황에 강하고 어떤 상황에서 한계를 만나는지 정리하면 선택이 한결 쉬워진다. 2026년의 Expo는 과거 "프로토타입용"이라는 인식을 벗고 상용 앱 워크플로로 충분히 성숙했지만, 여전히 트레이드오프는 존재한다.
| 항목 | 장점 | 고려할 점 |
|---|---|---|
| 초기 설정 | 명령어 한 줄로 시작, 네이티브 IDE 불필요 | 매우 특수한 네이티브 설정은 제약 |
| 개발 속도 | Fast Refresh, Hermes v1로 빠른 반복 | 대형 앱은 번들 분할 고려 필요 |
| 배포 | EAS Build 클라우드 빌드, EAS Update OTA | 무료 플랜은 동시 빌드 큐 제한 |
| 네이티브 확장 | Development Build로 모든 네이티브 모듈 사용 | 커스텀 네이티브 코드는 추가 학습 필요 |
웹 개발 경험이 있고 빠르게 MVP를 만들어 검증하고 싶다면 Expo가 거의 항상 정답이다. 반대로 복잡한 블루투스 제어, 저수준 카메라 파이프라인처럼 깊은 네이티브 연동이 핵심인 앱이라면 Development Build를 쓰더라도 네이티브 코드에 손댈 각오가 필요하다.
마무리
React Native와 Expo 조합은 2026년 현재 모바일 앱 입문자에게 가장 부담이 적은 출발점이다. New Architecture가 기본으로 자리 잡고 Hermes v1이 성능을 끌어올리면서, 한때 "간편한 대신 느리다"던 꼬리표도 옅어졌다. create-expo-app으로 시작해 Expo Router로 화면을 쌓고, EAS Build와 EAS Update로 배포까지 한 흐름에 묶을 수 있다는 점이 가장 큰 매력이다.
처음부터 모든 기능을 완벽히 이해하려 하기보다는, 작은 화면 하나를 만들어 실제 기기에 띄워보는 경험을 먼저 해보길 권한다. QR코드를 찍어 내 손안의 폰에서 방금 짠 코드가 움직이는 순간의 재미가, 결국 앱 개발을 계속하게 만드는 가장 강한 동기가 된다. 공식 문서(docs.expo.dev)는 SDK가 올라갈 때마다 빠르게 갱신되니, 막힐 때는 항상 최신 문서를 먼저 확인하는 습관을 들이자.