React Native 전환 로드맵 10. 배포 · 퍼블리싱 (Expo / EAS, iOS · Android)
Expo/EAS 기준으로 iOS·Android 배포와 스토어 심사 통과를 위한 계정·정책·빌드 체크포인트 정리
Posted
By okorion
React Native 전환 로드맵 10. 배포 · 퍼블리싱 (Expo / EAS, iOS · Android)
배포는 “마지막 단계”가 아니다.
React Native에서 배포는 기술·계정·정책이 동시에 얽힌 독립된 영역이다.
이 파트의 목표는 하나다.
한 번에 스토어 심사를 통과하는 최소 조건을 명확히 하는 것
배포 전 체크리스트 (무조건 먼저)
배포 실패의 70%는 코드가 아니라 설정 때문이다.
아래 항목이 하나라도 비어 있으면 배포를 시작하지 않는다.
필수 메타 정보
- 앱 이름 (스토어 표시명)
- 앱 버전 (user-facing)
- 빌드 버전 (internal)
- 번들 ID (iOS)
- 예:
com.company.app
- 예:
- 패키지명 (Android)
- 예:
com.company.app
- 예:
원칙
- 한 번 정한 번들 ID / 패키지명은 변경 비용이 매우 큼
- 개인 프로젝트라도 “회사 기준”으로 잡아라
계정 관련
- Apple Developer Program 가입
- Google Play Console 계정
- 결제 정보 등록 (필수)
👉 계정 없이는 아무것도 시작 안 된다.
리소스(아이콘 · 스플래시)와 설정
아이콘
필수 조건
- 정사각형
- 투명 배경 금지
- 가장자리 여백 확보
Expo 기준:
- 하나의 고해상도 아이콘 → 자동 리사이즈
1
2
3
{
"icon": "./assets/icon.png"
}
스플래시 화면
- 앱 첫인상
- 로딩 지연을 가리는 UX 요소
1
2
3
4
5
6
7
{
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
}
}
실무 원칙
- 애니메이션 ❌
- 단순한 로고 + 배경색 ⭕
- Android/iOS 모두에서 자연스러워야 함
권한 문구 (특히 iOS)
iOS는 권한 설명 문구가 없으면 심사 탈락이다.
- 카메라
- 위치
- 사진 접근
- 알림
1
2
3
4
5
{
"infoPlist": {
"NSCameraUsageDescription": "사진 촬영을 위해 필요합니다"
}
}
원칙
- 왜 필요한지 사용자 관점에서 명확히
- 기능과 무관한 권한 요청 ❌
환경변수 전략 (개발 / 스테이징 / 프로덕션)
환경변수는 배포 안정성의 핵심이다.
기본 원칙
- API URL 하드코딩 ❌
- 환경별로 분리
- 빌드 시점에 주입
Expo/EAS 환경 분리 개념
- development
- preview (staging)
- production
1
2
3
4
5
{
"extra": {
"apiUrl": "https://api.example.com"
}
}
또는 EAS secrets 사용
실무 기준
- 개발: 로컬/테스트 서버
- 프로덕션: 실 서버
- “실수로 개발 서버 배포” 방지
EAS Build 전체 흐름
EAS는 Expo의 공식 빌드/배포 파이프라인이다.
전체 흐름 요약
- 프로젝트 설정
- EAS CLI 로그인
- 빌드 프로파일 설정
- 클라우드 빌드
- 스토어 업로드
iOS 빌드 특징
- macOS 없어도 가능
- 인증서/프로비저닝 자동 처리
- TestFlight 업로드 가능
주의
- Apple 계정 연동 필수
- 심사 정책이 까다로움
Android 빌드 특징
- 상대적으로 자유로움
- AAB 형식 권장
- 서명 키 관리 중요
주의
- 키 분실 = 앱 업데이트 불가
빌드 전 최종 점검
- 아이콘/스플래시 확인
- 환경변수 확인
- 권한 문구 확인
- 테스트 계정 준비
배포 실패 원인 Top 7 (실무 빈도 순)
1️⃣ 권한 설명 부족 (iOS)
- 원인: Info.plist 문구 누락/부적절
- 대응: “왜 필요한가” 명확히 서술
2️⃣ 잘못된 환경변수
- 원인: 개발 서버 URL 배포
- 대응: 배포 전 환경 출력 로그 확인
3️⃣ 아이콘/스플래시 규격 오류
- 원인: 투명 배경, 저해상도
- 대응: 스토어 가이드라인 사전 확인
4️⃣ 테스트 부족
- 원인: 실제 기기 미테스트
- 대응: 최소 iOS/Android 각 1대 테스트
5️⃣ 네트워크 정책 위반 (Android)
- 원인: HTTP 사용
- 대응: HTTPS 필수
6️⃣ 번들 ID/패키지명 충돌
- 원인: 기존 앱과 중복
- 대응: 초기 설계 단계에서 고유성 확보
7️⃣ 스토어 메타데이터 부실
- 원인: 설명/스크린샷 부족
- 대응: 기능 설명 명확히, 과장 금지
이 파트의 결론
- 배포는 “기술 문제”보다 준비 문제
- 설정 하나가 전체를 막는다
- EAS는 속도를, 설계는 안정성을 준다
- 스토어 심사는 개발자의 태도를 본다
이 단계까지 오면 React Native 앱은 더 이상 연습용이 아니다.
다음이자 마지막 단계에서는 RN 관점에서 다시 보는 JavaScript / React 핵심을 정리한다.
This post is licensed under CC BY 4.0 by the author.
