
목차 ▽열기
개발자라면 누구나 한 번쯤은 들어봤을 용어, CI/CD.
코드를 빌드하고, 테스트하고, 배포하는 이 반복적인 과정들을 매번 수동으로 한다면 얼마나 비효율적일까요?
CI/CD는 바로 이 지루한 작업들을 자동화하는 가장 강력한 도구입니다.
이번 글에서는 CI/CD가 무엇인지, 실제 프로젝트에 어떻게 적용할 수 있는지, 그리고 제가 Github Actions를 활용하여 Android 프로젝트에 CI/CD를 적용한 사례까지 함께 소개드릴게요.
1. CI/CD란 무엇인가요?
CI/CD는 다음의 약어입니다.
- CI (Continuous Integration) : 지속적인 통합
- CD (Continuous Delivery / Deployment) : 지속적인 제공 또는 배포
CI/CD는 단순한 개념이 아닌, 개발 → 빌드 → 테스트 → 배포 전 과정을 자동화하는 개발 문화입니다.
2. CI (지속적인 통합)
CI는 개발자가 작성한 코드를 공유 리포지토리에 자주 병합(Merge) 하고, 병합 시마다 자동으로 빌드와 테스트가 수행되도록 하는 방식입니다.
3. 왜 CI가 중요할까요?
- 팀원 간 충돌을 빠르게 파악
- 코드 변경 즉시 테스트 자동 수행
- 버그를 조기 발견
- 릴리즈 속도 향상
예: Android 프로젝트에서 CI 구성
./gradlew assembleDebug # 디버그 빌드
./gradlew testDebugUnitTest # 디버그 유닛 테스트 실행
4. CD (지속적인 제공 또는 배포)
CD는 CI 다음 단계입니다. 빌드와 테스트가 완료된 코드를 자동으로 운영 환경 또는 스테이징 서버에 배포합니다.
- Continuous Delivery: 프로덕션 배포 전까지 자동화, 배포는 수동
- Continuous Deployment: 배포까지 모두 자동화
대표적인 예
- GitHub Page: 커밋만 하면 자동으로 웹에 반영
- Firebase Hosting: firebase deploy 자동화
- Play Store 배포 자동화
🔁 CI/CD 파이프라인 구조
CI/CD는 보통 다음과 같은 파이프라인 구조로 이루어져 있습니다.
- Source
- GitHub에 코드 Push/PR 발생 감지
- Build
- Gradle 빌드 수행
- Test
- 유닛 테스트, UI 테스트 자동 실행
- Deploy
- 빌드 결과물을 서버 or 스토어로 배포
예시 구조

⚙️ 내가 선택한 CI/CD 도구: GitHub Actions
왜 선택했을까?
- GitHub와 완벽하게 연동
- Public 레포지토리에서는 무료
- 설정 간단 (yml만 작성하면 OK)
android.yml 설정(Sample)
name: Android CI
on:
push:
branches: [ develop ]
pull_request:
branches: [ develop ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup JDK
uses: actions/setup-java@v2
with:
java-version: '11'
- name: Create google-services
run: echo '${{ secrets.GOOGLE_SERVICES_JSON_DEBUG }}' > ./app/google-services.json
- name: Build
run: ./gradlew assembleDebug
- name: Run Tests
run: ./gradlew testDebugUnitTest
보안파일 관리: Secrets 사용
CI에서는 google-services.json과 같은 보안 파일도 필요합니다.
이를 위해 GitHub Actions에서는 Secrets 기능을 제공합니다.
run: echo '${{ secrets.GOOGLE_SERVICES_JSON_DEBUG }}' > ./app/google-services.json
Settings → Secrets → Actions 에서 보안 파일을 문자열로 등록해두고, CI가 실행될 때 파일로 만들어 빌드에 활용합니다.
디버그/릴리즈 플래버 주의사항
빌드가 실패한 적이 있었는데, 그 이유는…
google-services.json을 Debug용으로 등록해놓고, 릴리즈 빌드를 실행한 것이 원인이었습니다.
해결 방법은?
./gradlew assembleDebug # 디버그 빌드로 명시
./gradlew testDebugUnitTest # 디버그 유닛 테스트로 명시
CI/CD 정리
구분 역할 대표 명령어
CI | 코드 통합, 빌드, 테스트 자동화 | assembleDebug, testDebugUnitTest |
CD | 배포 자동화 | firebase deploy, play store upload |
결론
CI/CD를 구축하면...
팀원 간 협업 효율성 향상
반복 작업 자동화
오류 발생률 감소
빠른 배포로 피드백 수집 가능
개발을 자동화하면, 우리는 더 창의적인 개발에 집중할 수 있습니다.
'CI&CD' 카테고리의 다른 글
[CI&CD][이론] 하이브리드 휴먼-인-더-루프(Human-in-the-Loop) 시스템 (0) | 2025.05.01 |
---|