CI/CD란 무엇인가? 배포 자동화 개념부터 GitHub Actions까지
CI/CD는 코드 변경사항을 자동으로 빌드, 테스트, 배포하여 소프트웨어를 더 빠르고 안정적으로 출시하는 개발 방법론이다.
이 글은 DevOps와 자동화에 관심을 갖기 시작한 개발자와 취업 준비생을 대상으로 작성되었다. CI/CD는 현대 소프트웨어 개발에서 필수적인 개념으로, 2025년 DevOps 현황 보고서에 따르면 CI/CD를 도입한 팀은 배포 빈도가 그렇지 않은 팀보다 평균 208배 높다.
CI/CD란 무엇인가?
CI/CD는 두 가지 개념의 결합이다:
CI(Continuous Integration, 지속적 통합) 여러 개발자가 작성한 코드를 자주(하루에도 여러 번) 중앙 저장소에 통합하고, 자동으로 빌드·테스트를 실행하는 방식이다. 코드 충돌이나 버그를 조기에 발견하여 수정 비용을 줄인다.
CD(Continuous Delivery/Deployment, 지속적 배포) CI를 통과한 코드를 자동으로 스테이징 또는 프로덕션 환경에 배포하는 방식이다.
- Continuous Delivery: 배포 준비까지 자동화, 실제 배포는 수동 승인 후 진행
- Continuous Deployment: 승인 없이 프로덕션까지 완전 자동 배포
CI/CD가 없을 때의 문제
CI/CD 없이 개발할 때 발생하는 일반적인 문제들:
- 며칠치 코드를 한꺼번에 통합해 충돌 해결에 많은 시간 소요
- "내 컴퓨터에서는 되는데 서버에서는 안 됨" 환경 차이 문제
- 수동 배포 과정에서 실수로 서비스 장애 발생
- 배포가 두렵고 자주 하지 않게 되어 더 큰 배포가 반복
CI/CD 파이프라인의 단계
일반적인 CI/CD 파이프라인은 다음과 같이 구성된다:
- 코드 커밋: 개발자가 코드를 Git 저장소에 푸시
- 자동 빌드: 코드를 컴파일하고 실행 가능한 아티팩트 생성
- 자동 테스트: 단위 테스트, 통합 테스트, E2E 테스트 실행
- 코드 품질 검사: 정적 분석, 코드 커버리지, 보안 취약점 스캔
- 스테이징 배포: 테스트 환경에 자동 배포
- 프로덕션 배포: 승인 후 또는 자동으로 운영 환경에 배포
GitHub Actions vs Jenkins 비교표
| 구분 | GitHub Actions | Jenkins |
|---|---|---|
| 설치 방법 | GitHub에 내장 | 별도 서버에 설치 |
| 설정 방식 | YAML 파일 | Groovy DSL 또는 GUI |
| 서버 관리 | GitHub 관리 | 직접 관리 |
| 무료 사용 | 공개 저장소 무제한 / 비공개 월 2,000분 | 오픈소스 무료 |
| 플러그인 생태계 | 빠르게 성장 중 | 1,800개+ 플러그인 |
| 학습 곡선 | 낮음 | 높음 |
| 추천 대상 | GitHub 사용 팀, 빠른 시작 | 복잡한 사용자 정의 파이프라인 |
GitHub Actions 기초 예시
# .github/workflows/deploy.yml
name: CI/CD Pipeline
on:
push:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
- run: npm test
deploy:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Deploy to server
run: echo "Deploying to production..."
이 워크플로는 main 브랜치에 코드가 푸시될 때마다 자동으로 빌드, 테스트, 배포를 실행한다.
CI/CD의 핵심 가치: DORA 지표
Google의 DORA(DevOps Research and Assessment) 팀이 제시한 4가지 핵심 지표:
- 배포 빈도(Deployment Frequency): 얼마나 자주 프로덕션에 배포하는가
- 변경 리드 타임(Lead Time for Changes): 코드 커밋부터 프로덕션 배포까지 걸리는 시간
- 변경 실패율(Change Failure Rate): 배포 후 실패로 이어지는 비율
- 복구 시간(Time to Restore): 장애 발생 시 복구에 걸리는 시간
2025년 DORA 보고서에 따르면, CI/CD를 잘 구축한 "엘리트" 팀은 하루에 여러 번 배포하며, 변경 실패율은 5% 미만이다.
자주 묻는 질문 (FAQ)
Q1. CI와 CD의 차이는 무엇인가요? A. CI(지속적 통합)는 코드를 자주 통합하고 자동으로 빌드·테스트하는 과정이다. CD(지속적 배포)는 CI를 통과한 코드를 자동으로 배포하는 과정이다. CI는 CD의 선행 조건이다.
Q2. 작은 팀이나 혼자 개발할 때도 CI/CD가 필요한가요? A. 그렇다. 1인 개발자도 CI/CD를 통해 배포 실수를 줄이고, 일관된 빌드 환경을 유지하며, 테스트 자동화로 품질을 보장할 수 있다. GitHub Actions 기본 기능은 무료이므로 진입 장벽도 낮다.
Q3. CI/CD 파이프라인 구축에 얼마나 걸리나요? A. 기본 빌드·테스트·배포 파이프라인은 GitHub Actions를 사용하면 수 시간 내에 구축할 수 있다. 고급 기능(블루-그린 배포, 카나리 배포, 모니터링 연동)은 팀 규모와 복잡도에 따라 더 오래 걸린다.
Q4. Docker를 사용하면 CI/CD가 더 좋아지나요? A. 그렇다. Docker를 사용하면 "내 컴퓨터에서는 되는데"라는 환경 차이 문제가 사라진다. 개발, 테스트, 프로덕션 환경을 동일한 Docker 이미지로 통일할 수 있어 CI/CD 파이프라인의 안정성이 크게 높아진다.
Q5. GitHub Actions의 무료 사용 한도는 어떻게 되나요? A. 공개 저장소는 무제한 무료다. 비공개 저장소는 월 2,000분까지 무료(Linux 기준)이며, 초과 시 분당 $0.008이 청구된다.