CircleCI는 iOS 및 Android용 모바일 애플리케이션을 포함한 소프트웨어의 빌드, 테스트 및 배포를 자동화하는 클라우드 CI/CD 플랫폼입니다. CircleCI, 2024에 따르면, 이 플랫폼은 월간 3천만 개 이상의 빌드를 처리하며 Orbs — 인기 도구용 사전 구성 패키지 — 를 기반으로 한 고유한 아키텍처를 제공합니다.
핵심 내용
CircleCI는 2011년에 설립된 클라우드 CI/CD 플랫폼입니다. 이 시스템은 YAML 파일 .circleci/config.yml에서 파이프라인을 설명하고 격리된 컨테이너 또는 가상 머신에서 실행할 수 있습니다. CircleCI는 Android, iOS, Flutter 및 React Native를 포함한 모든 인기 언어와 플랫폼을 지원합니다.
모바일 개발을 위해 CircleCI는 Xcode가 사전 설치된 macOS Executor(iOS 빌드용), Android SDK가 있는 Linux Executor, 그리고 Gradle 및 CocoaPods 캐싱을 제공합니다. 핵심 기능은 Orbs로, 한 줄(orb: android, orb: ios, orb: flutter)로 사전 구성된 설정을 연결할 수 있습니다. CircleCI는 리포지토리를 처음 연결할 때 프로젝트 유형을 자동으로 감지하고 템플릿 구성을 제안합니다.
플랫폼은 디버깅을 위해 실행 중인 컨테이너에 대한 SSH 액세스를 지원합니다 — 실패한 빌드 문제 해결에 유용한 기능입니다. CircleCI CLI를 사용하면 로컬에서 구성을 검증 및 실행하고, Orbs를 관리하며, 로그를 볼 수 있습니다. 플랫폼은 웹훅 시스템을 통해 GitHub, GitHub Enterprise, Bitbucket 및 GitLab과 통합됩니다.
CircleCI 아키텍처는 Pipeline, Workflow 및 Job의 세 가지 수준으로 구성됩니다. Pipeline은 커밋 시 트리거되는 루트 프로세스입니다. Pipeline은 Workflows(순차적 또는 병렬로 실행할 수 있는 Job 그래프)로 구성됩니다. 각 Job은 Executor(특정 이미지가 있는 환경)에서 실행됩니다. Workflow에는 승인 게이트(배포 전 수동 확인)가 포함될 수 있습니다.
Orbs는 CircleCI Orb Registry를 통해 배포되는 재사용 가능한 YAML 구성 패키지입니다. Orb에는 jobs, commands, executors 및 예제가 포함될 수 있습니다. 인기 있는 Orbs: android, ios, flutter, firebase, slack. 예를 들어, android Orb를 추가하면 50줄 이상의 구성이 한 줄로 대체됩니다. CircleCI CLI를 사용하면 조직 전체에서 파이프라인을 표준화하기 위해 자체 Orbs를 만들고, 테스트하고, 게시할 수 있습니다.
| Executor | 적합한 용도 | 빌드 환경 |
|---|---|---|
| Docker | Android, Backend | Linux 컨테이너 |
| macOS | iOS, macOS | Xcode가 있는 macOS VM |
| Machine | Docker-in-Docker | Ubuntu VM |
| Windows | .NET, WinUI | Windows Server |
Contexts는 조직 수준에서 사용 가능한 명명된 환경 변수 집합입니다. 예를 들어, app-store-credentials 컨텍스트에는 App Store에 게시하기 위한 Apple ID와 비밀번호가 포함됩니다. 이는 프로젝트 간 중복 없이 시크릿 관리를 간소화합니다.
Android 프로젝트의 경우 CircleCI는 Android SDK가 있는 cibuilds/android Docker 이미지를 사용합니다. 일반적인 워크플로에는 체크아웃, JDK 설치, Gradle 캐싱, 빌드, 테스트 실행이 포함됩니다. iOS의 경우 Xcode 및 코드 서명 설정이 있는 macOS Executor가 필요합니다. 처음 연결할 때 CircleCI는 프로젝트 유형을 자동으로 감지하고 권장 설정으로 기본 구성을 생성합니다.
Flutter 프로젝트의 경우 CircleCI는 circleci/flutter Orb를 제공합니다. 여기에는 Linux 및 macOS용 Flutter SDK가 사전 설치된 Executor가 포함됩니다. Orb는 두 플랫폼 모두에 대한 빌드, pub-cache 캐싱 및 테스트 실행을 지원합니다. 설정은 Flutter 버전과 빌드 명령을 지정하는 것으로 충분합니다. 사용자 정의 Flutter 또는 Dart 버전의 경우 필요한 SDK가 있는 Docker 이미지를 사용할 수 있습니다. Flutter Orb는 고급 옵션도 지원합니다 — 예를 들어, 빌드 전 dart analyze를 통한 코드 분석 등입니다.
CircleCI의 Android Orb는 build-and-test, deploy-to-play-store와 같은 사전 구축된 Job을 제공합니다. Orb는 자동으로 환경, 캐싱 및 서명을 구성합니다. Orb를 추가한 후에는 SDK 버전과 빌드 명령만 지정하면 됩니다.
iOS 빌드의 경우 Executor는 Xcode 버전과 함께 macos로 설정됩니다. CircleCI는 Xcode 14, 15, 16 이미지를 제공합니다. 체크아웃 후 코드는 xcodebuild를 통해 컴파일되고 시뮬레이터에서 테스트가 실행됩니다. 코드 서명은 fastlane match 또는 수동 인증서 설치를 통해 구성됩니다.
캐싱은 CircleCI 성능의 핵심 요소입니다. 캐시 메커니즘은 키를 사용하여 워크플로 실행 간에 디렉터리를 저장합니다. Gradle의 경우 ~/.gradle, CocoaPods의 경우 Pods/, npm/SPM의 경우 node_modules/.build가 캐시됩니다. 잠금 파일이 변경되면 캐시가 자동으로 업데이트됩니다. CircleCI는 별도의 정책을 지원합니다: save_cache는 지연 가능(when: always)하지만 restore_cache는 필수입니다.
병렬 처리를 resource class와 결합하면 빌드 성능을 미세 조정할 수 있습니다. Resource class는 컨테이너의 CPU와 RAM을 결정합니다: small(1 CPU, 2 GB), medium(2 CPU, 4 GB), medium+(3 CPU, 5 GB), large(4 CPU, 8 GB). Xcode를 사용한 iOS 빌드의 경우 medium 이상의 resource class와 함께 macOS Executor를 사용하는 것이 좋습니다 — Swift 코드 컴파일에는 상당한 리소스가 필요합니다.
병렬 처리는 테스트를 여러 컨테이너로 분할하여 실행 시간을 단축합니다. 예를 들어: parallelism: 4는 4개의 병렬 컨테이너에서 테스트를 실행합니다. CircleCI는 자동으로 컨테이너 간에 테스트 파일을 분산합니다. circleci tests glob 명령은 테스트 목록을 수집하고 circleci tests split은 이를 균등하게 분산합니다.
- restore_cache:
keys:
- v1-gradle-{{ checksum "build.gradle" }}
- v1-gradle-
- run: ./gradlew assembleDebug
- save_cache:
key: v1-gradle-{{ checksum "build.gradle" }}
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
build 및 test 두 개의 Job이 있는 Android 프로젝트를 위한 전체 CircleCI 구성을 살펴보겠습니다. 구성에는 Android SDK가 있는 Docker Executor, Gradle 캐싱 및 병렬 테스트 실행이 포함됩니다. 아티팩트는 다운로드용으로 저장됩니다. build-and-test 워크플로는 메인 브랜치에 푸시할 때마다 두 Job을 모두 실행합니다.
version: 2.1
orbs:
android: circleci/android@2.5.0
jobs:
build:
executor: android/default
steps:
- checkout
- android/restore-gradle-cache
- run: ./gradlew assembleRelease
- android/save-gradle-cache
- store_artifacts:
path: app/build/outputs/apk/release
- store_test_results:
path: app/build/reports/tests
test:
executor: android/default
parallelism: 4
steps:
- checkout
- android/restore-gradle-cache
- run:
command: |
cd app
./gradlew test
workflows:
version: 2
build-and-test:
jobs:
- build
- test
CircleCI와 대안 중에서 선택할 때 — 팀에서 GitHub를 사용하는 경우 GitHub Actions가 더 간단한 선택일 수 있습니다. CircleCI는 유연한 병렬 테스트 실행, 사용자 정의 Executor 환경 구성 및 상세한 빌드 통계가 필요한 팀에 더 적합합니다. CircleCI Insights는 파이프라인 성능 메트릭(평균 빌드 시간, 트렌드, 병목 현상)이 포함된 대시보드를 제공합니다. Insights는 장시간 실행되는 Job을 식별하고 최적화하는 데 도움이 됩니다. CircleCI API를 사용하면 프로그래밍 방식으로 파이프라인을 관리하고, 빌드를 트리거하고, 메트릭을 검색할 수 있습니다.
안전한 시크릿 관리를 위해 CircleCI는 Contexts — 조직 수준의 명명된 환경 변수 집합 — 를 지원합니다. Contexts는 역할 기반 액세스로 보호됩니다: 특정 팀만 특정 컨텍스트를 사용할 수 있습니다. 예를 들어, production-deploy 컨텍스트에는 App Store Connect 키가 포함되어 있으며 리드 개발자만 액세스할 수 있습니다. 승인 게이트와 결합하여 포괄적인 CI/CD 보안 시스템을 형성합니다.
CircleCI Orb Registry에는 다양한 CI/CD 작업을 위한 수백 개의 사전 구축 패키지가 있습니다. 모바일 개발을 위한 주요 Orbs: circleci/android, circleci/ios, circleci/flutter, laurencerussell/firebase-app-distribution. 각 Orb는 버전 관리되고 문서화되어 있습니다. Orbs는 공개(모두 사용 가능) 또는 비공개(조직 전용)일 수 있습니다.
Orbs를 사용하면 구성이 5~10배 줄어듭니다. 예를 들어, circleci/android Orb는 사전 설치된 SDK와 restore-gradle-cache, save-gradle-cache 명령이 있는 android/default Executor를 제공합니다. circleci/ios Orb에는 Xcode가 있는 Executor와 fastlane을 통한 코드 서명 명령이 포함됩니다. Orbs는 쉽게 결합할 수 있습니다: 빌드용 android Orb와 알림용 slack Orb를 추가하세요.
CircleCI는 또한 테스트 보고서에 대한 기본 제공 지원을 제공합니다. Store_test_results는 JUnit, XCTest 및 기타 형식의 테스트 결과를 자동으로 파싱하고 시각화합니다. 모바일 프로젝트의 경우 이는 실패한 테스트, 런타임 트렌드 및 빌드 안정성 기록의 중앙 집중식 보기를 의미하여 코드 품질 유지 관리를 간소화합니다.
orbs:
ios: circleci/ios@2.0.0
jobs:
build-and-test:
executor: ios/default
steps:
- checkout
- ios/install-dependencies
- ios/build-and-test
사용자 정의 Orb 게시는 CircleCI CLI를 통해 가능합니다. circleci orb create 및 circleci orb publish 명령은 Orb를 레지스트리에 업로드합니다. 이는 조직 내에서 CI/CD를 표준화하는 데 유용합니다 — 한 번 생성하여 모든 프로젝트에서 사용합니다.
자주 묻는 질문
CircleCI는 컨테이너 1개에 월 6000분이 포함된 무료 요금제를 제공합니다. Performance Plan(월 $30)에는 10개의 병렬 Job과 14,000분이 포함됩니다. Scale Plan은 무제한 병렬 처리를 포함한 맞춤형 가격입니다.
Orbs는 공식 레지스트리를 통해 배포되는 재사용 가능한 YAML 구성 패키지입니다. 인기 도구 및 플랫폼을 위한 사전 구축된 jobs, commands 및 executors가 포함되어 있습니다.
예, CircleCI는 Xcode(버전 14, 15, 16)가 사전 설치된 macOS Executor를 지원합니다. iOS 17 및 18, watchOS, tvOS용 이미지를 사용할 수 있습니다. 코드 서명은 fastlane match 또는 수동으로 구성됩니다.
Job에서 parallelism: N을 지정하면 — CircleCI가 테스트를 N개의 컨테이너로 분할합니다. circleci tests split 명령이 테스트를 균등하게 분산합니다. 테스트는 병렬로 실행되어 컨테이너 수에 비례하여 총 시간이 단축됩니다.
CircleCI는 더 유연한 Executors(Docker, macOS, Machine, Windows), 고급 Orb 시스템, 기본 제공 병렬 테스트 분할 및 상세한 빌드 아티팩트를 제공합니다. GitHub Actions는 GitHub 통합 및 단순성에서 우수합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.