모바일 앱을 만들고 싶은데 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를 알고 있다면 학습 곡선이 정말 완만한다.
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를 빌드하는 개념다. 프로젝트 초기에는 Expo Go로 시작하고, 네이티브 기능이 필요해지면 Development Build로 전환하는 전략을 추천한다.
프로젝트 시작하기: 설치부터 첫 화면까지
개발 환경 세팅
Expo로 앱 개발을 시작하려면 먼저 Node.js가 설치되어 있어야 한다. Node.js 18 이상 버전을 권장하며, 설치 후 터미널에서 다음 과정을 따르면 된다. npx create-expo-app@latest my-first-app 명령어를 실행하면 타입스크립트 기반의 프로젝트 템플릿이 자동으로 생성된다. 이후 프로젝트 폴더로 이동해서 npx expo start를 실행하면 개발 서버가 시작되고, 터미널에 QR코드가 표시된다. 스마트폰에 Expo Go 앱을 설치한 뒤 QR코드를 스캔하면 바로 앱이 실행된다. 정말 5분이면 첫 화면을 볼 수 있다.
프로젝트 구조 이해하기
생성된 프로젝트를 열어보면 몇 가지 핵심 폴더와 파일이 보다. app/ 폴더는 Expo Router 기반의 파일 시스템 라우팅을 담당하는데, Next.js를 써보신 분이라면 바로 감이 올 겁니다. 파일 이름이 곧 경로가 되는 구조다. app/(tabs)/ 안에 탭 네비게이션 화면들이 있고, app/_layout.tsx가 전체 레이아웃을 정의한다. components/ 폴더에는 재사용 가능한 컴포넌트를, assets/에는 이미지나 폰트 같은 정적 리소스를 넣다. 처음에는 기본 템플릿 코드를 하나하나 수정해보면서 구조를 파악하는 것이 가장 효과적다.
핫 리로딩으로 빠르게 개발하기
Expo의 가장 큰 장점 중 하나는 Fast Refresh 기능다. 코드를 수정하고 저장하면 앱이 자동으로 업데이트되는데, 전체 앱이 다시 시작되는 것이 아니라 변경된 컴포넌트만 교체된다. 덕분에 상태를 유지한 채로 UI 변경 사항을 즉시 확인할 수 있다. 네이티브 앱 개발에서 빌드 한 번에 몇 분씩 걸리는 것과 비교하면 생산성 차이가 어마어마한다. 코드 한 줄 바꾸고 1초 만에 결과를 확인하는 이 경험은 한번 맛보면 돌아가기 어렵다.