CI/CD

6/13/2024


CI/CD

CI/CD는 지속적 통합(Continuous Integration)과 지속적 제공/배포(Continuous Delivery/Deployment)의 합성어다.
따라서 우선 CI와 CD가 무엇인지 알 필요가 있다.

CI (Continuous Integration)

CI는 코드의 변경 사항을 공유 리포지토리에 통합하는 것을 말한다. 다만, 가능한 자주, 정기적으로.

다수의 개발자가 함께 작업하는 경우 대체로 기능별로 브랜치가 나뉘어지고, 개발자들은 각자의 브랜치에서 변경 사항들을 commit 한다. 문제는 서로 다른 기능을 개발했더라도 간혹 소스 충돌이 발생하게 되는데, 많은 브랜치들을 병합하는 과정에서 충돌된 코드를 발견하고 수정하는 일은 반복적이고 번거로운 작업이 될 것이다.

CI는 변경 사항들의 병합이 어플리케이션을 손상시키지 않도록 자동으로 빌드하고 다양한 수준의 자동화된 테스트(단위 테스트와 통합 테스트)를 수행하여 충돌을 검증하는 것이다. 이를 통해서 개발자는 소스를 더욱 빠르게, 자주 수정할 수 있고 결국 소프트웨어의 품질도 개선되는 효과를 얻을 수 있다.

CI는 Agile, MSA의 흐름과 함께 더욱 중요성이 부각되고 있다. MSA(Micro Service Architecture)와 Agile 방법론은 기능을 작게 쪼개 빠르게 적용하고 개선하는 빈번한 작업이 이루어진다. 이러한 환경에서 CI는 개발 주기와 효율성을 높이는데 강점이 있기 때문이다.

CD(Continuous Delivery/Deployment)

CD는 지속적 제공(Continuous Delivery)과 지속적 배포(Continuous Deployment) 두가지 의미를 가지고 있다.

지속적 제공

지속적 제공은 CI에서 테스트된 검증된 코드를 공유 리포지토리까지 릴리즈 하는 것을 자동화한다. 즉, 효과적인 지속적 제공을 마련하기 위해서는 CI가 이미 구축되어 있어야 한다.

일반적으로 지속적 제공은 어플리케이션 변경 사항이 자동으로 버그 테스트를 거친 후 리포지토리로 업로드 되는 것을 의미한다. 이후 해당 리포지토리에서 라이브 프로덕션 환경으로 배포하게 된다. 결국 지속적 제공의 목적은 변경된 코드가 언제나 프로덕션 환경으로 배포할 준비를 마치는데 필요한 노력을 최소화 하는 것이다.

지속적 배포

CI/CD 파이프라인의 최종 단계를 지속적 배포이다. 지속적 배포는 지속적 제공의 연장선으로, 릴리즈된 리포지토리에서 프로덕션 환경으로 배포하는 것을 자동화 하여 고객이 사용할 수 있도록 하는 것을 말한다.

결국 지속적 배포는 개발자가 변경한 코드를 빠르고 안정적으로 프로덕션 컨테이너(서버)에서 실행시키는 것을 목표로 한다. 이를 통해 고객은 최대한 빠른 시간 내에 최신 버전의 어플리케이션을 제공받을 수 있고, 개발자 입장에서도 빈번하고 작은 단위의 변경사항을 손쉽게 릴리즈할 수 있다는 장점을 가지고 있다.

다만, 지속적 배포 과정 단계에서는 어플리케이션에 대한 검증 과정이 없으므로 잘 설계된 테스트 자동화에 크게 의존하게 된다. 따라서 CI/CD 파이프라인에서 다양한 테스트 및 릴리즈 단계를 수용하기 위해서 자동화된 테스트를 작성과 같은 많은 선행 투자가 필요하다.

CI/CD를 위해

Jenkins, Travis CI, Bamboo 등의 CI/CD를 위한 툴은 개발, 배포, 테스트를 자동화 하도록 지원한다. 또한 이러한 툴과 CI/CD 프로세스는 버전관리(Git, Github), 컨테이너 런타임(Docker), 컨테이너 오케스트레이션(쿠버네티스)와 관련이 깊다.

앞으로는 DevOps와 CI/CD 이해 및 실습을 위해 Jenkins와 Git(Github), Docker, 쿠버네티스를 학습하고 실습해보는 시간을 가져보기로 하자.

References

DevOps

Inhyeok Kim

Email : inhyeok.kim@icloud.com

GithubPortfolio