CI/CD는 간단히 말해서 애플리케이션 개발단계부터 배포 때까지 모든 단계 들을 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 배포할 수 있는 것을 말한다.
CI = 빌드 및 테스트 자동화
CD = 배포 자동화
CI(Continuous Integration)
CI는 지속적인 통합을 뜻한다.
코드 변경사항이 주기적으로 빌드되고 테스트되어 merge되는것을 말하며 개발자용 자동화 프로세스이다.
예를 들어, 개발자들이 오랜기간 각자 코드를 작성하고 합치게 된다면 개발을 한 시간보다 충돌을 해결하는데 시간이 더 소모될 것이다. 만약 동시에 개발하여 분기가 너무 많거나 상당히 긴 코드가 중복되어 충돌이 생긴다면 생각도 하기 싫을 것이다..
또한 통합을 할때마다 빌드, 테스트, 머지 과정을 거치게 된다면 불필요한 시간이 반복적으로 소모되어 효율성도 떨어진다.
이를 방지하여 통합을 위한 단계(빌드, 테스트, 머지)의 자동화가 이루어져 효율적으로 일할수 있는 것이 CI라고 볼수 있다. 우리는 코드 변경사항을 주기적으로 머지해야 하고 최대한 작은 단위로 분할하여 개발하고 통합하는 게 중요하다.
CI를 적용하면 우리는 작성한 코드를 git에 올리기만 하면 끝나는 것이다.
CI 장점
- 개발 생산성 향상
- 빠른 문제점 발견 -> 버그 수정용이
- 테스트코드를 필수로 통과해야 통합되기 때문에 높은 코드 퀄리티를 유지할 수 있다.
CD(Continuos Delivery, Continuous Deployment)
CD는 지속적인 제공(Continuos Delivery), 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환하여 사용된다.
지속적인 제공은 CI를 통해 주기적으로 머지된 변경사항들이 빌드, 테스트가 문제없이 완료되었다면 수동적으로 배포하는 단계를 의미한다. 효과적인 지속적 제공 프로세스를 마련하려면 CI가 이미 구축되어 있어야 한다.
CI에서 빌드, 테스트가 성공적으로 이루어진 후에, 배포단계에서 업로드할 준비가 되었는지 검증한 후 운영팀이 배포를 수동적으로 진행하는 것이 Continuous Delivery, 지속적인 제공이다. 반대로 검증한 뒤 배포할 준비가 되자마자 자동화 배포를 진행하는 것이 Continuous Deployment, 지속적인 배포이다.
회사마다 얼마만큼의 어느정도의 자동화를 하느냐가 다르기 때문에 CI/CD라고 해서 모든 회사가 같은 과정을 거치는 게 아니다.
CD의 장점
- 개발자가 배포보다는 개발에 더욱 신경 쓸 수 있도록 해준다.
- 개발자가 수작업 없이 빌드, 테스트, 배포까지 자동화를 할 수 있다.
😽 참고
https://www.youtube.com/watch?v=0Emq5FypiMM
CICD란?