CI는 Continuous Integration 즉, 지속적인 통합이라는 의미이다.
지속적인 통합이란,
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합하는 것을 의미한다.
다수의 개발자가 형상관리 툴(Git, SVN 등)을 공유하여 사용하는 환경
지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은
기능을 추가할 때마다 commit 등을 날려 레포지토리(Repository)에 버전 업데이트를 한다.
다수의 개발자가 한 팀으로 작업할 경우,
이 공유 레포지토리에 수많은 commit들이 쌓이게 된다.
그럴 때마다 기능별로 빌드/테스트/병합(Merge)까지 하려면 상당히 번거롭기 때문에
이런 상황에서, 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어할 수 있다.
MSA(Micro Service Architecture) 환경
최근 IT 업계에 붐처럼 떠오르고 있는 아키텍처 모델로,
MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미한다.
MSA 환경에서는 대부분 Agile 방법론이 적용되기 때문에 기능 추가가 매우 빈번하게 발생한다.
이러한 상황에서 CI의 적용은 기능 충돌 방지 등의 역할을 수행할 수 있다.
CD는 Continuous Delivery 혹은 Continuous Deployment 두 용어 모두의 축약어이다.
해석하자면, 지속적인 서비스 제공 혹은 지속적인 배포라는 의미이다.
Continuous Delivery는 공유 레포지토리로 자동으로 Release 하는 것,
Continuous Deployment는 Production 레벨까지 자동으로 deploy 하는 것을 의미한다.
정리하자면,
CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미한다면, CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것을 의미한다.
CI에서 예로 든 MSA와 같은 환경에서 Agile 방법론이 적용될 경우,
서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공받을 필요가 있다.
이 때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support 하는 것이 CD라고 할 수 있다.