CI/CD(Continuous Integration/Continuous Deployment)란?
CI/CD는 애플리케이션 개발 단계를 자동화하여
애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법이다.
CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포이다. 즉 CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 인테그레이션 헬(intergration hell))을 해결하기 위한 솔루션이다.
특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 라이프사이클 전체에 걸쳐 지속적인 자동화와 모니터링을 제공한다. 이러한 구축 사례를 일반적으로 "CI/CD" 파이프라인이라고 부르며, 개발 및 운영팀의 애자일 방식 협을 통해 지원된다.
CI (Continuous Integration)이란?
CI는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다. 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 충돌 문제를 해결할 수 있다.
간단히 말하자면 빌드/테스트 과정을 자동화하는 것이 CI라고 볼 수 있다.
CD (Continuous Deployment)란?
CD는 지속적인 서비스 제공(Continuous Delivery) 혹은 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다. 두 가지 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지 설명하기 위해 별도로 사용되기도 한다.
지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예를 들어 GitHub)에 자동으로 업로드되는 것을 뜻하며, 운영팀은 이 리포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있다. 이는 개발팀과 비즈니스 팀 간의 가시성과 소통 부족 문제를 해결해 준다. 이러한 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.
지속적인 배포란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미한다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 과부하 문제를 해결할 수 있다. 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공이 가진 장점을 활용한다.
CI/CD의 장점과 도구
이러한 CI/CD를 사용하면 개발자는 직접 코드를 병합하고 빌드, 테스트를 검증할 필요 없이 자동화할 수 있다. 개발자는 수정한 코드를 브랜치에 병합하기만 하면 자동으로 빌드 및 테스트를 진행할 수 있다. 또한 버그를 신속하게 찾아 해결할 수 있으며 소프트웨어 품질을 개선하고 새로운 업데이트를 검증하고 릴리즈하는 시간을 단축할 수 있다.
특히 다수의 개발자가 형상관리 툴(Git)등을 공유하여 사용하는 환경에서 의미 있게 사용할 수 있다. 자동화된 빌드 및 테스트는 코드의 충돌 문제를 방어할 수 있기 때문이다.
MSA(Micro Service Architecture) 환경에서도 CI/CD를 유용하게 활용할 수 있다. 주로 애자일 방법론을 적용하는 MSA에서는 기능 추가가 매우 빈번하게 발생한다. 이러한 상황에서 CI/CD의 자동화 기능은 큰 효과를 발휘한다.
이러한 CI/CD 기능을 제공하는 툴로는 Jenkins, Travis CI, Bamboo 등이 존재한다.
참고