1. CI/CD는 왜 필요할까?
개발자가 코드를 작성했다고 해서 바로 사용자에게 서비스를 제공할 수 있는 것은 아니다.
일반적으로 다음과 같은 과정이 필요하다.
코드 작성
↓
빌드
↓
테스트
↓
배포 파일 생성
↓
서버 배포
이 과정을 사람이 매번 직접 수행하면
- 테스트 누락
- 잘못된 버전 배포
- 배포 과정 실수
- 개발자마다 다른 배포 방식
같은 문제가 발생할 수 있다.
또 여러 개발자가 하나의 프로젝트를 개발하면 각자의 코드를 합쳤을 때 문제가 없는지도 계속 확인해야 한다.
Developer A ─┐
├→ 코드 통합
Developer B ─┤
│
Developer C ─┘
→ 빌드가 되는가?
→ 테스트가 성공하는가?
→ 서로 충돌하지 않는가?
따라서 코드의 통합, 빌드, 테스트, 배포 과정을 자동화할 필요가 있다.
이것이 CI/CD의 핵심이다.
2. CI란?
CI는 Continuous Integration, 즉 지속적 통합을 의미한다.
여러 개발자가 작성한 코드 변경사항을 공유 저장소에 자주 통합하고, 변경이 발생할 때마다 자동으로 빌드와 테스트를 수행하는 방식이다.
Developer
↓
Git Push / Pull Request
↓
Repository
↓
Build
↓
Test
↓
성공 / 실패 Feedback
CI의 목적은 단순히 코드를 Git에 합치는 것이 아니다.
변경된 코드가
정상적으로 빌드되는가?
테스트를 통과하는가?
기존 코드와 합쳐도 문제가 없는가?
를 자동으로 검증하고 문제를 빠르게 발견하는 것이 핵심이다.
CI Pipeline
대표적인 CI Pipeline은 다음과 같은 흐름을 가진다.
Source
↓
Build
↓
Test
↓
Analyze
↓
Artifact
- Source: Git Repository에서 코드 가져오기
- Build: 소스 코드를 JAR 등의 실행 가능한 결과물로 만들기
- Test: Unit Test, Integration Test 등 실행
- Analyze: 코드 품질, Coverage, 보안 검사
- Artifact: JAR, Docker Image 등의 배포 결과물 생성
모든 Pipeline이 반드시 이 단계를 전부 사용하는 것은 아니며 프로젝트에 필요한 단계만 구성할 수 있다.
3. CD란?
CI를 통해 코드가 정상적으로 동작한다는 것을 확인했다면 다음 단계는 배포이다.
CD는 두 가지 의미로 사용된다.
Continuous Delivery
Continuous Deployment
3.1 Continuous Delivery
Continuous Delivery는 지속적 제공이다.
CI를 통과한 애플리케이션을 언제든 운영 환경에 배포할 수 있는 상태까지 자동으로 준비한다.
Build
↓
Test
↓
Artifact
↓
배포 준비 완료
↓
사람의 승인
↓
Production 배포
즉 배포 가능한 상태까지는 자동화하지만 실제 운영 배포는 사람이 결정한다.
3.2 Continuous Deployment
Continuous Deployment는 지속적 배포이다.
CI를 통과한 변경사항을 운영 환경까지 자동으로 배포한다.
Build
↓
Test
↓
Artifact
↓
Deploy
↓
Production
따라서 차이는 다음과 같다.
Continuous Delivery
→ 배포 가능한 상태까지 자동화
→ 운영 배포는 사람의 승인
Continuous Deployment
→ 운영 환경 배포까지 자동화
4. CI/CD 전체 흐름
CI와 CD를 연결하면 다음과 같은 Pipeline을 만들 수 있다.
Developer
↓
Git Push / PR
↓
──────── CI ────────
↓
Build
↓
Test
↓
Artifact
↓
──────── CD ────────
↓
Deploy
↓
Production
↓
User
Docker를 사용하는 환경이라면
Source Code
↓
Build / Test
↓
Docker Image 생성
↓
Container Registry Push
↓
Server에 배포
같은 형태가 될 수 있다.
즉
CI는 변경된 코드를 지속적으로 검증하는 과정이고, CD는 검증된 결과물을 사용자에게 전달하는 과정이다.
5. CI/CD는 무엇으로 구현할까?
CI/CD는 하나의 기술 이름이 아니라 개발 및 배포 과정을 자동화하는 방식이다.
이를 구현하기 위해 다양한 도구를 사용할 수 있다.
GitHub Actions
Jenkins
GitLab CI/CD
ArgoCD 등
예를 들어 GitHub Actions를 사용하면 GitHub에서 Push나 Pull Request가 발생했을 때
Pull Request
↓
GitHub Actions
↓
Build
↓
Test
↓
성공 / 실패 확인
처럼 자동으로 CI Pipeline을 실행할 수 있다.
또 필요하다면 Docker Image를 만들거나 서버에 배포하는 CD 과정까지 자동화할 수도 있다.
즉 중요한 것은 특정 도구의 이름보다
어떤 이벤트가 Pipeline을 실행하는가?
어떤 Build와 Test를 수행하는가?
검증된 결과물을 어떻게 배포하는가?
를 이해하는 것이다.
6. 배포 전략은 왜 필요할까?
CD를 구축했다고 해서 기존 서버를 바로 종료하고 새 버전을 실행하면 되는 것은 아니다.
v1 종료
↓
서비스 중단
↓
v2 실행
이렇게 배포하면 서비스가 중단될 수 있고, 새로운 버전에 문제가 있다면 모든 사용자에게 영향을 줄 수도 있다.
따라서 서비스를 유지하면서 안전하게 새로운 버전을 배포하기 위한 배포 전략이 필요하다.
대표적으로
Rolling Update
Blue-Green
Canary
가 있다.
7. Rolling Update
Rolling Update는 기존 서버를 한 번에 모두 교체하지 않고 점진적으로 새로운 버전으로 변경하는 방식이다.
v1 v1 v1 v1
↓
v2 v1 v1 v1
↓
v2 v2 v1 v1
↓
v2 v2 v2 v2
별도의 환경을 하나 더 구성하지 않아도 되기 때문에 리소스를 효율적으로 사용할 수 있다.
다만 배포 중에는
v1 + v2
가 동시에 실행될 수 있으므로 두 버전 사이의 호환성을 고려해야 한다.
8. Blue-Green Deployment
Blue-Green은 기존 환경과 새로운 환경 두 개를 준비한 뒤 트래픽을 전환하는 방식이다.
Blue
v1
현재 운영
↓ 트래픽 전환
Green
v2
새 버전
새로운 Green 환경에 먼저 배포하고 문제가 없는지 확인한 뒤 트래픽을 전환한다.
문제가 발생하면 다시 Blue 환경으로 빠르게 돌릴 수 있어 Rollback이 쉽다.
반면 두 환경을 동시에 유지해야 하기 때문에 추가적인 인프라 비용이 필요할 수 있다.
9. Canary Deployment
Canary는 새로운 버전을 일부 사용자에게 먼저 배포하는 방식이다.
v1 → 95%
v2 → 5%
문제가 없는지 확인하면서
5%
↓
20%
↓
50%
↓
100%
처럼 새 버전의 트래픽을 점차 증가시킨다.
따라서 문제가 발생하더라도 처음에는 일부 사용자만 영향을 받기 때문에 배포 위험을 줄일 수 있다.
다만 트래픽 분배와 지속적인 모니터링이 필요해 운영이 복잡해질 수 있다.
10. 배포 전략 비교
| 전략 | 방식 | 특징 |
|---|---|---|
| Rolling Update | 서버를 순차적으로 교체 | 리소스 효율적 |
| Blue-Green | 두 환경을 준비하고 트래픽 전환 | 빠른 Rollback |
| Canary | 일부 트래픽부터 새 버전 적용 | 장애 영향 최소화 |
간단하게 구분하면
서버를 하나씩 바꾼다
→ Rolling Update
새 환경을 준비하고 한 번에 전환한다
→ Blue-Green
일부 사용자에게 먼저 적용한다
→ Canary
11. 핵심 정리
| 개념 | 의미 |
|---|---|
| CI | 코드 변경을 자주 통합하고 자동으로 Build/Test |
| Continuous Delivery | 배포 가능한 상태까지 자동화, 최종 배포는 승인 |
| Continuous Deployment | 운영 환경 배포까지 자동화 |
| Pipeline | Build, Test, Deploy 등이 이어지는 자동화 과정 |
| Artifact | 검증이 완료된 배포 결과물 |
| GitHub Actions / Jenkins 등 | CI/CD Pipeline을 구현하는 도구 |
| Rolling Update | 인스턴스를 점진적으로 교체 |
| Blue-Green | 두 환경을 준비하고 트래픽 전환 |
| Canary | 일부 사용자에게 먼저 새 버전 적용 |
전체 흐름은 다음과 같다.
코드 변경
↓
CI
↓
Build / Test
↓
Artifact
↓
CD
↓
Deploy
↓
Production
결국 CI/CD의 핵심은
개발자가 작성한 코드를 지속적으로 자동 검증하고, 검증된 결과물을 반복 가능하고 안전하게 사용자에게 전달하는 것
이라고 이해할 수 있다.