Tryna는 iOS 앱 출시를 목표로 개발 중인 Expo 기반 React Native 프로젝트
초기에는 Expo Go를 사용하여 UI 및 기능 테스트를 진행했으며, 개발 환경을 구축하는 과정에서 Development Build도 함께 검토함.
But) 현재 구현 예정인 기능 대부분은 Expo Go에서 제공하는 네이티브 모듈로 구현 가능하며, Development Build가 반드시 필요한 상황은 아님.
→ Expo Go를 기본 개발 환경으로 사용하기로 결정
단, Android에서는 이미 Development Build 환경을 구축했고, 실제 기기에서 정상 동작하는 것을 확인함.
→ 기존 환경을 제거하지 않고 그대로 활용
| 구분 | Android | iOS |
|---|---|---|
| 개발 및 테스트 | 기존 Development Build 활용 | Expo Go 활용 예정 |
| 테스트 기기 | 개인 Android 스마트폰 | 팀원 iPhone |
| Fast Refresh | 지원 | 지원 |
| 별도 개발 앱 빌드 | 완료 | Expo Go에서는 불필요 |
※ Expo Go 사용 시 프로젝트의 Expo SDK 및 네이티브 라이브러리 호환성 확인 필요
▶ 기본 개발 환경은 Expo Go / Android에서는 기존 Development Build 활용
: Expo에서 제공하는 앱 빌드·배포·업데이트 관련 클라우드 서비스
| 구분 | Local Build | EAS Build |
|---|---|---|
| 빌드 위치 | 개발자 PC | Expo 클라우드 |
| Android 빌드 | Windows 가능 | 가능 |
| iOS 빌드 | macOS + Xcode 필요 | Windows에서도 요청 가능 |
| 개발 환경 | SDK 등 직접 설치 | 클라우드 빌드 환경 제공 |
| 비용 | 별도 클라우드 빌드 비용 X | 무료 할당량 / 유료 플랜 |
현재 Windows 환경에서 개발 중이며, 최종 목표는 iOS App Store 출시
iOS 앱 출시에 EAS가 필수인 것은 아니지만, 로컬 iOS 빌드에는 macOS와 Xcode가 필요함.
→ Windows 환경에서 iOS 앱을 빌드하기 위해 EAS Build 채택
▶ 개발은 Expo Go 중심 / iOS 출시 빌드는 EAS Build 활용
※ iOS App Store 출시에 Apple Developer Program 유료 멤버십 필요
Expo Go를 기본 개발 환경으로 사용하기로 결정했지만, Android Development Build 환경도 구축해 두었음.
Development Build로 전체 전환하려고 진행 중에 Expo Go로 충분하다고 판단됨,,,
Android에서는 이미 구축이 완료돼서 아까우니 그냥 사용하기로 결정
헛고생한 것 같아 마음이 아프지만, 앞으로는 기획 단계에서 사용할 라이브러리, 기술 스택 등을 더 꼼꼼히 확인하고 기획해야겠다는 교훈을 얻었다,,~
아래는 해당 환경을 구축한 과정과 발생한 문제를 정리한 기록
Expo Go는 개발에 필요한 기능이 미리 포함된 공용 앱이지만, Development Build는 프로젝트 전용 앱이므로 개발 클라이언트를 직접 포함해야 함.
→ expo-dev-client 설치
: Development Build에서 개발 서버에 연결하고 개발 및 디버깅 기능을 사용할 수 있도록 지원하는 라이브러리
npx expo install expo-dev-client
Expo SDK와 호환되는 버전 설치
설치
npm install -g eas-cli
eas-cli를 전역(-g)에 설치
eas --version
설치 완료 후 버전 확인

사용 중이던 Node.js 버전에서 향후 EAS CLI의 Node.js 22 이상 요구에 대한 경고가 출력됨.
→ 개발 환경의 버전 호환성을 고려하여 Node.js 22 계열로 업그레이드 진행
Node.js 업그레이드
node -v
npm -v
node -v
eas --version
아래처럼 설치 버전 출력 → 정상 설치 O

로그인
eas login
Expo 계정으로 로그인
eas whoami
정상 로그인 여부 확인
eas init
로컬 Expo 프로젝트와 Expo 서버의 EAS 프로젝트 연결

팀 프로젝트이므로 Expo Organization에 생성한 프로젝트 선택
Expo 회원가입 이후 생성한 Organization 프로젝트

완료되면 Expo 대시보드에서 확인 가능
EAS 설정 파일 생성
eas build:configure

초기에는 Android 및 iOS Development Build를 모두 고려했으므로 All 선택
완료되면 프로젝트 루트에 eas.json 파일 생성
Development 프로필에 아래 설정이 포함됐는지 확인
{
"developmentClient": true,
"distribution": "internal"
}
developmentClient: true → 개발 클라이언트를 포함한 앱 빌드distribution: internal → 앱 스토어를 거치지 않고 테스트 기기에 설치하는 내부 배포용 빌드※ 위 코드는 eas.json 전체가 아닌 Development 프로필 내부 설정 일부
현재는 iOS Development Build를 진행하지 않지만, 기존 EAS 설정은 유지함.
Tryna는 iOS 출시를 목표로 하지만, 현재 개발 환경은 Windows이며 개인 테스트 기기는 Android 스마트폰
→ Windows에서 Android 개발용 앱을 직접 빌드
ADB 확인
adb version

Windows에서 adb 명령어를 인식하지 못함
→ ADB 미설치 또는 환경변수 미등록

ADB는 Android SDK platform-tools에 포함됨.
설치 경로를 확인한 결과 ADB는 이미 설치된 상태
▶ 환경변수 PATH 미등록 문제로 판단
환경변수 설정
환경 변수(N)... → 사용자 변수의 Path → 편집 → 새로 만들기platform-tools가 설치된 경로 추가ANDROID_HOME 추가ANDROID_HOME
다시 확인해 보면 정상 출력됨.
echo $env:ANDROID_HOME
추가로 설정한 ANDROID_HOME도 정상 적용됐는지 확인
USB 또는 무선 디버깅으로 연결할 수 있으며, 여기서는 무선 디버깅 사용
adb pair IP:PORT
페어링 코드 입력

adb connect IP:PORT

페어링용 Port와 연결용 Port는 다를 수 있음.
adb devices

Android 빌드 과정에서 Java 실행 환경이 필요하므로 JDK 및 JAVA_HOME 설정 확인
java -version
javac -version
echo $env:JAVA_HOME
문제 발생
JAVA_HOME이 JDK 설치 디렉터리가 아닌 설치 파일(.exe)을 가리키고 있어 Gradle 빌드 실패
해결
JAVA_HOME을 JDK 설치 디렉터리로 수정Path에 %JAVA_HOME%\bin 등록→ JDK 경로 수정 후 빌드 오류 해결
npx expo run:android --device
프로젝트 위치에서 명령어 실행
→ Android 개발용 앱을 로컬에서 빌드하고 연결된 스마트폰에 설치
빌드 과정

최초 빌드에서는 Gradle 의존성 다운로드 및 네이티브 컴파일로 시간이 소요됨.
빌드 완료 후 스마트폰에 개발용 앱 설치
동작 확인
▶ Android Local Development Build 구축 완료
이미 개발 앱이 설치된 상태라면 일반적인 UI 개발 시 다시 빌드할 필요 없음.
npx expo start --dev-client
※ 네이티브 모듈이나 네이티브 설정 변경 시 재빌드 필요
npx expo start --go
※ iOS에서는 Expo SDK 버전 및 네이티브 라이브러리 호환성 확인 필요
: React Native에서 코드 변경 사항을 실행 중인 앱에 자동 반영하는 개발 기능
Fast Refresh vs Reload
| 구분 | Fast Refresh | Reload |
|---|---|---|
| 실행 | 코드 저장 시 자동 | 수동 실행 |
| 앱 전체 JS 재실행 | 일반적으로 X | O |
| React 상태 유지 | 가능한 경우 유지 | 초기화 |
| 용도 | 개발 중 실시간 변경 확인 | 앱 전체 새로고침 |
| 구분 | ADB | Metro |
|---|---|---|
| 목적 | Android 기기 제어 | JS 코드 전달 및 개발 서버 연결 |
| 주요 작업 | 앱 설치 / 디버깅 | 번들 제공 / Fast Refresh |
| 연결 방식 | USB 또는 무선 디버깅 | 네트워크 연결 |
| 평소 UI 개발 | 필수 아님 | 필요 |
→ 이미 설치된 개발 앱을 실행하고 Metro에 연결하는 데 무선 디버깅이 반드시 필요한 것은 아님.
단, 스마트폰과 개발 PC가 서로 통신할 수 있는 네트워크 환경 필요
현재 개발 단계에서는 Expo Go를 활용하여 iPhone 테스트를 진행할 계획
But) Expo Go는 개발용 앱이므로 App Store에 그대로 출시할 수 없음.
→ 실제 출시 단계에서는 별도의 Production Build 필요
Production Build
eas build --platform ios --profile production
Windows에서 EAS 클라우드의 macOS 빌드 환경을 이용해 iOS 앱 생성
App Store 제출
eas submit --platform ios --profile production
생성된 iOS 빌드를 App Store Connect에 제출
※ Apple Developer Program 멤버십 및 App Store Connect 설정 필요
▶ Expo Go는 개발 및 테스트 / EAS Build는 iOS 출시 빌드 생성에 활용
처음에는 Expo Go를 사용했고, 개발 환경을 구축하는 과정에서 Android Development Build까지 생성함.
But) 현재 Tryna의 기능 구현에 Development Build가 반드시 필요한 것은 아님.
따라서 Expo Go를 기본 개발 환경으로 유지하고, Android에서는 이미 구축한 Development Build를 활용하기로 결정
▶ 개발 환경: Expo Go 중심 + 기존 Android Development Build 활용
▶ 출시 환경: EAS Build를 통한 iOS Production Build 생성
최종적으로 개발 및 테스트 환경과 실제 출시 빌드 환경을 구분하여 관리할 예정
Android는 Development Build, iOS는 Expo Go로 나눠 쓰실 때 하나 주의할 점이 있어요. Expo Go는 항상 최신 SDK만 지원해서 SDK를 올리기 전에는 팀원 iPhone의 Expo Go가 먼저 업데이트되면 프로젝트가 안 열릴 수 있어요. app.json의 sdkVersion을 고정해 두고, 나중에 iOS도 eas build --profile development로 맞추면 두 플랫폼 동작 차이를 줄일 수 있어요.