Ruby는 우아한 구문을 가진 동적 인터프리터 언어로, Ruby on Rails 프레임워크로 잘 알려져 있습니다. 모바일 개발에서 Ruby는 주로 Fastlane을 통해 사용됩니다 — iOS 및 Android 애플리케이션의 빌드, 테스트 및 배포를 자동화하는 표준 도구입니다. Fastlane 공식 문서에 따르면, 이 도구는 전 세계적으로 100,000개 이상의 프로젝트에서 사용됩니다.
주요 내용
Ruby는 1995년 유키히로 마츠모토가 만든 동적 인터프리터 오픈소스 언어입니다. Ruby의 핵심 원칙은 "최적의 단순함"(최소 놀람의 원칙)입니다. 이 언어는 블록(클로저), 순수 객체 지향 접근 방식(숫자를 포함한 모든 것이 객체) 및 강력한 메타프로그래밍 시스템으로 유명합니다.
Ruby는 버전 3.1부터 JIT 컴파일을 지원하는 YARV(Yet Another Ruby VM) 인터프리터에서 실행됩니다. 현재 버전 Ruby 3.4(2025)에는 데코레이터, 개선된 Prism 파서 및 RBS를 통한 실험적 타입 지원이 포함됩니다. RubyGems — 패키지 관리자 — 에는 200,000개 이상의 gem이 있습니다.
Ruby on Rails는 Ruby로 구축된 가장 유명한 웹 프레임워크이지만, 모바일 개발에서 Ruby는 다르게 사용됩니다. 주요 영역은 Fastlane입니다: 코드 서명에서 스토어 게시까지 모바일 앱 수명 주기의 모든 단계를 자동화하는 Ruby 스크립트와 gem의 생태계입니다.
Fastlane 작업에는 메서드, do-end 블록, 심볼(:symbol) 및 해시 구문 { key: value } 등 Ruby의 기본적인 이해만 있으면 됩니다. Python과 달리 Ruby는 들여쓰기 대신 end를 사용하여 블록을 닫습니다. 메서드는 괄호 없이 호출할 수 있습니다 — 이는 Fastlane DSL에서 적극적으로 사용됩니다.
# Fastlane에서 사용되는 기본 Ruby 구문
def download_assets(version, platform: "ios")
paths = {
ios: "ios/Assets.car",
android: "android/app/src/main/assets"
}
url = "https://cdn.example.com/assets/#{version}/#{paths[platform.to_sym]}"
puts "Downloading from: #{url}"
unless File.exist?("temp/assets")
Dir.mkdir("temp/assets")
end
result = system("curl -o temp/assets.zip #{url}")
raise "Download failed" unless result
end
download_assets("1.2.3", platform: "android")예제에서 download_assets 메서드는 version 인수와 선택적 명명된 매개변수 platform(기본값 "ios")을 받습니다. #{...}를 사용한 문자열 보간은 값을 직접 문자열에 삽입합니다. unless는 if의 반대입니다 — 조건이 거짓일 때 코드를 실행합니다.
Fastlane은 Ruby로 작성된 오픈소스 도구입니다. gem install fastlane을 통해 설치되며, 모바일 개발자의 가장 일상적인 작업(스크린샷 생성, 코드 서명, TestFlight 및 Google Play Console 게시)을 자동화하는 명령 세트를 제공합니다.
Fastlane은 도구로 구성됩니다: sigh(인증서 관리), match(팀 내 인증서 동기화), gym(iOS 빌드), gradle(Android 빌드), deliver(iOS 게시), supply(Android 게시), snapshot(스크린샷), scan(테스트). 모든 도구는 단일 Fastfile에서 액세스할 수 있습니다.
대규모 프로젝트에서 Fastlane은 단일 파이프라인에서 50개 이상의 액션을 처리합니다: 버전 증가, CDN에서 에셋 다운로드, 빌드, 서명, App Store Connect 업로드, Slack 알림 전송. 전체 파이프라인은 단일 명령으로 실행됩니다: fastlane release.
Fastfile은 액션(레인)의 시퀀스를 설명하는 Ruby 유사 DSL 파일입니다. 각 레인은 별도의 작업입니다: beta(테스트 빌드), release, screenshots. 레인은 전달된 매개변수로 다른 레인을 호출할 수 있습니다.
# Fastfile — iOS 앱 빌드 파이프라인 구성
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "TestFlight 빌드 생성 및 배포"
lane :beta do |options|
increment_build_number(
build_number: options[:build]
)
match(type: :appstore)
gym(
scheme: "MyApp",
export_method: "app-store",
configuration: "Release"
)
upload_to_testflight(
app_identifier: "com.example.myapp"
)
slack(
message: "Build #{options[:build]}이(가) TestFlight에 업로드됨"
)
end
endbeta 레인은 순차적으로 실행됩니다: 빌드 번호 증가(increment_build_number), 인증서 동기화(match), 아카이브 빌드(gym), TestFlight 업로드(upload_to_testflight), Slack 알림 전송. :build 매개변수는 명명된 인수로 레인에 전달됩니다.
Fastlane은 단일 Fastfile에서 두 플랫폼을 모두 지원합니다. Android의 경우 platform :android 내에서 gradle, supply 및 google_play_track_version_codes 액션과 함께 레인을 사용합니다.
platform :android do
desc "APK 빌드 및 Google Play Internal Testing에 게시"
lane :beta do
gradle(
task: "assemble",
build_type: "Release",
flavor: "Production"
)
supply(
track: "internal",
apk_paths: ["app/build/outputs/apk/release/app-release.apk"]
)
end
endFastlane에는 200개 이상의 내장 액션이 포함됩니다. 아래는 모바일 개발에 가장 중요한 것들로, 카테고리별로 정리되어 있습니다.
| 액션 | 플랫폼 | 목적 |
|---|---|---|
| match | iOS | Git을 통해 인증서 및 프로비저닝 프로필 동기화 |
| gym | iOS | .app 및 .ipa 아카이브 빌드 |
| scan | iOS | 시뮬레이터에서 UI 테스트 실행 |
| snapshot | iOS | 다양한 기기에서 자동 스크린샷 생성 |
| deliver | iOS | 빌드, 스크린샷 및 메타데이터를 App Store Connect에 업로드 |
| pilot | iOS | TestFlight 관리: 빌드 업로드, 테스터 추가 |
| gradle | Android | Gradle 작업 실행: assemble, test, bundle |
| supply | Android | APK/AAB 및 메타데이터를 Google Play Console에 업로드 |
| screengrab | Android | Google Play용 자동 스크린샷 |
| firebase_app_distribution | 둘 다 | Firebase App Distribution에 빌드 업로드 |
match는 개발자 간 iOS 인증서 및 프로비저닝 프로필을 동기화하는 Fastlane gem입니다. 모든 비밀은 암호화된 Git 저장소 또는 S3에 저장됩니다. Match는 인증서가 없는 경우 자동으로 생성하고 만료 시 갱신합니다.
# 새 프로젝트를 위한 match 초기화
$ fastlane match init
# App Store 인증서 생성 및 동기화
$ fastlane match appstore
# 팀을 위한 Development 인증서 생성
$ fastlane match development
# 만료 시 모든 인증서 갱신
$ fastlane match --forceMatch는 개발자만 아는 암호문구로 개인 키를 저장합니다. 각 개발자는 인증서 저장소를 복제하고 match를 실행하여 현재 프로필을 설치합니다. Apple 인증서는 1년 동안 유효하며 match가 자동으로 갱신합니다.
Fastlane은 모든 CI/CD 플랫폼과 통합됩니다: GitHub Actions, GitLab CI, CircleCI, Bitrise, Jenkins 및 Xcode Cloud(xcode-build 통해). Fastlane은 CI에서 fastlane <lane_name>을 사용하여 실행되며 단계 실패 시 오류 코드를 반환합니다.
GitHub Actions 설정에는 Ruby, fastlane 설치 및 bundle exec fastlane을 통한 레인 실행이 포함됩니다. iOS 빌드에는 macOS 러너가 필요합니다. Android 빌드는 더 저렴한 ubuntu-latest를 사용할 수 있습니다.
# .github/workflows/deploy.yml — Fastlane을 사용한 CI/CD
name: Deploy Mobile App
on:
push:
branches: [main]
jobs:
ios-deploy:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- run: bundle install
- run: bundle exec fastlane beta
- env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}워크플로는 main에 푸시할 때 실행됩니다. macOS 러너는 Fastfile에서 bundle exec fastlane beta를 실행합니다. MATCH_PASSWORD는 인증서 해독을 위해 GitHub Secrets를 통해 전달됩니다. 레인이 완료되면 Slack 액션이 알림을 보냅니다.
RubyGems은 Ruby의 패키지 관리자입니다. Fastlane은 새로운 액션을 추가하는 gem인 플러그인을 통해 확장됩니다. fastlane-plugin-versioning 플러그인은 버전을 관리하고, fastlane-plugin-firebase_app_distribution은 Firebase에 빌드를 업로드합니다. GitHub에는 500개 이상의 Fastlane 플러그인이 있습니다.
프로젝트 루트의 Gemfile은 재현 가능한 빌드를 위해 모든 종속성 버전을 고정합니다. bundle install은 Gemfile.lock에서 gem을 설치합니다. 모바일 개발에 필수적인 gem에는 fastlane, cocoapods(iOS 종속성), xcodeproj(.xcodeproj 조작)가 포함됩니다.
# 모바일 프로젝트를 위한 Gemfile
source "https://rubygems.org"
gem "fastlane", "~> 2.220"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)Fastlane이 유일한 자동화 도구는 아닙니다. 모바일 팀에 중요한 기준에 따라 주요 대안들과 비교해 보겠습니다.
| 기준 | Fastlane (Ruby) | Bitrise (웹) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| 유연성 | 최대 (코드) | 중간 (단계) | 낮음 (제한적) | 높음 |
| iOS | 완전 지원 | 완전 | 완전 (내장) | 자체 호스팅 macOS 통해 |
| Android | 완전 지원 | 완전 | 없음 | 완전 |
| 인증서 (match) | 내장 | Code Signing 통해 | 자동 | fastlane 통해 |
| 로컬 실행 | 예 | 아니오 (CI만) | 아니오 | act 통해 |
| 플러그인 | 500+ | 200+ 통합 | 없음 | 20,000+ 액션 |
Fastlane은 복잡한 파이프라인에 가장 유연한 도구로 남아 있습니다. Bitrise는 Ruby 개발자가 없는 팀에 편리합니다. Xcode Cloud는 간단한 iOS 프로젝트에 적합합니다. GitHub Actions는 팀이 이미 GitHub을 사용하는 경우 이상적입니다.
자주 묻는 질문
Ruby는 모바일 애플리케이션을 작성하는 것이 아니라 Fastlane을 통해 빌드, 테스트 및 배포 프로세스를 자동화하는 데 사용됩니다. Fastlane은 iOS 및 Android 개발에서 CI/CD의 사실상 표준입니다.
Fastlane은 macOS, Linux 및 Windows에서 작동하지만 iOS 빌드에는 Xcode와 macOS가 필요합니다. Android 빌드는 모든 플랫폼에서 실행할 수 있습니다. 개발자는 로컬에서 macOS를 사용하고 CI에서는 iOS에 macOS, Android에 Linux를 사용합니다.
Fastlane 작업에는 Ruby의 기본적인 이해로 충분합니다. Fastlane은 Fastfile에서 Ruby 유사 DSL을 사용합니다. 일반적인 작업에는 gem, do-end 블록 및 기본 구문 지식으로 충분합니다. 깊은 Ruby 지식은 필요하지 않습니다.
대안: Gradle(Android, 내장), Xcode Cloud(Apple), Bitrise(웹 인터페이스), GitHub Actions(YAML). Fastlane은 풍부한 액션 및 플러그인 생태계 덕분에 가장 유연한 도구로 남아 있습니다.
네, Fastlane은 대기업에서 사용됩니다. 모든 액션과 구성 파일은 저장소에서 버전 관리되며, match는 저장소 또는 S3에서 인증서의 안전한 저장을 보장합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.