CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계들을 자동화를 통해서 조금 더 효율적이고 빠르게 사용자에게 배포할 수 있도록 만드는 것을 말한다.
CI는 지속적인 통합의 약자로, 버그 수정이나 새로 만든 기능들이 메인 repository에 주기적으로 build가 되고 test가 되어서 merge되는 것을 말한다. CI(지속적인 통합)에는 2가지 포인트가 있다.
협업하는 개발자들이 merge를 오랫동안 안하다가 한 번에 하면 분명 충돌이 일어날 것이다. 이러면 새로운 기능의 코드를 작성하는 시간보다 충돌을 해결하는 코드를 고치는데에 시간이 더 오래걸릴 수 있다. 그래서 작은 단위로 나누어서 주기적으로 빈번히 개발하고 merge 하는것이 중요하다.
주기적으로 merge된 코드의 변경 사항이 자동으로 빌드가 되어서 코드 변경사항 이후에도 빌드가 성공적으로 되는지 확인이 되어야 하고, 새로 추가된 코드의 변경사항 뿐만 아니라 기존의 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 되어야 한다.
이렇게 CI를 했을 때 좋은점은 주기적으로 merge를 하기 때문에 merge충돌을 피할 수 있어서 개발의 생산성을 높일 수 있고, merge되는 코드들은 자동으로 빌드되고 테스트되기 때문에 코드의 결함이나 문제점이 빠르게 발견될 수 있다. 이러면 주기적으로 코드를 merge했기 때문에 작은 단위에서 문제점을 찾을 수 있다.
CD는 지속적인 (제공 / 배포)의 약자로, 자동화해서 배포를 진행하는 것이다.
CI에서 테스트를 마치고 release하기 위해 개발자들이 검증을 한 다음에 배포하는 것을 말한다.
CI에서 테스트 마치면 바로 자동으로 배포까지 되는 것을 Continuous Deploy라 한다.
이 둘의 차이점은 최종 단계가 자동화 되었는지 아닌지에 따라 구분할 수 있다.
배포 자동화를 하면 개발자는 배포보다 개발에 더욱 신경쓸 수 있다는 장점이 있다.