지속적 전달 및 배포 (CD)
지속적 전달과 지속적 배포의 차이점
Continuous Delivery (지속적 전달)
지속적 전달(Continuous Delivery, CD) 은 개발한 소프트웨어를 언제든지 프로덕션 환경에 배포할 수 있도록 항상 준비된 상태로 유지하는 프로세스입니다. 지속적 전달의 목표는 코드를 소규모로 자주 배포하여, 빠른 피드백을 받고, 배포 위험을 최소화하는 것입니다. 지속적 전달은 수동 배포 단계를 제외한 모든 단계를 자동화합니다.
Continuous Deployment (지속적 배포)
지속적 배포(Continuous Deployment) 는 지속적 전달을 확장한 개념으로, 모든 코드 변경 사항이 자동으로 프로덕션 환경에 배포되는 것을 의미합니다. 지속적 배포는 인간의 개입 없이 모든 단계를 자동화하여 배포 과정의 속도와 일관성을 극대화합니다.
주요 차이점
- 지속적 전달: 배포 가능한 상태로 유지하지만, 실제 배포는 수동으로 이루어집니다.
- 지속적 배포: 모든 코드 변경 사항이 자동으로 프로덕션 환경에 배포됩니다.
CD 도구 소개
Jenkins
Jenkins는 강력한 오픈 소스 자동화 서버로, 다양한 빌드, 테스트, 배포 작업을 자동화할 수 있습니다. 파이프라인 플러그인을 통해 복잡한 CD 워크플로우를 구성할 수 있습니다.
GitLab CI/CD
GitLab CI/CD는 GitLab에 내장된 CI/CD 도구로, 코드 리포지토리에 통합되어 사용하기 쉽습니다. 파이프라인을 정의하는 .gitlab-ci.yml
파일을 통해 배포 작업을 자동화할 수 있습니다.
CircleCI
CircleCI는 클라우드 기반의 CI/CD 도구로, 빠른 빌드와 배포를 지원합니다. YAML 파일을 사용하여 파이프라인을 정의하며, 다양한 환경에서의 배포를 지원합니다.
Spinnaker
Spinnaker는 Netflix에서 개발한 멀티 클라우드 배포 도구로, 복잡한 배포 전략을 지원합니다. 지속적 배포를 위한 강력한 기능을 제공하며, 다양한 클라우드 플랫폼을 지원합니다.
Jenkins를 이용한 CD 설정
배포 파이프라인 구성
Jenkins에서 배포 파이프라인을 구성하려면 Jenkinsfile을 작성해야 합니다. Jenkinsfile은 파이프라인을 코드로 정의하는 파일입니다.
Jenkinsfile 예제
배포 전략 설정
블루-그린 배포
블루-그린 배포는 두 개의 환경(블루와 그린)을 사용하여 배포하는 전략입니다. 현재 트래픽이 블루 환경에서 서비스되는 동안, 새로운 버전은 그린 환경에 배포됩니다. 배포가 완료되면 트래픽을 그린 환경으로 전환합니다.
카나리 배포
카나리 배포는 새로운 버전을 일부 사용자에게만 배포하여 문제를 조기에 발견하는 전략입니다. 점진적으로 트래픽의 비율을 높여가며 새로운 버전을 배포합니다.
GitHub Actions를 이용한 CD 설정
배포 워크플로우 구성
GitHub Actions를 사용하여 CD 파이프라인을 구성하려면 워크플로우 파일을 작성해야 합니다. GitHub 저장소에 .github/workflows
디렉토리를 생성하고, 워크플로우 파일을 작성합니다.
워크플로우 파일 예제
다양한 환경에 배포하기
GitHub Actions를 사용하여 다양한 클라우드 환경에 배포할 수 있습니다. 예를 들어, AWS, GCP, Azure와 같은 클라우드 플랫폼에 배포하는 워크플로우를 작성할 수 있습니다.
AWS에 배포
AWS에 배포하기 위해서는 AWS CLI를 설정하고, IAM 역할과 권한을 설정해야 합니다.
GCP에 배포
GCP에 배포하기 위해서는 gcloud CLI를 설정하고, 서비스 계정을 사용해야 합니다.
Azure에 배포
Azure에 배포하기 위해서는 Azure CLI를 설정하고, 서비스 주체를 사용해야 합니다.
배포 전략 및 롤백 설정
배포 전략
- 블루-그린 배포: 두 개의 환경(블루와 그린)을 사용하여 배포합니다. 현재 트래픽이 블루 환경에서 서비스되는 동안, 새로운 버전은 그린 환경에 배포됩니다. 배포가 완료되면 트래픽을 그린 환경으로 전환합니다.
- 카나리 배포: 새로운 버전을 일부 사용자에게만 배포하여 문제를 조기에 발견하는 전략입니다. 점진적으로 트래픽의 비율을 높여가며 새로운 버전을 배포합니다.
롤백 설정
배포 중 문제가 발생할 경우 롤백을 설정하여 이전 안정 버전으로 복구할 수 있습니다. 이를 통해 가용성을 유지하고, 사용자에게 끼치는 영향을 최소화할 수 있습니다.
이로써 지속적 전달 및 배포(CD)의 개념과 주요 도구, Jenkins와 GitHub Actions를 이용한 CD 설정 방법, 배포 전략 및 롤백 설정에 대해 알아보았습니다.
이를 통해 배포 프로세스를 자동화하고, 소프트웨어의 배포 속도와 안정성을 높일 수 있습니다.