CI&CD

[CI/CD] CI/CD 란? 자동화로 완성되는 개발의 흐름

천재단미 2025. 3. 11. 14:25
728x90
반응형

1f6ec661-127e-4284-9fa8-da157b8329da

 

목차 ▽열기

 

 

 

개발자라면 누구나 한 번쯤은 들어봤을 용어, 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는 보통 다음과 같은 파이프라인 구조로 이루어져 있습니다.

  1. Source
    • GitHub에 코드 Push/PR 발생 감지
  2. Build
    • Gradle 빌드 수행
  3. Test
    • 유닛 테스트, UI 테스트 자동 실행
  4. Deploy
    • 빌드 결과물을 서버 or 스토어로 배포

예시 구조

스크린샷 2025-04-13 오후 10


⚙️ 내가 선택한 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를 구축하면...

팀원 간 협업 효율성 향상

반복 작업 자동화

오류 발생률 감소

빠른 배포로 피드백 수집 가능

개발을 자동화하면, 우리는 더 창의적인 개발에 집중할 수 있습니다.

728x90
반응형
home
}