DevOps/CI-CD

CI/CD의 개념

devsean 2025. 3. 3. 16:44

 

CI/CD의 이점

서비스를 배포할 때까지 개발, 테스트, 빌드, 배포 등의 많은 과정이 필요하다. 서비스를 여러 번 지속적으로 배포해야 할 경우, 그 때마다 많은 코드 변경이 필요하다. 코드가 변경될 때마다 이러한 많은 과정을 반복해야 한다면 번거로울 것이다.

 

CI/CD는 이러한 과정을 자동화하여 애플리케이션을 짧은 주기로 사용자들에게 제공하고 개발자들이 빌드, 배포와 같은 작업에 투자하는 시간을 단축시켜 개발에 더 많은 시간을 투자할 수 있도록 해준다.

 

CI(Continous Integration)

지속적인 통합을 의미한다. 애플리케이션의 코드에 변경 사항이 있을 경우 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합된다. CI를 잘 수행하기 위해서 두 가지 포인트를 이해하고 개발을 진행하면 좋다.

  1. 코드 변경 사항을 주기적으로 빈번하게 머지해야 한다. 주기적으로 머지하지 않으면 충돌 해결 시 많은 시간을 소모하게 된다. 그러므로 작업을 작은 단위로 나눠서 개발해야 하며, 버그를 수정하거나 새로운 기능을 구현한다면 바로 반영해야 한다.
  2. CI는 빌드, 테스트, 머지의 자동화를 제공한다. Git에 Push되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정을 제공한다. 이를 위해 스크립트를 작성한다. 한편 CI 테스트가 개발자들이 작성한 Unit Test, Integeration Test 등을 통해 실행되기에 CI를 위한 테스트가 반강제적이게 되어 조금 더 나은 코드 퀄리티를 만들 수 있다.

 

CD(Continous Deployment or Continous Delivery)

지속적인 서비스 제공 혹은 지속적인 배포를 의미한다. 대체로 Deployment 혹은 Delivery의 의미를 혼용하여 사용하는데, Delivery보다 Deploy가 좀 더 프로젝트 자동화에 가까운 개념이다. Delivery는 CI 과정에서 머지가 완료되면 리포지토리에 릴리즈가 업로드되고, 애플리케이션을 프로덕션 환경에 수동으로 배포한다. 이에 비해 Deployment는 배포까지 자동으로 완료하며 추가적인 검증을 거치지 않는다.

위의 CI 과정에서 추가로 스크립트를 작성하여 CD 까지 구현할 수 있다.

 

CI/CD 툴의 종류

오픈소스로 널리 활용되는 Jenkins가 있고, 그 외 ArgoCD, GitHub Actions, Trevis CI, AWS CodeDeploy 등 여러 툴이 있다.