27강: 지속적인 배포(CD) – Flutter 프로젝트의 완전 자동화된 배포 파이프라인 구축하기
이번 강의에서는 지속적인 배포(CD)를 통해 Flutter 프로젝트의 완전 자동화된 배포 파이프라인을 구축하는 방법에 대해 알아볼 거야. CD는 코드가 안정적인 상태로 테스트를 통과한 후, 자동으로 배포 단계까지 이어지도록 설정하는 것이 목표야. 이를 통해 최소한의 인력 개입으로 빠르고 안정적인 배포를 가능하게 하고, 사용자가 최신 기능을 빠르게 이용할 수 있게 해. 이번 강의에서는 CI/CD의 마지막 단계인 CD를 구현하여 배포를 자동화하는 방법과 그 장점들을 살펴볼 거야.
지속적인 배포(CD)란?
지속적인 배포(CD)는 애플리케이션이 코드 저장소에 변경될 때마다 자동으로 테스트하고 빌드하며, 최종적으로 배포까지 자동화하는 과정을 의미해. 이 과정에서 배포는 수동 승인 단계 없이 자동으로 이루어지기 때문에, 사용자들은 빠르게 새로운 기능과 버그 수정을 경험할 수 있어.
1) CD의 장점
- 빠른 출시 주기: 코드가 테스트를 통과하면 바로 배포되어, 사용자 피드백을 빠르게 반영하고 개선할 수 있어.
- 배포 안정성 보장: CI 단계에서 충분히 검증된 코드만 배포되기 때문에, 안정적인 배포를 보장할 수 있어.
- 개발 효율성 향상: 배포 과정이 자동화됨에 따라 개발자는 코드 작성에 집중할 수 있어, 운영적인 부담이 줄어들어.
2) CD 도구 소개
- Firebase App Distribution, Fastlane, Bitrise, Codemagic 등 여러 배포 도구들이 있어. 이번 강의에서는 Firebase App Distribution과 Fastlane을 활용해 Flutter 프로젝트 배포를 자동화해 볼 거야.
Flutter 프로젝트에 CD 설정하기
Flutter 프로젝트에서 지속적인 배포(CD)를 구현하려면, 기존의 CI 파이프라인에 배포 단계를 추가해야 해. 이를 통해 자동화된 빌드 후 곧바로 배포가 이루어지도록 설정할 수 있어.
1) Firebase App Distribution을 사용한 배포
Firebase App Distribution은 Android와 iOS 앱을 테스트 사용자에게 쉽게 배포할 수 있는 도구야. GitHub Actions를 사용하여 Firebase 배포를 자동화해 보자.
Firebase 설정 및 GitHub Actions 통합
- 먼저 Firebase CLI를 설치하고, 프로젝트를 Firebase와 연결해야 해. 이후 Firebase API Key를 GitHub Secrets에 저장하여 배포에 사용할 수 있어.
GitHub Actions 설정 파일 수정하기
- 기존의 CI 설정 파일에 배포 단계를 추가해.
name: Flutter CI/CD
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.0.0'
- name: Install dependencies
run: flutter pub get
- name: Run analyzer
run: flutter analyze
- name: Run tests
run: flutter test
- name: Build APK
run: flutter build apk --release
- name: Deploy to Firebase App Distribution
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
run: |
firebase appdistribution:distribute build/app/outputs/flutter-apk/app-release.apk \
--app YOUR_FIREBASE_APP_ID \
--groups testers
- build APK: flutter build apk –release 명령어를 통해 릴리스 버전의 APK를 생성해.
- deploy to Firebase: 생성된 APK를 Firebase를 통해 테스트 사용자에게 배포해. Firebase App Distribution을 사용하면 원하는 그룹(예: 테스트 사용자)에게 자동으로 배포할 수 있어.
2) Fastlane을 활용한 배포 자동화
Fastlane은 앱 배포를 쉽게 자동화할 수 있는 도구로, Android 및 iOS 모두 지원해. 이를 사용해 앱 스토어에 배포하거나 베타 테스트 사용자에게 배포할 수 있어.
Fastlane 설정
- 먼저 Fastlane을 프로젝트에 설정하고, Fastfile을 작성해.
- Fastlane을 통해 APK 파일을 Google Play에 직접 배포할 수 있어.
Fastfile 예시
platform :android do
desc "Deploy to Google Play"
lane :deploy do
gradle(task: "clean bundle", build_type: "release")
upload_to_play_store(track: "beta")
end
end
- gradle clean bundle: Android 빌드를 깨끗하게 진행하고 번들 파일을 생성해.
- upload_to_play_store: 생성된 파일을 Google Play에 업로드해, 여기서는 베타 트랙으로 설정하여 테스트 사용자에게 배포해.
GitHub Actions에서 Fastlane 실행하기
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7
- name: Install Fastlane
run: gem install fastlane
- name: Deploy to Google Play
run: fastlane android deploy
- Ruby 설치: Fastlane을 사용하려면 Ruby가 필요해.
- Fastlane 설치 및 실행: Fastlane을 설치하고, deploy 레인을 실행하여 앱을 배포해.
CD 구현 시 고려해야 할 사항들
1) 배포 안정성을 위한 단계적 배포
- 새로운 기능을 포함한 배포는 항상 위험성을 수반해. 이를 줄이기 위해, 단계적 배포를 통해 사용자 일부에게만 우선 배포하고 문제가 없는지 확인한 후 전체 배포를 진행하는 것이 좋아.
2) 보안 관리
- API 키나 환경 변수와 같은 민감한 정보는 GitHub Secrets와 같은 안전한 저장소에 저장해야 해. 이를 통해 보안 사고를 예방할 수 있어.
3) 롤백 전략 준비
- 자동화된 배포에서 문제가 발생할 수 있기 때문에, 항상 롤백 전략을 준비해야 해. 문제가 발생했을 때 이전 안정적인 버전으로 되돌릴 수 있는 방법을 마련해 두는 것이 중요해.
실제 프로젝트 적용 사례
1) 모빌리티 서비스 애플리케이션
- 지속적인 배포(CD)를 통해 새로운 기능이 추가될 때마다 빠르게 사용자에게 배포했어. 특히, 사용자 피드백을 빠르게 반영하면서도 안정적인 버전을 제공하기 위해 Firebase App Distribution을 활용해 내부 테스트를 거친 후 배포했어.
2) 뉴스 매체 애플리케이션
- Fastlane을 사용해 Android와 iOS 버전의 앱을 모두 자동 배포하고, 각 스토어의 메타데이터를 쉽게 업데이트했어. 이를 통해 배포 시간이 크게 줄었고, 매주 새로운 기능을 사용자에게 안정적으로 제공할 수 있었지.
3) 금융 서비스 애플리케이션
- 단계적 배포를 통해 새로운 버전을 먼저 소규모 사용자에게 배포하고, 피드백을 수집한 후 전체 배포를 진행했어. 이를 통해 금융 데이터와 관련된 중요한 오류를 조기에 발견하고 문제를 해결할 수 있었어.
마무리
이번 강의에서는 지속적인 배포(CD)를 통해 Flutter 프로젝트에서 완전 자동화된 배포 파이프라인을 구축하는 방법을 다뤘어. Firebase App Distribution과 Fastlane을 활용해 배포 과정을 자동화하고, CI/CD의 마지막 단계를 완성하여 사용자가 빠르고 안정적으로 새로운 기능을 사용할 수 있도록 했지. 이러한 자동화된 배포 환경은 개발 팀의 효율성을 높이고, 사용자에게 최고의 경험을 제공하는 데 큰 도움이 돼. 다음 강의에서는 모니터링과 지표 수집을 통해 배포 후 애플리케이션의 성능과 안정성을 지속적으로 개선하는 방법을 탐구해 보자. 계속해서 함께 Flutter의 가능성을 넓혀 나가자!