[개발 환경 구축] EAS 설정과 Android Development Build

UGangg·6일 전

tryna

목록 보기
7/12

1. 개발 환경 선택

Tryna는 iOS 앱 출시를 목표로 개발 중인 Expo 기반 React Native 프로젝트

초기에는 Expo Go를 사용하여 UI 및 기능 테스트를 진행했으며, 개발 환경을 구축하는 과정에서 Development Build도 함께 검토함.

But) 현재 구현 예정인 기능 대부분은 Expo Go에서 제공하는 네이티브 모듈로 구현 가능하며, Development Build가 반드시 필요한 상황은 아님.

→ Expo Go를 기본 개발 환경으로 사용하기로 결정

단, Android에서는 이미 Development Build 환경을 구축했고, 실제 기기에서 정상 동작하는 것을 확인함.

→ 기존 환경을 제거하지 않고 그대로 활용

최종 개발 방향

구분AndroidiOS
개발 및 테스트기존 Development Build 활용Expo Go 활용 예정
테스트 기기개인 Android 스마트폰팀원 iPhone
Fast Refresh지원지원
별도 개발 앱 빌드완료Expo Go에서는 불필요

※ Expo Go 사용 시 프로젝트의 Expo SDK 및 네이티브 라이브러리 호환성 확인 필요

▶ 기본 개발 환경은 Expo Go / Android에서는 기존 Development Build 활용


2. EAS (Expo Application Services)

: Expo에서 제공하는 앱 빌드·배포·업데이트 관련 클라우드 서비스

  • EAS Build: Android / iOS 앱 클라우드 빌드
  • EAS Submit: App Store / Google Play 앱 제출 지원
  • EAS Update: 호환되는 네이티브 런타임에서 JS 코드 및 에셋 업데이트 배포
  • EAS Workflows: 빌드·테스트·배포 자동화

Local Build vs EAS Build

구분Local BuildEAS Build
빌드 위치개발자 PCExpo 클라우드
Android 빌드Windows 가능가능
iOS 빌드macOS + Xcode 필요Windows에서도 요청 가능
개발 환경SDK 등 직접 설치클라우드 빌드 환경 제공
비용별도 클라우드 빌드 비용 X무료 할당량 / 유료 플랜

tryna의 빌드 방식

현재 Windows 환경에서 개발 중이며, 최종 목표는 iOS App Store 출시

  • 개발 및 테스트 → Expo Go: 별도 네이티브 빌드 없이 프로젝트 실행
  • Android → Local Build: 기존에 구축한 Development Build 환경 활용
  • iOS 출시 → EAS Build: Windows에서 iOS Production Build 생성 예정

iOS 앱 출시에 EAS가 필수인 것은 아니지만, 로컬 iOS 빌드에는 macOS와 Xcode가 필요함.

→ Windows 환경에서 iOS 앱을 빌드하기 위해 EAS Build 채택

▶ 개발은 Expo Go 중심 / iOS 출시 빌드는 EAS Build 활용

※ iOS App Store 출시에 Apple Developer Program 유료 멤버십 필요


3. Android Development Build 환경 구축

Expo Go를 기본 개발 환경으로 사용하기로 결정했지만, Android Development Build 환경도 구축해 두었음.

Development Build로 전체 전환하려고 진행 중에 Expo Go로 충분하다고 판단됨,,,
Android에서는 이미 구축이 완료돼서 아까우니 그냥 사용하기로 결정
헛고생한 것 같아 마음이 아프지만, 앞으로는 기획 단계에서 사용할 라이브러리, 기술 스택 등을 더 꼼꼼히 확인하고 기획해야겠다는 교훈을 얻었다,,~

아래는 해당 환경을 구축한 과정과 발생한 문제를 정리한 기록

1) expo-dev-client 설치

Expo Go는 개발에 필요한 기능이 미리 포함된 공용 앱이지만, Development Build는 프로젝트 전용 앱이므로 개발 클라이언트를 직접 포함해야 함.

→ expo-dev-client 설치

: Development Build에서 개발 서버에 연결하고 개발 및 디버깅 기능을 사용할 수 있도록 지원하는 라이브러리

npx expo install expo-dev-client

Expo SDK와 호환되는 버전 설치

2) EAS CLI 설치 및 로그인

설치

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
  1. 기존 Node.js 버전 확인
  2. Node.js 공식 다운로드에서 설치 파일 다운로드
  3. 다운로드 파일 실행 및 설치
  4. VSCode 재실행
  5. 버전 다시 확인
node -v
eas --version

아래처럼 설치 버전 출력 → 정상 설치 O

로그인

eas login

Expo 계정으로 로그인

eas whoami

정상 로그인 여부 확인

3) EAS 프로젝트 연결

eas init

로컬 Expo 프로젝트와 Expo 서버의 EAS 프로젝트 연결

  • Expo 프로젝트 생성 또는 기존 프로젝트 연결
  • EAS 프로젝트 고유 ID 발급
  • 프로젝트 연결 정보 설정

팀 프로젝트이므로 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 설정은 유지함.

4) Android SDK / ADB 환경 설정

Tryna는 iOS 출시를 목표로 하지만, 현재 개발 환경은 Windows이며 개인 테스트 기기는 Android 스마트폰

→ Windows에서 Android 개발용 앱을 직접 빌드

ADB 확인

adb version

Windows에서 adb 명령어를 인식하지 못함

→ ADB 미설치 또는 환경변수 미등록

ADB는 Android SDK platform-tools에 포함됨.

설치 경로를 확인한 결과 ADB는 이미 설치된 상태

▶ 환경변수 PATH 미등록 문제로 판단

환경변수 설정

  1. 시스템 환경 변수 편집 → 환경 변수(N)... → 사용자 변수의 Path → 편집 → 새로 만들기
  2. platform-tools가 설치된 경로 추가
  3. 사용자 변수에 ANDROID_HOME 추가
    • 변수 이름: ANDROID_HOME
    • 변수 값: Android SDK 설치 경로
    • Expo 및 Android 빌드 도구가 SDK 위치를 찾는 데 사용
  4. VSCode 재시작

adb version 실행 결과

다시 확인해 보면 정상 출력됨.

echo $env:ANDROID_HOME

추가로 설정한 ANDROID_HOME도 정상 적용됐는지 확인

5) Android 기기 연결

USB 또는 무선 디버깅으로 연결할 수 있으며, 여기서는 무선 디버깅 사용

  1. 개발자 옵션 활성화 (빌드 번호 7번 터치)
  2. 무선 디버깅 활성화 → 페어링 코드로 기기 페어링 → IP, Port, 페어링 코드 확인
  3. PowerShell에서 페어링 진행
adb pair IP:PORT

페어링 코드 입력

페어링 확인 결과

  1. 무선 디버깅 화면에서 연결용 IP, Port 확인
adb connect IP:PORT

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

  1. 기기 연결 확인
adb devices

6) JDK 환경 설정

Android 빌드 과정에서 Java 실행 환경이 필요하므로 JDK 및 JAVA_HOME 설정 확인

java -version
javac -version
echo $env:JAVA_HOME

문제 발생

JAVA_HOME이 JDK 설치 디렉터리가 아닌 설치 파일(.exe)을 가리키고 있어 Gradle 빌드 실패

해결

  • JDK 21 설치 경로 확인
  • JAVA_HOME을 JDK 설치 디렉터리로 수정
  • Path에 %JAVA_HOME%\bin 등록
  • Java 및 Java 컴파일러 정상 실행 확인

→ JDK 경로 수정 후 빌드 오류 해결

7) Android Local Development Build 실행

npx expo run:android --device

프로젝트 위치에서 명령어 실행

→ Android 개발용 앱을 로컬에서 빌드하고 연결된 스마트폰에 설치

빌드 과정

  1. Expo Prebuild를 통해 Android 네이티브 프로젝트 생성
  2. Gradle을 이용한 Android 앱 컴파일
  3. Debug APK 생성
  4. 연결된 Android 기기에 APK 설치
  5. Metro 개발 서버 실행 및 앱 연결

빌드 성공 메시지

최초 빌드에서는 Gradle 의존성 다운로드 및 네이티브 컴파일로 시간이 소요됨.

빌드 완료 후 스마트폰에 개발용 앱 설치

동작 확인

  • 앱 화면 정상 렌더링
  • Metro 개발 서버 연결
  • 코드 수정 후 Fast Refresh 동작 확인
  • 수동 Reload 없이 변경 사항 반영 확인

▶ Android Local Development Build 구축 완료


4. 개발 서버 연결 및 테스트

Android Development Build

이미 개발 앱이 설치된 상태라면 일반적인 UI 개발 시 다시 빌드할 필요 없음.

npx expo start --dev-client
  • 기존에 설치된 개발 앱 실행
  • Metro 개발 서버 연결
  • React / TypeScript / StyleSheet 수정 시 Fast Refresh 적용

※ 네이티브 모듈이나 네이티브 설정 변경 시 재빌드 필요

Expo Go

npx expo start --go
  • Expo Go 앱에서 프로젝트 실행
  • 별도 네이티브 빌드 불필요
  • Fast Refresh 지원
  • Expo Go에 포함된 네이티브 모듈만 사용 가능

※ iOS에서는 Expo SDK 버전 및 네이티브 라이브러리 호환성 확인 필요

Fast Refresh

: React Native에서 코드 변경 사항을 실행 중인 앱에 자동 반영하는 개발 기능

  • 컴포넌트 및 스타일 수정 시 자동 반영
  • 일반적인 JS 코드 수정에는 네이티브 재빌드 불필요
  • 가능한 경우 React 컴포넌트 상태 유지
  • Expo Go와 Development Build 모두 지원

Fast Refresh vs Reload

구분Fast RefreshReload
실행코드 저장 시 자동수동 실행
앱 전체 JS 재실행일반적으로 XO
React 상태 유지가능한 경우 유지초기화
용도개발 중 실시간 변경 확인앱 전체 새로고침

ADB 연결 vs Metro 연결

구분ADBMetro
목적Android 기기 제어JS 코드 전달 및 개발 서버 연결
주요 작업앱 설치 / 디버깅번들 제공 / Fast Refresh
연결 방식USB 또는 무선 디버깅네트워크 연결
평소 UI 개발필수 아님필요

→ 이미 설치된 개발 앱을 실행하고 Metro에 연결하는 데 무선 디버깅이 반드시 필요한 것은 아님.

단, 스마트폰과 개발 PC가 서로 통신할 수 있는 네트워크 환경 필요


5. iOS 출시 계획

현재 개발 단계에서는 Expo Go를 활용하여 iPhone 테스트를 진행할 계획

But) Expo Go는 개발용 앱이므로 App Store에 그대로 출시할 수 없음.

→ 실제 출시 단계에서는 별도의 Production Build 필요

iOS 출시 과정

  1. Apple Developer Program 가입
  2. iOS Bundle Identifier 및 앱 서명 설정
  3. EAS Build로 iOS Production Build 생성
  4. App Store Connect에 앱 등록
  5. EAS Submit 등을 이용해 빌드 업로드
  6. TestFlight 테스트 및 App Review 진행
  7. App Store 출시

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 출시 빌드 생성에 활용


6. 정리

처음에는 Expo Go를 사용했고, 개발 환경을 구축하는 과정에서 Android Development Build까지 생성함.

But) 현재 Tryna의 기능 구현에 Development Build가 반드시 필요한 것은 아님.

따라서 Expo Go를 기본 개발 환경으로 유지하고, Android에서는 이미 구축한 Development Build를 활용하기로 결정

  • Expo Go: 별도 빌드 없이 빠른 개발 및 테스트
  • Android Development Build: 기존 환경 유지 및 활용
  • EAS Build: Windows에서 iOS Production Build 생성
  • EAS Submit: App Store Connect 제출 지원

▶ 개발 환경: Expo Go 중심 + 기존 Android Development Build 활용

▶ 출시 환경: EAS Build를 통한 iOS Production Build 생성

최종적으로 개발 및 테스트 환경과 실제 출시 빌드 환경을 구분하여 관리할 예정

profile
프론트 성장기

2개의 댓글

Android는 Development Build, iOS는 Expo Go로 나눠 쓰실 때 하나 주의할 점이 있어요. Expo Go는 항상 최신 SDK만 지원해서 SDK를 올리기 전에는 팀원 iPhone의 Expo Go가 먼저 업데이트되면 프로젝트가 안 열릴 수 있어요. app.json의 sdkVersion을 고정해 두고, 나중에 iOS도 eas build --profile development로 맞추면 두 플랫폼 동작 차이를 줄일 수 있어요.

1개의 답글