1) 자동화: 개발, 빌드, 테스트, 배포 과정을 자동화하여 신속하고 안정적으로 서비스를 배포한다.
2) CI: 개발자의 코드 변경 사항을 지속적으로 병합하고 테스트한다.
3) CD: 변경된 코드가 자동으로 운영 환경에 배포될 수 있도록 지원한다.
4) 모니터링: 실시간 모니터링을 통해 서비스 성능 및 이슈를 빠르게 감지한다.
애플리케이션 코드를 자동으로 빌드, 테스트, 배포하는 과정을 거쳐 소프트웨어 개발을 추진하는 프로세스이며, 보통 줄여서 CI/CD라고 한다.
DevOps 이론에서 개발 이후의 과정을 뜻한다고 보면 된다.
업무를 자동화함으로써 얻는 장점은 다음과 같다.
1) 인적 오류 최소화
2) 업데이트 처리 및 릴리즈 시간 단축
3) 생산성 향상
CI란 지속적인 통합을 의미하며, 개발자가 코드 변경 사항을 지속적으로 공유 리포지토리에 병합하는 것을 뜻한다.
개발자가 코드를 Push하면 CI/CD 도구가 자동으로 코드를 빌드하고 테스트를 수행하며, 빌드 성공 시 실행 가능한 패키지(Artifact)를 생성한다.
개발자는 최대한 소규모 기능 단위로 Commit을 수행함으로써 충돌을 방지하고, 코드 품질을 유지할 수 있다.
CD란 지속적인 제공과 배포를 의미하며, CI 이후의 프로세스를 뜻한다.
지속적인 제공은 개발자가 수동으로 승인하여 운영 환경에 배포하는 것, 지속적인 배포는 수동 승인 없이 운영 환경까지 자동 배포하는 것이다.
여기서 지속적인 제공이 수동 승인이라고 해서 수동 배포라고 생각하면 안된다. 지속적인 제공도 운영 배포 직전까지 모든 과정을 자동화하는 것이 핵심이며, 최종 배포만 수동 승인이 필요한 것이다!
따라서 CI/CD 도구 없이 모든 작업을 수동으로 한다면 단순한 수동 배포일 뿐 CD라고 보기 어렵다.
| 지속적인 제공 | 지속적인 배포 | |
|---|---|---|
| 배포 방법 | CI를 통과한 코드가 테스트 환경에 배포된 후, 수동 승인으로 운영 환경에 배포됨 (=수동 릴리즈) | CI를 통과한 코드가 자동으로 운영 환경에 배포됨 (=자동 릴리즈) |
| 배포 속도 | 최종 승인이 필요하기 때문에 상대적으로 느림 | 코드가 자동 배포되므로 빠름 |
| 예시 | 대기업, 금융권 등 | 스타트업, B2C 등 |
| Jenkins | GitHub Actions | |
|---|---|---|
| 특징 | 오픈소스 CI/CD 도구 | GitHub에서 제공하는 CI/CD 도구 |
| 설치 | 별도 서버 구축 필요 (클라우드 등) | GitHub 기본 제공으로 서버 설치 불필요 |
| 설정 | declarative 혹은 scripted 파이프라인 구현 | YAML 기반 설정 |
| 비용 | 자체 서버 운영 시 무료 | Free Tier 내에서 무료 |
| 보안 | 자체 보안 설정 필요 | GitHub 보안 기능 제공 |
| 운영 환경 | 복잡한 CI/CD 구축 혹은 멀티 클라우드 환경 | GitHub 저장소 기반 빠른 CI/CD 구축 혹은 서버 운영 없는 간단한 자동화 |
다양한 플러그인을 제공하여 확장성 높음
오랜 기간 사용되어 커뮤니티 활발함 (오류 해결하기 유용하다.)
AWS 등 멀티 클라우드에서 사용 가능
서버 구축 및 파이프라인 설정이 필요하여 초보자 접근이 힘듦
UI가 직관적이지 않음
GitHub와 연동
별도 설치 필요 없음
YAML 파일로 설정 간단 (properties 대신 yml을 사용하는 이유가 있었다.)
보안 기능 내장
Jenkins에 비해 플러그인이 상대적으로 적음
Free Tier를 초과하면 비용 발생
GitHub에 의존적임
참고