CI와 CD는 지속적인 통합과 지속적인 배포로서 개발 생산성을 위해 자동화하는 과정을 말합니다.
CI / CD는 지속적 통합 및 지속적 배포로 말할 수 있습니다. 여기서 지속적 통합은 개발된 코드를 지속적으로 통합하여 소프트웨어를 개발하는 과정을 자동화하는 것을 의미하며, 지속적 배포는 통합된 코드를 자동으로 테스트 하고, 배포할 수 있도록 하는 것입니다.
이러한 과정을 통해서 소프트웨어 개발 및 배포 프로세스를 자동화하고 개발자 팀이 보다 효율적으로 작업할 수 있도록 지원합니다.
CI가 사용되는 가장 대표적인 공간은 바로 Github 입니다. 깃허브는 소스코드들을 버전별로 관리하고 공유하는 공간입니다. 이는 여러 소스코드가 개발되고, 이들이 하나로 합쳐진다는 의미입니다.
특히 깃허브의 여러 오픈 소스 프로젝트는 회사 직원 뿐만 아니라 다른 개발자들도 기여할 수 있기 떄문에 CI 같은 통합 자동화가 이루어져야 합나디.
CI / CD 는 개발 프로세스에 많은 시간을 단축해 주고, 개발자들이 온전히 개발에만 집중할 수 있게 합니다. 그렇기 때문에 많은 회사가 CI와 CD를 활용해 개발을 진행합니다.
작업한 코드를 퇴근하기 전에 업로드하면 자동으로 테스트를 진행하고, 테스트에 성공하면 빌드 과정을 거쳐 실제 서비스에 Deploy하는 환경을 구축합니다. 이러한 환경을 최초 설계하는 것은 많은 시간이 들기 때문에 이 방법을 사용하지 않는 회사들도 존재하지만, 이 환경을 구축해두면 시간을 크게 단축할 수 있기 때문에 많은 회사가 이 개발 프로세스를 사용하기 위해 다양한 시도를 하고 있습니다.
CI는 지속적인 통합을 의미합니다. 개발자들은 깃을 사용함으로써 코드들을 메일 혹은 카카오톡 등을 통해 공유하지 않고 빠르게 합칠 수 있습니다. 과거에는 이렇게 합친 파일들은 단순히 코드들이고 이상 여부를 확인하는 것은 개발자들의 몫이었습니다. CI는 이런 문제점을 해결하기 위해 개발된 프로세스입니다.
미리 코드 검사를 진행 가능한 테스팅 코드들을 작성해서 코드에 이상이 있는지 확인하는 작업인 디버깅을 진행하고, 실제 소프트웨어를 공급하는 가공물로 만들어 주는 빌드 과정을 자동으로 진행합니다.
CD는 지속적 배포를 의미합니다. CI로 개발자들이 작성한 코드들을 하나로 묶어 완성된 코드를 사용자에게 자동으로 제공합니다. 개발자들이 작업하는 각자의 작업 환경을 로컬 환경이라고 얘기합니다. 그런데 실제로 사용자가 이용하는 페이지는 개발자의 로컬 환경이 아니라 회사의 서버 혹은 AWS, Azure에서 제공하는 클라우드 환경입니다.
CD는 서버에 하나로 묶은 파일을 올리는 작업을 자동으로 진행합니다. 언제 어떤 파일을 어디에 올릴지 정의해 두면 특정 작업을 마친 후 자동으로 테스트부터 빌드, 배포까지 진행할 것이고, 개발자는 개발에만 집중 가능하게 됩니다.
팀 프로젝트를 준비하다 보면 각자 맡은 역할을 준비하는 것보다 모든 작업물을 합치는 데 더 많은 시간을 투자해야 합니다.
모든 작업물을 분류해 좋은 작업물을 선별하고, 하나의 결과물로 합쳐야 하기 때문입니다. 이 과정이 자동화된다면 팀원들은 각자 맡은 역할에 더 집중이 가능해집니다. 프로그래밍에서도 이 부분은 마찬가지입니다. 개발자들은 CI를 통해 작업물들을 합치는 과정을 진행하고, CD를 통해 작업물들을 자동화하여 배포할 수 있습니다.