개발자라면 CICD라는 말을 어디선가 들어본 경험은 있을 것이다. CICD란 지속적인 통합(Continuous integration, CI)과 지속적인 배포(Continuous delivery, 혹은 Continuous deployment CD)를 의미한다. 의미는 알겠는데, 왜 자주 회자되며 중요성이 강조될까?
CI, 지속적인 통합이란 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것을 의미한다.
일반적인 개발 환경에서는 여러 개발자가 동시에 작업을 하게된다. 이런 환경에서 CI가 제대로 구축이 되어있지 않다면 어떻게 될까? 여러 명의 개발자가 동시에 코드 작업을 할 경우 충돌할 수 있는데, 이런 문제를 미연에 알 수 없게 된다. 코드의 양이 적다면 금방 충돌된 부분이나 에러를 찾아낼 수 있지만, 코드의 양이 많다면 추적이 매우 힘들어 질 것이다.
CI를 제대로 구축하게 된다면, 새로운 코드의 변경사항이 빌드 및 테스트 되므로 문제를 사전에 찾을 수 있게된다. 통합과정에서의 문제를 찾는 과정은 리소스를 너무 많이 소요하기 때문에 CI과정은 필수적인 것이다.
지속적인 배포는 간단히 말하면 배포 자동화 과정이다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면, 변경사항이 자동적으로 배포되게 된다.
지속적 배포는 입증된 CI과정을 기반으로 하며, 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트과정(CI)를 거지며, 문제가 발생되지 않으면 최종적으로 배포(CD)되는 것이다.
CI/CD 파이프라인
어떻게 보면 단순한 개념이고, 때문에 CI/CD의 중요성을 가벼이 여기는 경우가 종종있다. 하지만 CI/CD 파이프라인 구축을 등한시 하게 되면 어느새 수천줄의 디버깅과정과 빌드/배포 과정에서 생기는 오류와 싸우고 있는 자신을 발견할 수 있을 것이다.