CI/CD

Continuous Integration (CI)와 Continuous Deployment (CD)의 약자

소프트웨어 개발에서 사용되는 방법론이자 도구들의 조합을 의미한다.

지속적 통합 (Continuous Integration, CI)

개발자들이 코드 변경 사항을 중앙 저장소에 자주(일반적으로는 하루에 여러 번) 병합(머지)하는 것

각 병합 시마다 코드를 자동으로 빌드하고 테스트하여, 개발 초기 단계에서 문제를 발견하고 수정할 수 있게 한다.

통합 과정에서 발생할 수 있는 문제를 최소화하여, 소프트웨어의 품질을 향상시킨다.

지속적 배포 (Continuous Deployment, CD)

모든 코드 변경 사항이 테스트를 통과한 후 자동으로 운영 환경에 배포되는 것을 의미

지속적 전달 (Continuous Delivery)

지속적 배포의 한 단계 전 과정

모든 코드 변경 사항이 테스트를 통과하면 운영 환경에 배포될 준비가 되는 것을 의미

CI/CD의 일반적인 순서

  1. 코드 변경 사항 관리 (Version Control)
    1. 코드 변경 사항을 버전 관리 시스템에 커밋
    2. Git
  2. 자동화된 빌드 (Build Automation)
    1. 코드 변경이 감지되면 CI 도구가 자동으로 빌드를 시작
      1. GitHub Actions / Jenkins
    2. 소스 코드를 가져와 필요한 종속성을 설치하고, 빌드 프로세스를 실행
      1. Docker 이미지를 빌드 / 코드를 컴파일하고 패키지를 생성
  3. 테스트 (Testing)
    1. 빌드된 애플리케이션에 대해 자동화된 테스트를 실행
    2. 단위 테스트, 통합 테스트 등 다양한 테스트 레벨을 포함할 수 있다.
    3. 테스트 결과는 품질 보증을 위해 평가
  4. 릴리스 준비 (Release Preparation)
    1. 테스트가 성공적으로 완료되면 릴리스를 위한 준비 작업을 수행
    2. 빌드된 애플리케이션을 패키징하거나, 배포할 준비
      1. Docker Hub, AWS ECR, Google Container Registry 등의 Docker 레지스트리를 사용
  5. 배포 (Deployment)
    1. 준비된 애플리케이션 또는 서비스를 실제 환경에 배포
    2. 자동화된 방식으로 배포를 수행하여, 사용자에게 새로운 기능을 제공
    3. Kubernetes 클러스터, AWS ECS, Azure Kubernetes Service 등의 컨테이너 오케스트레이션 플랫폼
  6. 모니터링과 피드백 (Monitoring and Feedback)
    1. 배포된 애플리케이션을 모니터링하여 성능 및 안정성을 확인
    2. 사용자의 피드백을 수집하여 애플리케이션의 개선 사항을 식별