CI/CD란
한 프로젝트에 작업할 때, 코드 업데이트가 일어나고
매번 통합 과정, 빌드 테스트, 배포까지 일일이 개발자가 하게 된다면
이를 자동화 시켰을 때 보다
불필요한 시간과 과정이 발생하게 된다.
이를 좀 더 효율적으로 개선하기 위해서 나온 개념이 CI/CD이다.
CI(Continuous Integration) 지속적 통합과
CD(Continuous Delivery/Deployment) 지속적 제공/배포를 의미한다.
그 중 가장 먼저인 CI는 빌드/테스트 자동화 부분인데, 간단한 예시를 들어 보자.
개발자들이 Git 등을 이용해서 프로젝트를 진행하고 있을 때,
오랜 기간 작업 후에 merge하게 된다면, 병합 과정에 있어 충돌이 일어나게 된다.
코드를 작성하는 것 보다 충돌 해결에 더 많은 시간이 들게 되는,
배보다 배꼽이 더 커지는 사태가 일어나는 것이다.
그렇다면 빌드와 테스트를 프로그램이 자동으로 해준다면 어떨까?
개발자가 코드 업데이트 이후 MR / PR을 요청했을 때
미리 작성해둔 CI 과정에 따라, 충돌이 발생하지 않았을 경우 자동으로 MR / PR을 수락하고,
충돌이 발생했을 경우에는 MR / PR이 거절되는 방식으로 자동화한다면
개발자들의 시간을 보다 더 절약할 수 있을 것이다.
이 과정을 지속적 통합인 CI라고 칭한다.
그렇다면 자연히, CD는 배포에서의 자동화 과정을 의미한다.
D가 Delivery를 의미하냐, Deployment를 의미하냐에 따라 과정이 살짝 달라지는데,
제공(Delivery)의 경우에는, CI 과정에서 빌드와 테스트를 거친 뒤, 배포가 준비되었을 때
개발자가 직접 수동으로 배포하는 것을 지속적인 제공(Continuous Delivery) 라 칭하고,
자동으로 배포까지 진행되는 것을 지속적인 배포(Continuous Deployment)라 칭한다.