😀필자는 단기프로젝트를 진행할 때 github action을 통해 CI/CD의 구현을 노력해보았지만, 실패하였다. 실질적인 개념에 대한 이해 없이 기술적인 부분만 만들어내려 했기 때문에 CI와 CD가 어떠한 의미를 가지고 필수적으로 포함해야할 내역이 무엇인지 생각해 보지 않아서 생겼던 일이었다.
이번에 CI/CD에 대해서 확실한 개념을 정리해 보자.
😀CI/CD는 소프트웨어 개발의 전반적인 과정을 자동화하여 빠른 소프트웨어 제공을 가능하게 하는 개념이다. CI/CD는 지속적 통합(Continuous Integration), 지속적 배포(Continuous Deployment 또는 Delivery), 지속적 테스트(Continuous Testing) 등을 포함한다.
좀더 세부적으로 CI와 CD의 개념을 따로 알아보자
"CI" 는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.
CI가 제대로 구현되면 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합된다.
따라서 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌하는 문제를 이 방법으로 해결할 수 있다.
😀쉽게말해 우리가 코드작성을 완료하고 github에 커밋을 하기 전에 Test를 하거나 Thunder client 나 DB Json을 이용해서 하나하나 일일이 코드의 상태를 확인하지 않아도 github에 커밋 및 머지를 했을 때 패지키 다운 및 Test, 충돌문제를 자동화하여 개발코스트를 줄여주는 역할을 해준다.
CI는 CT의 개념을 포함하는 개념을 가진다. 위의 빌드와 테스트를 거치기 때문에 지속적인 테스트의 의미를 포함할 수 있다.
"CD" 는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환하여 사용된다.
downtime(서비스 중단 시간)을 최소화하여 사용자들이 서비스에 대한 연속적인 접근성을 유지하면서도 최신 버전의 소프트웨어를 이용할 수 있게 하는 것을 목적으로 한다.
두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
😀위의 내용처럼 CI와 CD는 구분해서 따로설명할 수 있지만 CI/CD를 크게하나의 묶음으로 보게된다면, 배포의자동화를 의미할 수 있다.
CI/CD를 구현하면 소프트웨어 변경 사항이 발생하면 자동으로 빌드, 테스트, 패키징, 배포 등의 작업이 이루어지므로, 개발자가 수동으로 배포 과정을 수행하는 것보다 더욱 효율적이고 안정적으로 배포를 수행할 수 있을 것이다.
참고자료(출처)
Red hat 주제 CI/CD(Continuous Integration/Continuous Delivery)란?
Circleci Blog posting Continuous deployment without downtime
stnopsys CI CD