CI / CD ( 지속적 통합 / 지속적 제공 )
CI : Continuous Integration
CD : Continuous Delivery
CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 제공한다. 소스 코드로부터 설치, 실행할 수 있는 제품을 생성하여 배포하는 과정.
# CI ( 지속적 통합 ) 란?
개발자를 위한 자동화 프로세스인 지속적인 통합. 애플리케이션에 대한 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되어 여러명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다. 소프트웨어 개발에서 각 소프트웨어 개발자가 작업한 변경점을 프로젝트의 원래 소스 코드에 자주, 빠르게 통합하는 것이다. 이를 위해 CI를 위한 각종 개발도구와 스크립트를 사용해 코드를 합치고 품질을 검사하며 테스트하는 과정을 자동화한다. 덕분에 사람이 직접 해야 하는 일이 줄어들고 문제가 생겼을 때 빨리 발견할 수 있다. 즉 개발을 하면서 지속적으로 코드에 대한 통합을 하며 품질을 유지하는것이다.
여러명의 개발자가 참여하는 프로젝트에서 개발자들이 git에서 클론을 하여 각자 로컬환경에서 작업을 한다. 만약 모든 개발자가 중앙저장소에 코드를 중간에 올리지 않고 개발이 끝난후에 여러명의 코드를 통합해야 한다면? 시간이 오래걸리고 비효율적이다.
git에 개발자들이 수시로 코드를 올리고, 코드가 동작하는지 빌드되는지 테스트를 매일 한다고 하여도 매번 테스트를 하는것은 귀찮고 비효율적이다.
그래서 git에 코드를 올려놓거나 소스코드상에 변동이 생기면 자동적으로 테스트와 빌드를 수행하는(소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴) CI 툴을 사용한다. Jenkins, Team City, Travis CI, Circle CI 등 많은 툴이 존재한다.
소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다.
# CI의 장점
- 소스코드의 변동이 생길 때마다 지속적으로 개발자들의 코드를 병합하고 테스트 한다.
- 병경한 소스코드가 문제가 발생하는지 테스트하소 문제가 발생면 알림을 전송한다.
- 개발의 편의성이 증가한다.
- 변경된 코드에 대한 피드백과 검증이 가능하다.
- 시간을 단축시킨다.
# CD ( 지속적 배포 ) 란?
CI/CD 파이프라인의 마지막 단계로 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리한다는 개념이다.
지속적인 서비스제공( Continuous Delivery), 지속적인 배포( Continuous Deployment)리는 두가지 뜻으로 CI 프로세스를 통해 빌드와 테스트를 진행하고 이를 통과한 코드에 대하여 테스트 서버와 운영서버에 배포해 반영한다.다른말로 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 실제 프로덕션에 자동으로 배포된다. 운영팀이 빠르고 쉽게 애플리케이션을 프로덕션으로 배포할 수 있다.
# CD의 장점
- 실제 배포 할 어플리케이션의 서버가 여러 대일 때, 배포할 작업물이 여러 대 일때 수작업으로 여러 작업물을 여러 서버에 배포할 때 발생할 실수를 방지할 수 있다.