채용공고에서 CI/CD를 여러번 본적있지만 개념을 확실하게 공부하지 않고 그냥 자동화 툴? 정도로만 알고 있었습니다. 이번엔 CI/CD가 정확히 무엇을 뜻하는 것인지 알아보도록 하겠습니다.
보통 프로젝트가 진행될 때 모든 코드가 한번에 완성되고 빌드, 배포되지 않습니다. 당연히 만드는 과정중에 코드가 수정되기도 하고 기능이 추가되기도 합니다. 또 프로젝트가 협업으로 이루어지는 경우 다른 개발자의 코드를 통합하는 과정도 빈번하게 발생합니다. 이 빈번하고 반복적인 작업을 거칠때 마다 빌드와 배포가 다시 진행됩니다.
이 처럼 매번 에너지를 낭비한다면 개발 효율이 낮아질 것 입니다. 만약 에너지를 낭비하지 않고 자동화하여 일을 처리한다면 다른 곳에 에너지를 투자할 수 있다면 개발 효율성을 증가 시킬수 있을 것입니다.
이러한 에너지를 낭비를 막아주는 자동화 과정을 CI/CD라고 부릅니다. 아래 ChatGPT가 정의하는 CI/CD가 무엇인지 확인해 보겠습니다.
CI/CD?
CI/CD는 Continuous Integration / Continuous Delivery (혹은 Continuous Deployment)의 약자로 소프트웨어 개발 프로세스의 자동화된 방식을 뜻합니다.
CI/CD는 소프트웨어 개발에서 발생하는 문제를 해결하기 위한 방식입니다. 개발 프로세스의 일부로 소스 코드의 변경사항이 지속적으로 통합되고, 자동화된 테스트 및 빌드, 배포가 이루어지며, 배포 후에도 지속적인 모니터링이 이루어집니다.
CI와 CD를 나눠서 자세히 살펴보도록 하겠습니다.
지속적인 통합을 뜻하며 개발에서 발생하는 문제 중 하나인 소스 코드 통합 문제를 해결하기 위한 방법 중 하나입니다.
CI 과정
코드 변경 ⇨ 빌드 ⇨ 테스트 ⇨ 통합
개발자는 작은 단위로 주기적으로 코드를 머지하기 때문에 머지 충돌이 최소화됩니다. 이후 자동으로 CI 스크립트를 통해서 빌드, 테스트, 통합이 진행됩니다. 덕분에 자동화 과정중 문제가 생김을 빠르게 파악할 수 있고 코드 결함을 빠르게 수정 할 수 있습니다. 이는 개발 생산성 향상, 개발 안정성 향상으로 이어집니다.
정리하자면 코드 변경에 따른 빌드, 테스트, 통합 과정을 자동화 한것을 CI라고 부릅니다.
Continuous Delivery
애플리케이션을 지속적으로 배포하는 것이 아니라 지속적으로 배포할 수 있는 능력을 제공합니다. 즉, 빌드, 테스트, 통합 단계를 거친 애플리케이션을 수동으로 배포할 수 있는 능력을 의미합니다. Continuous Delivery를 적용하면, 배포 과정에서 발생하는 수작업 작업을 줄이고, 배포의 빈도와 신뢰성을 높일 수 있습니다.
Continuous Delivery 배포 : 결과적으로 개발자가 검토하고 배포
Continuous Deployment
Continuous Deployment는 Continuous Delivery와 유사하지만, 애플리케이션 배포 과정 자체를 자동화합니다. 즉, 빌드, 테스트, 통합 과정을 거친 애플리케이션을 자동으로 프로덕션 환경에 배포합니다. Continuous Deployment를 적용하면, 배포 과정에서 발생할 수 있는 인간의 오류를 줄이고, 배포 빈도를 더욱 높일 수 있습니다.
Continuous Deployment 배포 : 스크립트를 통한 자동 배포
즉 CD는 개발팀이 변경 사항을 더 빠르게 배포하고, 사용자들은 더 빠르게 새로운 기능을 사용하도록 도와줍니다. 또 배포 과정 문제를 빠르게 파악, 수정이 가능하도록 도와주며 개발자가 배포 과정에 쏟을 시간과 노력 등 에너지를 다른 작업에 투자할 수 있어 개발 효율성이 증가하게 됩니다.