CI/CD(Continuous Integration / Continuous Delivery)는 코드가 변경될 때마다 애플리케이션을 자동으로 빌드, 테스트 및 전달하는 방식입니다. Statista(2025)에 따르면, 모바일 개발 팀의 80%가 CI/CD를 사용합니다. 이 글에서는 인기 있는 CI 도구, 모바일 빌드 자동화를 위한 Fastlane, 그리고 Canary Release와 Feature Flags를 다룹니다.
핵심 요점
Continuous Integration은 모바일 앱 CI/CD 자동화의 기초입니다. 각 개발자가 하루에 여러 번 코드를 공유 저장소에 병합하는 방식입니다. 푸시할 때마다 CI 서버가 자동으로 프로젝트를 빌드하고 테스트를 실행합니다. 테스트가 실패하면 빌드가 손상된 것으로 간주되고 팀이 즉시 문제를 해결합니다. CI는 한 개발자의 코드가 다른 개발자의 코드를 손상시키는 «내 컴퓨터에서는 작동합니다» 상황을 방지합니다.
Build Pipeline — 각 푸시 시 실행되는 일련의 단계: 코드 린팅 → 단위 테스트 → debug APK/IPA 빌드 → 통합 테스트 → 릴리스 빌드. 각 단계는 이전 단계가 성공한 후에만 실행됩니다. 빌드 아티팩트(APK, IPA, AAB, 테스트 보고서)는 저장되고 다운로드할 수 있습니다.
Continuous Delivery — 코드는 자동으로 빌드 및 테스트되지만 프로덕션 출시 결정은 사람이 내립니다. Continuous Deployment — 모든 성공적인 빌드가 자동으로 프로덕션에 출시됩니다. 모바일 앱의 경우 TestFlight 또는 Internal Testing을 통한 CD(스토어 전달)가 더 일반적이며, 게시 최종 결정은 개발자나 관리자가 내립니다. Staging — 프로덕션에 최대한 가까운 환경으로, 릴리스 전에 빌드를 테스트하는 데 사용됩니다.
GitHub Actions는 GitHub에서 모바일 앱을 자동화하기 위한 내장 CI/CD 시스템입니다. Actions는 YAML 구성(.github/workflows)을 사용하여 파이프라인을 정의합니다. 모바일 개발을 위한 준비된 액션 사용 가능: actions/setup-java, Android용 gradle-build-action, iOS용 xcodebuild-action. GitHub Actions는 비공개 저장소에 월 2000분의 무료 시간을 제공합니다.
예시: Android 워크플로에는 코드 체크아웃, JDK 17 설정, Gradle 종속성 캐싱, lint 및 단위 테스트 실행, APK 빌드 및 아티팩트 업로드가 포함됩니다. iOS의 경우 — 체크아웃, Xcode 설정, pod install, XCTest 실행, 아카이브 및 IPA 내보내기. GitHub Actions는 알림을 위해 GitHub Releases, Slack 및 Telegram과 통합됩니다.
GitLab CI는 .gitlab-ci.yml을 통해 구성되는 GitLab의 내장 CI/CD 시스템입니다. GitLab CI는 러너(작업을 실행하는 에이전트)를 사용합니다. 모바일 개발의 경우 공유 러너(Android용 Linux) 또는 자체 러너(iOS용 macOS)를 사용할 수 있습니다. GitLab CI는 병렬 작업, 아티팩트, 환경 및 프로덕션 릴리스를 위한 수동 승인을 지원합니다.
Bitrise는 모바일 앱 자동화에 특화된 CI/CD 플랫폼입니다. Bitrise는 Android, iOS, Flutter 및 React Native를 위한 준비된 Steps를 제공합니다: Gradle Runner, Xcode Archive, Flutter Test, CocoaPods Install. Bitrise는 iOS용 코드 서명을 자동 구성하고(Codesigndoc를 통해) Xcode, Android SDK, Flutter 및 기타 도구가 사전 설치된 가상 머신을 제공합니다.
Bitrise 장점: 시각적 Workflow 편집기를 통한 간편한 설정, 병렬 빌드 지원, Firebase Test Lab, App Store Connect 및 Google Play Console과의 통합. Bitrise는 개인 프로젝트에 월 90분의 무료 시간을 제공합니다. IT Sectr에서는 모든 모바일 프로젝트에 Bitrise를 사용합니다 — 수동 GitHub Actions 설정과 비교하여 CI/CD를 크게 간소화합니다.
| 기준 | GitHub Actions | GitLab CI | Bitrise | CircleCI |
|---|---|---|---|---|
| 전문 분야 | 일반 | 일반 | 모바일 | 일반 |
| iOS용 macOS | 예(macOS 러너) | 자체 러너 | 예(내장) | 예(macOS) |
| 무료 한도 | 2000분/월 | 400분/월 | 90분/월 | 6000분/월 |
| Fastlane 통합 | run script 통해 | run script 통해 | 준비된 Step | run script 통해 |
| 코드 서명 | 수동 설정 | 수동 설정 | 자동 | Fastlane 통해 |
| 병렬 빌드 | 예 | 예 | 예 | 예 |
Fastlane은 Ruby로 작성된 iOS 및 Android용 모바일 앱 자동화 도구입니다. Fastlane은 200개 이상의 준비된 액션 시스템과 Fastfile을 통해 시나리오를 설명하는 DSL로 구성됩니다. Fastlane은 모든 모바일 개발자가 수동으로 수행하는 작업(코드 서명, 스크린샷 생성, TestFlight 및 Google Play에 업로드, 인증서 및 프로비저닝 프로필 관리)을 해결합니다.
Lane — Fastfile의 명명된 시나리오. 예: lane :release do — 릴리스 출시를 위한 작업 체인. Match — 암호화된 Git 저장소를 통해 인증서 및 프로비저닝 프로필을 안전하게 저장 및 동기화하는 도구. Gym — iOS 앱 빌드 및 아카이브(xcodebuild 래퍼). Pilot — TestFlight에서 빌드 업로드 및 관리. Deliver — App Store Connect에 앱 및 메타데이터 업로드. Snapshot — 모든 언어로 자동 스크린샷 생성. Screengrab — Android용 자동 스크린샷 생성.
Android용 Fastfile 예: lane :beta는 gradle(assembleRelease)을 호출한 다음 테스터에게 배포하기 위해 firebase_app_distribution을 호출합니다. iOS의 경우: lane :beta는 match(인증서 다운로드), gym(아카이브) 및 pilot(TestFlight에 업로드)을 호출합니다. Fastlane은 로컬 및 CI 서버에서 실행할 수 있어 모든 모바일 프로젝트에서 범용 도구가 됩니다.
Canary Release는 전체 출시 전에 소수의 사용자(1~5%)에게 새 앱 버전을 롤아웃하는 CI/CD 자동화 전략입니다. Google Play Console에서는 Staged Rollout을 통해 구현됩니다: 5%의 사용자에게 업데이트를 출시하고, 충돌 및 메트릭을 모니터링하며, 문제가 없으면 비율을 늘립니다. App Store Connect에서는 Phased Release for Automatic Updates를 통해 구현됩니다.
A/B Testing — 무작위 사용자 그룹에서 한 기능의 두 버전을 비교합니다. 모바일 개발에서 A/B 테스트는 Feature Flags, Firebase Remote Config 또는 서버 측 로직을 통해 수행됩니다. Canary Release와 A/B 테스트는 새 기능 출시 시 위험을 최소화합니다.
Feature Flag(Feature Toggle) — 새 코드를 배포하지 않고 기능을 조건부로 활성화합니다. Feature Flag는 코드의 검사입니다: if (featureFlag.isEnabled()) { /* 새 코드 */ } else { /* 이전 코드 */ }. 플래그는 LaunchDarkly, Split.io, Firebase Remote Config와 같은 서비스를 통해 관리됩니다. Feature Flags를 사용하면 기능이 아직 사용자에게 공개 준비가 되지 않았어도 개발자가 main에 코드를 병합할 수 있습니다.
LaunchDarkly — 가장 인기 있는 Feature Flags 관리 플랫폼입니다. LaunchDarkly는 iOS, Android, Flutter 및 React Native용 SDK를 제공합니다. 특정 사용자, 세그먼트, 지역 또는 사용자 비율에 대해 기능을 활성화할 수 있습니다. Feature Flags는 kill switch로도 사용되어 새 앱 버전을 출시하지 않고 문제가 있는 기능을 즉시 비활성화합니다.
자주 묻는 질문
코드가 GitHub에 있다면 GitHub Actions로 시작하세요. Actions는 공개 저장소에 무료이며 Android 및 iOS(macOS 러너)를 내장 지원하고 준비된 액션의 거대한 생태계를 갖추고 있습니다. 모바일 특화의 경우 Bitrise를 선택하세요.
아니요, CI 서비스(GitHub Actions, Bitrise, CircleCI)가 macOS 러너를 제공합니다. 사용 시간만큼 비용을 지불합니다. 로컬 Fastlane 디버깅에는 Mac이 필요하지만 CI는 클라우드에서 실행할 수 있습니다.
Canary Release — 안정성 확인을 위해 일부 사용자에게 새 버전 롤아웃. A/B 테스트 — 더 나은 것을 선택하기 위해 한 기능의 두 변형 비교. Canary는 신뢰성, A/B는 전환율에 관한 것입니다.
Fastlane은 필수는 아니지만 적극 권장됩니다. Fastlane 없이 수동으로 xcodebuild를 실행하고, 인증서를 관리하고, 웹 인터페이스를 통해 빌드를 업로드해야 합니다. Fastlane은 이러한 모든 작업을 단일 명령으로 자동화합니다.
Match는 iOS Code Signing 인증서를 관리하기 위한 Fastlane 도구입니다. Match는 암호화된 Git 저장소에 인증서와 프로비저닝 프로필을 저장하고 모든 개발자와 CI 서버 간에 동기화합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.