Image from intland.com
Image from Devops Explaine
CIContinuous Integration (지속적 통합) : 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것.
CDContinuous Delivery (지속적 배포) : 팀이 짧은 주기로 소프트웨어를 개발하는 소프트웨어 공학적 접근의 하나로, 소프트웨어가 언제든지 신뢰 가능한 수준으로 출시될 수 있도록 보증하기 위한 것.
CI지속적 통합는 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것
이라고 정의가 쓰여있습니다. 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어서 하나의 레포지토리로 관리되는 것을 의미합니다.
SCM의 과정도 CI에 속합니다.
Source Code Management
빌드 후 작성된 테스트 코드를 통해 유효성을 검증하는 것도 CI에 속합니다.
아주 간단한 예시로 Pull Request를 생성했을 때, 소스코드가 Conflict나는 경우 Merge 버튼이 비활성화 되는 경험을 해보셨을 겁니다. 그것 또한 유효성 검사에서 실패한 것으로 CI에 속합니다.
더 나아가, CI 툴을 사용해 소스코드가 컨벤션에 준수하는지 등을 체크하는 린터로 검증을 하도록 할 수 있는 등 다양한 일이 가능합니다.
linter
Ready-to-run
상태*(배포가 가능한 상태는 아닙니다.)*가 됩니다. 즉, 중간에 누군가 합류를 해도 빌드가 되는 코드를 받을 수 있습니다.
중간에 합류해서 새로운 기능을 개발하려고 하는데 누군가 작업하고 있는 코드가 아직 공유 레포에 올라가 있어서 빌드가 안된다.
upstream
이런 경우가 발생하면 그 사람과 얘기해서 해결하던가, 직접 소스코드를 보고 돌아가도록 디버깅을 하던가 해야합니다. 하지만, 이 자체로도 시간이 소요되므로 생산성이 매우매우 떨어지게 됩니다.
CD는 지속적 제공Continuous Delivery과 지속적 배포Continuous Deployment를 모두 의미합니다.
실제 사례에서 지속적 배포는 개발자가 애플리케이션을 수정한 뒤 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있는 것을 의미합니다.