Table of contents
Intro.
현대 소프트웨어에서 소프트웨어 개발 라이프사이클인 개발, 테스트, 운영과 모니터링을 자동화해 개발자들와 운영자들의 업무 효율성을 증가시키고, 코드 품질 개선과 배포를 빠른 속도로 수행할 수 있도록 돕는 것이 지속적인 통합과 지속적인 전달 및 배포(CI/CD)라고 한다.
"지속적인" 이라는 단어에서 유추할 수 있듯이, 이 프로세스는 자동화가 핵심이다.
이들의 공통점은 빌드, 테스트, 그리고 배포를 자주 수행할 수 있게 한다는 것이다.
자주 수행할 수 있다는 것에서 얻을 수 있는 이점에는 다음과 같은 것들이 있을 수 있겠다.
자주 수행하기 위해서는 빠른 속도가 필요하다.
빠른 속도는 일련의 프로세스를 자동화하여 얻을 수 있다.
즉, 빌드 및 테스트를 자동화해 개발자의 수고를 덜어준다.
사용자들의 피드백을 빠르게 개선한다.
개발자의 수고가 줄어 들었으니, 이슈 개선에 더 집중할 수 있게 된다.
덕분에 사용자들은 더 빨리 개선된 상품을 체험할 수 있다.
즉, 개발 품질부터 서비스 품질까지 전체적인 개선을 초래한다.
지속적인 통합(CI).
지속적인 통합(CI, Continuous Integration) 이란, 중앙 집중식 코드 레포지토리에서 일어난 변경 사항을 하루에 한 번 이상 주기적으로 통합시키는 것이다. 특히, 통합 과정을 개발자들이 수동으로 진행하는 번거로움을 해결하기 위해 CI 자동화 툴을 이용하는 편이다.
CI를 통해 변경 사항에 대한 병합을 할 시, 자동 빌드 및 테스트를 할 수 있고 이를 통해서 조기에 버그를 발견하고 수정할 수 있게 된다.
이를 위해서는 개발자가 빌드와 테스트를 자동으로 수행할 수 있도록 빌드 스크립트와 테스트 코드를 추가하는 것이 필수이다.
빌드 및 테스트 시간의 측정 기준을 수집해 이를 수동 절차와 비교하는 것은 결함률과 마찬가지로 투자 수익을 보여주는 간단한 방법
지속적인 전달과 배포(CD).
지속적인 전달(CD, Continuous Delivery)와 지속적인 배포(Continuous Deployment). 모두 CI 이후에 운영 환경에서 배포할 준비가 되도록 하는 자동 프로스세로 안정적인 배포 환경을 제공하기 위한 개념이다.
차이가 있다면 전달은 "소프트웨어를 운영 환경까지 도달시키는 데 필요한 단계들을 자동화하지만 소프트웨어 릴리즈를 완전히 자동화한 것이 아닌 프로세스"라는 것이다.
즉, 프로젝트의 코드가 항상 배포 가능한 상태에 있도록 하는 것이다.[#2]
코드 변경사항이 자동으로 운영 환경까지 배포
배포란 당연히 릴리즈까지 자동화한 프로세스를 의미하고 이를 위해서 전달보다 더 높은 수준의 테스트 커버리지와 자동화가 필요하다.
따라서 이전 단계의 자동화된 프로세스의 안정성이 충분히 입증된 시점에 도입해야 한다. (어쩌면 프로세스 뿐만 아니라 개발 문화, 팀 규칙 등이 우선 정립되어 있어야 하지 않을까?)
코드 커밋 즉시 최종 사용자에게 배포