CS & SW & IT 용어
[CI / CD] 란 무엇인가
Haksae
2022. 1. 5. 23:44
CI : Continuous Integration
CD : Continuous Delivery / Deployment
어플리케이션 개발 단계부터 배포 때까지 이 모든 단계들을 자동화를 통해서 조금 더 효율적이고 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 개발 프로세스
*CI (지속적인 통합)
- 버그 수정, 새로 만드는 기능들이 매일 레포에 주기적으로 빌드되고 테스트가 되어서 머지되는 것을 말함
- 이 방식은 1991년 Grady Booch에 의해서 사용되어지다가, 나중에는 extreme programming 개발 방법론에서 채택되어졌음
- Graday Booch는 객체지향 프로그래밍에 관련된 아주 유명한 책을 쓴 저자
*Ci 포인트
1) 코드 변경 사항을 메인 레포에 주기적으로 빈번하게 머지해야한다.
- 머지 충돌을 방지하기위해 최대한 작은 단위로 나눠서 개발하고 통합하는 것이 중요
2) 통합을 위한 단계(빌드, 테스트,머지)의 자동화
- 주기적으로 머지된 코드의 변경사항이 자동으로 빌드가 되어서 코드 변경 사항 이후에도 빌드가 성공적으로 되는지 확인이 되어야함
- 추가된 변경 사항 뿐만 아니라 기본의 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 되어야함
- 머지가 되면 자동으로 팀에서 만든 CI Script를 통해서 해당 레포를 여러가지 테스트를 거쳐 최종 배포된다.
* 장점
- 개발 생산성 향상 : 주기적으로 머지를 하기 떄문에 머지의 충돌을 피할 수 있음
- 문제점을 빠르게 발견 : 머지되는 코드들은 자동으로 빌드와 테스트 되기 떄문에 코드의 결함이 빠르게 발견될 수 있음
- 버그 수정 용이 : 유기적으로 머지를 하기 위해서 코드의 변경사항이 작기 때문에, 버그를 수정할 떄도 보다 작은 단위를 수정하게 되기 때문ㅇ
- 코드의 퀄리티 향상 : CI를 잘 운영하기 위해서는 각자 개발한 코드에 대해서는 유닛테스트를 포함해야함. CI를 사용한다면 대부분의 소스코드들이 자동으로 테스트가 되기 때문에 안정적인 프로덕트 생산 가능
*CD : 지속적 제공, 지속적 배포
- 배포하는 단계에서 어떻게 자동화하여 배포할 수 있을지 고민
- CI에서 자동으로 빌드와 테스트가 되었다면, 릴리즈할 준비 과정을 거치고, 릴리즈된 것을 직접 검증하여 배포하는지에 따라 CD 개념이 달라짐
- 직접 검증 및 배포 : Delivery / 자동 : Deployment
- CI / CD 파이프 라인
- CI/CD Tool
- Jenkins
- GitHub Actions
- GitLab CI/CD
- Buildkite
- Bitbucket Pipelines
- circleci