CI
란 빌드/테스트
의 자동화 과정이다. CI는 개발자를 위한 자동화 프로세스인 지속적 통합
을 의미한다. CI를 성공적으로 구현 할 경우 프로젝트에 대한 변경사항이 정기적으로 빌드 및 테스트 되어 공유 레퍼지토리에 통합되므로 다수의 개발자들의 한 프로젝트에 대한 코드들이 서로 충돌할 수 있는 문제를 해결할 수 있다.
지속적 통합의 실행은 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것으로 시작한다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장한다.
지속적 통합은 그 자체로 유익하지만 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계이기도 하다.
CD
란 배포 자동화 과정이다. CD
는 지속적인 서비스 제공
또는 지속적인 배포
를 의미하며 CI와 CD는 상호교환적으로 사용된다.
CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미하였는데,CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것을 의미합니다.
두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
다음은 CI / CD 를 사용할 때 얻을 수 있는 장점들이다.
- 시장 출시기간 단축: 자동화된 CI/CD 파이프라인을 사용하면 매주, 매일, 심지어 매시간 변경 사항을 전달할 수 있다.
- 위험감소: 용자의 문제를 해결해주지 못하는 기능에 몇 달 혹은 몇 년씩 노력을 투입하기 전에 접근 방식의 유효성을 검증할 수 있다.
- 검토기간 단축: 커밋을 병합하기 전에 변경해야 하는 사항이 있더라도 다시 작성해야 하는 코드와 해결해야 할 충돌이 줄어든다.
- 코드 품질 개선: 테스트를 자동화하면 테스트를 일관되게 수행할 수 있어 결과의 신뢰성이 높아진다. 자동화된 테스트는 수동 테스트보다 실행이 더 빠르기 때문에 훨씬 더 자주 테스트하는 것이 가능해진다.
코드를 정기적으로 철저하게 테스트하면 버그를 더 빨리 발견할 수 있고, 빌드마다 추가되는 기능이 적으므로 해결하기가 더 쉽다. 시간이 지나면서 코드 품질이 향상된다.- 더 빠른 버그수정: CI/CD 파이프라인을 사용하면 자동화된 테스트 실행이 더 이상 큰 부담이 아니므로 품질을 타협하려는 유혹이 줄어든다.