카테고리 없음

DevOps Research - CI/CD

Seon Dev Notes 2026. 3. 16. 10:54

안녕하세요 오늘은 소프트웨어 배포 과정에서 매우 중요한 개념인 CI/CD에 대해 알아보겠습니다.

소프트웨어 개발 과정에서 여러 개발자가 동시에 작업을 하게 되면 코드 충돌이 발생하거나 배포 과정에서 오류가 발생할 가능성이 높습니다. 또한 수동으로 빌드와 배포를 진행할 경우 시간이 오래 걸리고 실수가 발생할 가능성도 존재합니다.

이러한 문제를 해결하기 위해 등장한 것이 CI/CD이다.

CI란?

CI(Continuous Integration) 는 여러 개발자가 작성한 코드를 하나의 저장소에 지속적으로 통합하는 과정을 의미합니다.
개발자가 코드를 저장소에 업로드하면 자동으로 빌드와 테스트가 실행되면서, 문제가 없는 경우에만 코드가 통합됩니다.

CD란?

CD(Continuous Delivery / Continuous Deployment) 는 통합된 코드를 실제 운영 환경에 자동으로 배포하는 과정을 의미합니다.
상황에 따라서 지속적 제공(Continuous Delivery) 또는 지속적 배포(Continuous Deployment) 라는 두 가지의 의미로 쓰입니다.

  • 지속적 제공 (Continuous Delivery): CI 프로세스를 거친 코드가 신뢰할 수 있는 상태로 유지되면서 언제든 배포할 준비가 된 상태를 의미합니다. 마지막 배포 단계는 사람의 승인을 거칩니다.
  • 지속적 배포 (Continuous Deployment): 코드 수정 사항이 파이프라인을 통과하면 별도의 수동 개입 없이 실제 운영 환경까지 자동으로 배포되는 단계입니다.

왜 CI/CD를 도입할까?

CI/CD를 도입하면 개발과 배포 과정에서 많은 장점들을 가질 수 있다.

  1. 빠른 배포가 가능하다
    • 코드가 변경될 때마다 자동으로 빌드와 테스트, 배포 과정이 진행되기 때문에 새로운 기능이나 수정 사항을 빠르게 서비스에 반영할 수 있습니다.
  2. 오류의 조기 발견
    • 코드가 통합될 때마다 자동 테스트가 실행되기 때문에 버그나 오류를 빠르게 발견하고 수정할 수 있습니다.
  3. 개발 생산성 향상
    • 빌드와 테스트, 서버 배포와 같은 반복적인 작업이 자동화되면서 개발자는 이러한 작업을 직접 수행할 필요 없이 기능 개발에 더 집중할 수 있습니다.
  4. 안정적인 서비스 운영
    • 자동화된 테스트와 배포 과정을 통해 사람이 직접 서버에 접속하여 배포할 때 발생할 수 있는 버전 오류나 파일 누락과 같은 실수를 줄일 수 있습니다.

CI/CD 파이프라인

CI/CD가 구축된 환경에서는 개발자가 코드를 병합하는 단계부터 서비스에 배포하는 단계까지 순차적으로 진행됩니다. 이러한 자동화된 배포 과정을 CI/CD 파이프라인(Pipeline) 이라고 부릅니다.

CI/CD 파이프라인(Pipeline)흐름도

Developer → Git Push
               ↓
             Build
               ↓
              Test
               ↓
             Deploy
               ↓
           Production

개발자가 코드를 저장소에 업로드하면 자동으로 빌드와 테스트가 진행됩니다.

  • 빌드 단계: 소스 코드를 컴파일하고, 필요한 라이브러리를 다운로드하며, 애플리케이션을 패키징 합니다.
  • 테스트 단계: 유닛 테스트, 통합 테스트, 기능 테스트 등을 실행하여 코드의 품질을 검증합니다.
  • 배포 단계: 테스트가 통과된 코드를 스테이징 환경이나 프로덕션 환경에 배포합니다. 여기에는 Docker 이미지 생성 및 배포, Kubernetes 클러스터에 배포 등이 포함될 수 있습니다.
  • 모니터링 단계: 배포된 애플리케이션의 성능과 안정성을 모니터링하고, 로그 및 사용자 피드백을 수집합니다. 이를 통해 발생한 문제를 빠르게 해결할 수 있습니다.
    CI/CD 파이프라인에서는 이러한 단계를 거치면서 빌드, 테스트, 배포 과정이 자동으로 수행됩니다.

CI/CD 개발도구

CI/CD 환경에서는 자동화된 빌드와 테스트, 배포를 위해 다양한 도구들이 사용됩니다.
대표적인 CI/CD 도구는 아래와 같은 도구들이 있습니다.

  • Jenkins
  • Github Actions
  • GitLab CI/CD
    또한 컨테이너 기반 배포 환경에서는 아래와 같은 기술들이 함께 사용됩니다.
  • Docker
  • Kubernetes
    이러한 도구들을 활용하면 빌드, 테스트, 배포 과정을 자동화하여 보다 효율적인 개발 환경을 구축할 수 있습니다.

GitHub Actions를 활용한 CD 자동화 예시

다음은 GitHub Actions 를 활용하여 Android 애플리케이션을 자동으로 빌드하고 배포하는 CI/CD 파이프라인 예시입니다.

1. Workflow 실행 조건

on:
  push:
    branches: [ "master" ]

2. 실행 환경 설정

- name: Setup JDK 17
  uses: actions/setup-java@v4

- name: Setup Android SDK
  uses: android-actions/setup-android@v3

3. Gradle 캐싱

- name: Cache Gradle packages

4. 앱 빌드

- name: Assemble Release Bundle
  run: ./gradlew clean bundleRelease

5. 앱 서명

- name: Sign Release
  uses: r0adkll/sign-android-release@v1

6. Google Play 배포

- name: Deploy to production
  uses: r0adkll/upload-google-play@v1

7. 배포 결과 알림

# 성공 시
if: ${{ success() }}

# 실패 시
if: ${{ failure() }}

마무리

CI/CD는 소프트웨어 개발 과정에서 코드 통합, 테스트, 배포 과정을 자동화하여 빠르고 안정적인 서비스 제공을 가능하게 하는 DevOps의 핵심 기술 입니다.