빌드 & 앱스토어 배포 — EAS Build & Submit




“만든 앱을 세상에 내놓을 차례입니다.”
이 글에서는 EAS Build로 앱을 빌드하고 App Store와 Play Store에 배포하는 전 과정을 살펴봅니다.


배포 전 전체 흐름

앱 완성
    ↓
app.json 설정 (버전, 아이콘, 스플래시)
    ↓
EAS Build (클라우드 빌드)
    ↓
내부 테스트 (TestFlight / 내부 테스트)
    ↓
앱스토어 심사 제출
    ↓
출시 🎉

EAS란?

EAS(Expo Application Services)는 Expo가 제공하는 클라우드 빌드/배포 서비스입니다.

서비스역할
EAS Build클라우드에서 iOS / Android 앱 빌드
EAS Submit앱스토어 자동 제출
EAS UpdateOTA 업데이트 (앱스토어 심사 없이 배포)

Mac 없이도 iOS 앱을 빌드할 수 있다는 것이 가장 큰 장점입니다.


1단계 — 사전 준비

Expo 계정 생성 & 로그인

# EAS CLI 설치
npm install -g eas-cli

# Expo 계정 로그인
eas login

개발자 계정 준비

플랫폼계정비용
iOS (App Store)Apple Developer Program연 $99 (약 13만원)
Android (Play Store)Google Play Console1회 $25 (약 3만원)

2단계 — app.json 최종 설정

빌드 전 앱의 기본 정보를 꼼꼼히 설정합니다.

{
  "expo": {
    "name": "나의 앱",
    "slug": "my-app",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/images/icon.png",
    "userInterfaceStyle": "automatic",

    "splash": {
      "image": "./assets/images/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },

    "ios": {
      "bundleIdentifier": "com.yourname.myapp",
      "buildNumber": "1",
      "supportsTablet": false,
      "infoPlist": {
        "NSCameraUsageDescription": "프로필 사진 촬영에 사용됩니다.",
        "NSPhotoLibraryUsageDescription": "사진 선택에 사용됩니다.",
        "NSLocationWhenInUseUsageDescription": "주변 검색에 사용됩니다."
      }
    },

    "android": {
      "package": "com.yourname.myapp",
      "versionCode": 1,
      "adaptiveIcon": {
        "foregroundImage": "./assets/images/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      },
      "permissions": [
        "CAMERA",
        "READ_EXTERNAL_STORAGE",
        "ACCESS_FINE_LOCATION"
      ]
    },

    "extra": {
      "eas": {
        "projectId": "your-eas-project-id"
      }
    }
  }
}

아이콘 & 스플래시 이미지 규격

항목크기형식
앱 아이콘1024 × 1024pxPNG (투명 배경 없음)
Android 어댑티브 아이콘1024 × 1024pxPNG
스플래시 이미지1284 × 2778pxPNG

3단계 — EAS 프로젝트 초기화

eas init

eas.json 파일이 생성됩니다.

// eas.json
{
  "cli": {
    "version": ">= 5.0.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

빌드 프로필 설명

프로필용도
development개발용 빌드 (개발 서버 연결)
preview내부 테스트용 빌드
production앱스토어 제출용 빌드

4단계 — 빌드

Android 빌드 (APK / AAB)

# 내부 테스트용 APK (설치 파일)
eas build --platform android --profile preview

# 앱스토어 제출용 AAB
eas build --platform android --profile production

iOS 빌드

# 내부 테스트용 (TestFlight)
eas build --platform ios --profile preview

# 앱스토어 제출용
eas build --platform ios --profile production

동시 빌드

# iOS + Android 동시 빌드
eas build --platform all --profile production

빌드는 EAS 클라우드 서버에서 진행됩니다.
완료까지 보통 10~20분 소요되며, 완료 시 이메일로 알림이 옵니다.


5단계 — 내부 테스트

Android — 내부 테스트 트랙

  1. Google Play Console 접속
  2. 내부 테스트 → 새 버전 만들기
  3. 빌드된 .aab 파일 업로드
  4. 테스터 이메일 추가
  5. 테스터는 링크로 앱 설치

iOS — TestFlight

# EAS로 TestFlight에 자동 업로드
eas submit --platform ios --profile production

또는 Apple Developer 콘솔에서 직접 업로드 후,
TestFlight에서 테스터 초대합니다.


6단계 — 앱스토어 제출

EAS Submit으로 자동 제출

# Android Play Store 제출
eas submit --platform android --profile production

# iOS App Store 제출
eas submit --platform ios --profile production

수동 제출 시 필요한 정보

공통

  • 앱 이름, 설명 (국문/영문)
  • 스크린샷 (각 기기 사이즈별)
  • 앱 아이콘
  • 카테고리, 연령 등급
  • 개인정보 처리방침 URL

App Store 추가 항목

  • 앱 미리보기 영상 (선택)
  • 키워드 (100자 이내)
  • 심사 메모 (특별한 기능 설명)

Play Store 추가 항목

  • 짧은 설명 (80자 이내)
  • 긴 설명 (4000자 이내)
  • 그래픽 이미지 (Feature Graphic)

7단계 — OTA 업데이트 (EAS Update)

앱스토어 심사 없이 JavaScript 코드만 즉시 업데이트할 수 있습니다.
버그 수정, UI 변경 등 빠른 배포가 필요할 때 유용합니다.

# EAS Update 설정
eas update:configure
// app.json에 추가
{
  "expo": {
    "updates": {
      "url": "https://u.expo.dev/your-project-id"
    },
    "runtimeVersion": {
      "policy": "appVersion"
    }
  }
}
# 업데이트 배포
eas update --branch production --message "버그 수정"

앱을 다시 시작하면 자동으로 최신 코드가 적용됩니다.

OTA 업데이트 가능한 것 vs 불가능한 것

가능 ✅불가능 ❌
JS/TS 코드 변경네이티브 모듈 추가
UI 수정app.json 설정 변경
버그 수정새 권한 추가
텍스트, 이미지 변경SDK 버전 업그레이드

버전 관리

앱 버전은 두 가지 숫자로 관리합니다.

// app.json
{
  "expo": {
    "version": "1.2.0",      // 사용자에게 보이는 버전
    "ios": {
      "buildNumber": "5"     // 앱스토어 내부 빌드 번호 (제출할 때마다 증가)
    },
    "android": {
      "versionCode": 5       // Play Store 내부 버전 코드 (제출할 때마다 증가)
    }
  }
}

eas.json에서 "autoIncrement": true 설정 시 빌드 번호가 자동으로 증가합니다.


심사 기간 참고

플랫폼첫 심사업데이트 심사
App Store (iOS)1~3일1~2일
Play Store (Android)3~7일수 시간~1일

첫 심사는 시간이 더 걸릴 수 있으니 여유 있게 일정을 잡으세요.


자주 발생하는 심사 거절 사유

App Store

  • 기능이 너무 단순하거나 웹사이트 수준인 경우
  • 개인정보 처리방침이 없는 경우
  • 스크린샷이 실제 앱과 다른 경우
  • 미완성된 기능이 있는 경우

Play Store

  • 타겟 API 레벨이 최신 기준 미충족
  • 개인정보 처리방침 미등록
  • 광고 정책 위반

전체 배포 흐름 정리

1. app.json 설정 (버전, 아이콘, 권한)
        ↓
2. eas build --platform all --profile production
        ↓
3. 내부 테스트 (TestFlight / Play 내부 테스트)
        ↓
4. eas submit --platform all --profile production
        ↓
5. 앱스토어 심사 (1~7일)
        ↓
6. 출시 🎉
        ↓
7. 버그 수정은 eas update (OTA)
   기능 추가는 eas build → eas submit

정리

명령어역할
eas build --platform androidAndroid 빌드
eas build --platform iosiOS 빌드
eas build --platform all동시 빌드
eas submit --platform androidPlay Store 제출
eas submit --platform iosApp Store 제출
eas updateOTA 업데이트 배포

시리즈를 마치며

7편에 걸쳐 Expo의 개발 환경 세팅부터 앱스토어 배포까지 전 과정을 살펴보았습니다.

1편  환경 세팅 & 첫 앱 실행
2편  핵심 컴포넌트 & 스타일링
3편  Expo Router로 화면 이동
4편  상태 관리 & API 연동
5편  카메라, 위치, 푸시 알림
6편  Firebase 로그인 & 데이터베이스
7편  빌드 & 앱스토어 배포

가장 중요한 것은 일단 만들어보는 것입니다.
작은 앱 하나를 처음부터 끝까지 완성해보는 경험이 어떤 강의보다 값진 공부가 됩니다. 🚀


시리즈 목차

  • 1편 Expo 개발 환경 세팅 & 첫 앱 실행
  • 2편 화면 구성 & 핵심 컴포넌트
  • 3편 화면 이동 구현 (Expo Router)
  • 4편 상태 관리 & API 연동
  • 5편 디바이스 기능 활용 (카메라, 위치, 알림)
  • 6편 Firebase 연동
  • 7편 빌드 & 앱스토어 배포 ← 현재 글



댓글 남기기