CI/CD는 소프트웨어 개발에서 코드 작성(개발)부터 배포까지의 과정을 자동화해주는 방법론.
CI와 CD는 각각 다른 의미지만, 실제로는 하나의 파이프라인처럼 이어져 있음.
1. CI/CD란 무엇인가?
- CI (지속적 통합): 코드 커밋 시 자동 테스트 & 빌드
- CD (지속적 배포): 빌드된 결과물을 자동으로 배포
- 왜 필요한가? (협업 효율, 버그 감소, 속도 향상)
CI: Continuous Integration (지속적 통합)
"모든 개발자가 자주, 매일같이 코드를 공유 저장소에 자주 통합한다."
● 핵심 개념
- 머지(merge), 빌드, 테스트의 자동화
- 여러 명이 개발할 때, 코드 병합(merge) 전에 자주 코드를 통합해서 충돌 가능성을 줄임
- 자동 테스트를 돌려서, 올바른 코드인지 검증
● 예시
- 누군가 main 브랜치에 코드를 올리면
- GitHub Actions가 자동으로 실행됨
- 테스트 코드 돌림 (gradle test, npm test 등)
- 이상 없으면 통합 성공!
CD는 2가지 의미로 나뉨:
1. Continuous Delivery (지속적 제공)
"코드를 자동으로 빌드하고, 테스트해서 배포 직전 상태까지 자동화함."
- 빌드 & 테스트까지 자동화된 후 → 운영 서버에 직접 배포는 사람이 함
2. Continuous Deployment (지속적 배포)
"배포도 사람이 안 하고, 자동으로 서버에 배포까지 함."
- 테스트 통과하면 → 자동으로 EC2나 Render 같은 서버에 올라감
정리
단계 | 전통 방식 | CI/CD 방식 |
코드 작성 | 로컬에서 작성 | 동일 |
코드 병합 | 수동 병합, 충돌 많음 | CI로 자동 병합 & 테스트 |
테스트 | 수동 실행 | 자동화된 테스트 |
빌드 | 수동으로 빌드 | 자동 빌드 |
배포 | 서버에 직접 접속해서 배포 | 자동 배포 (CD) |
CI/CD 왜 써야 할까?
- 시간 절약: 매번 빌드/테스트/배포 수동으로 안 해도 됨
- 버그 조기 발견: 코드 변경 직후 테스트 자동 수행
- 일관성 있는 배포: 사람 실수 방지
- 팀 협업에 유리: 여러 명이 동시에 일해도 안전하게 통합 가능
2. CI/CD 구성 요소
- GitHub Actions (워크플로우 자동화 도구)
- Docker (컨테이너화된 애플리케이션)
- 배포 타겟: EC2, Render, Railway, Vercel 등
- (Optional) Slack 알림, Test Coverage 등
3. GitHub Actions 실전 예제
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
- name: Build with Gradle
run: ./gradlew build
- name: Docker Build & Push
run: |
docker build -t myapp .
# docker push myapp (옵션)
추가 개념)
https://devlog-wjdrbs96.tistory.com/300
[AWS] 블루/그린(Blue/Green) 배포 방식이란?
AWS 무중단 배포 과정 지금까지 Auto Scaling, 로드밸런서를 이용해서 서버를 구축하는 과정을 알아보았습니다. 그런데 현재 서버를 운영 중인데 새로운 소스 코드를 업데이트 해야 한다면 어떻게
devlog-wjdrbs96.tistory.com