Jump to section

CI/CD란?

URL 복사

CI/CD는 지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)를 의미하며, 소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것을 목표로 합니다.

지속적 통합(CI)은 코드 변경 사항을 공유 소스 코드 리포지토리에 자동으로 자주 통합하는 사례를 나타냅니다. 지속적 제공 및/또는 배포(CD)는 코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스로, 두 가지 부분으로 구성됩니다. 지속적 제공에는 자동 프로덕션 배포 기능이 없는 반면, 지속적 배포는 업데이트를 프로덕션 환경에 자동으로 릴리스합니다.

 

CI/CD Flow

 

이렇게 연결된 두 사례를 일반적으로 "CI/CD 파이프라인"이라 부르며, 개발 팀과 운영 팀이 DevOps 또는 SRE(사이트 신뢰성 엔지니어링)를 통해 애자일 방식으로 협력하여 이를 지원합니다.

CI/CD는 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 됩니다. 

애플리케이션이 커짐에 따라 CI/CD의 기능을 활용하면 복잡성을 줄이고 효율성을 높이며 워크플로우를 간소화할 수 있습니다.

기존에 새 코드를 커밋에서 프로덕션으로 가져오는 데 필요했던 수동 개입을 CI/CD가 자동화하므로 다운타임이 최소화되고 코드 릴리스 주기가 단축됩니다. 또한 코드의 업데이트와 변경 사항을 더 빠르게 통합할 수 있으므로 사용자 피드백을 더 자주 효과적으로 통합할 수 있고, 그 결과 사용자에게 긍정적인 결과를 제공할 수 있으며 전체적인 고객 만족도가 향상됩니다. 

CI/CD에서 "CI"는 언제나 지속적 통합을 의미하며, 지속적 통합은 코드 변경 사항을 다시 공유 분기 또는 "트렁크"로 더 빈번하게 병합하는 것을 용이하게 하는 개발자용 자동화 프로세스입니다. 이러한 업데이트가 이루어지면 병합된 코드 변경 사항의 신뢰성을 보장하기 위해 자동화된 테스트 단계가 트리거됩니다. 

현대적인 애플리케이션 개발에서는 여러 개발자들이 동일한 애플리케이션의 각기 다른 기능을 동시에 작업할 수 있도록 하는 것을 목표로 합니다. 그러나 조직에서 특정한 날("병합의 날(merge day)")을 정해 모든 분기 소스 코드를 병합하는 경우, 결과적으로 반복적인 수작업에 많은 시간을 소모하게 됩니다. 

이는 고립된 상태에서 작업하는 개발자가 애플리케이션을 변경하는 경우 다른 개발자들이 동시에 적용하는 여러 변경 사항들과 충돌할 가능성이 있기 때문입니다. 팀이 하나의 클라우드 기반 통합 개발 환경(Integrated Development Environment, IDE)에 동의하지 않고 각 개발자가 각자의 로컬 IDE를 커스터마이징하는 경우 문제는 더 심화될 수 있습니다.

동시에 개발 중인 애플리케이션의 분기가 너무 많아 상호 충돌할 가능성이 있는 문제에 대한 해결책으로 CI를 고려할 수 있습니다.

성공적인 CI란 개발자가 애플리케이션에 적용한 변경 사항들이 병합된 후 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 빌드하고 다양한 수준의 자동화된 테스트(일반적으로 단위 테스트와 통합 테스트)를 실행하여 해당 변경 사을 검증하는 것입니다. 즉, 클래스와 기능에서부터 전체 애플리케이션을 구성하는 다양한 모듈에 이르기까지 모든 것을 테스트합니다. 자동화된 테스트를 통해 새 코드와 기존 코드 간 충돌이 발견되는 경우 CI를 적용하면 해당 버그를 빠르게, 자주 수정하기가 더 용이해집니다.

CI/CD의 "CD"는 지속적 제공(Continuous Delivery) 및/또는 지속적 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환하여 사용됩니다. 두 가지 모두 파이프라인의 추가 단계를 자동화하는 것이지만 자동화가 얼마나 많이 진행되고 있는지를 나타내기 위해 별도로 사용될 수도 있습니다. 지속적 제공과 지속적 배포 중 어느 것을 선택할지는 개발 팀과 운영 팀의 위험 허용 범위와 구체적인 요구 사항에 따라 달라집니다.

 지속적 제공은 CI에서 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 리포지토리로 릴리스하는 것을 자동화합니다. 따라서 효과적인 지속적 제공 프로세스를 마련하려면 CI가 개발 파이프라인에 이미 구축되어 있어야 합니다.

지속적 제공의 경우, 코드 변경 사항의 병합부터 프로덕션 레디 빌드의 제공에 이르기까지 모든 단계에 테스트 자동화와 코드 릴리스 자동화가 수반됩니다. 이 프로세스가 종료되면 운영 팀은 애플리케이션을 프로덕션으로 신속하게 배포할 수 있습니다.

일반적으로 지속적 제공이란 개발자의 애플리케이션 변경 사항이 자동으로 버그 테스트를 거치고 리포지토리(예: GitHub, 컨테이너 레지스트리)로 업로드된다는 것을 의미합니다. 이후 리포지토리에서 운영 팀이 변경 사항을 라이브 프로덕션 환경으로 배포할 수 있습니다. 그 결과 개발 팀과 비즈니스 팀 간 가시성 및 의사 소통 부족 문제가 해결될 수 있습니다. 이를 위한 지속적 제공의 목표는 언제나 프로덕션 환경으로 배포할 준비가 되어 있는 코드베이스를 갖추고 새로운 코드를 배포하는 데 필요한 노력을 최소화하는 것입니다.

성숙한 CI/CD 파이프라인의 최종 단계는 지속적 배포입니다. 지속적 배포는 지속적 제공의 확장으로, 개발자의 변경 사항을 리포지토리에서 프로덕션으로 릴리스하는 것을 자동화하여 고객이 사용할 수 있도록 하는 것을 말합니다.

CD는 애플리케이션 제공 속도를 저하시키는 수동 프로세스로 인한 운영 팀의 업무 과다 문제를 해결합니다. 지속적 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적 제공의 장점을 활용합니다.

실제 사례에서 지속적 배포란 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 클라우드 애플리케이션을 자동으로 실행할 수 있는 것을 의미합니다(자동화된 테스트를 통과한 것으로 간주). 이를 통해 사용자 피드백을 지속적으로 수신하고 통합하는 일이 훨씬 수월해집니다. 이러한 연결된 모든 CI/CD 사례는 애플리케이션 배포의 리스크를 줄여주므로 애플리케이션 변경 사항을 한꺼번에 릴리스하지 않고 작은 단위로 세분화하여 더욱 손쉽게 릴리스할 수 있습니다. 

그러나 프로덕션 이전의 파이프라인 단계에는 수동 게이트가 없으므로 지속적 배포는 잘 설계된 테스트 자동화에 크게 의존합니다. 따라서 CI/CD 파이프라인에서 다양한 테스트 및 릴리스 단계를 수용하기 위해 자동화된 테스트를 작성해야 하므로 지속적 배포에는 많은 선행 투자가 필요합니다.

CI/CD는 개발 팀과 운영 팀 간 협업 촉진을 목표로 하는 DevOps 방법론의 필수적인 부분입니다. CI/CD와 DevOps는 모두 코드 통합 프로세스를 자동화하는 데 중점을 두어 사용자에게 가치를 제공할 수 있는 프로덕션 환경에서 아이디어(예: 새 기능, 개선 사항 요청, 버그 수정)가 개발에서 배포 단계로 이동하는 프로세스를 가속화합니다.

협업을 중시하는 DevOps 프레임워크에서 보안은 초기 단계부터 통합되어 공동의 책임이 됩니다. 이러한 사고방식이 매우 중요해지면서, DevOps 이니셔티브에 보안 기반을 구축해야 할 필요성을 강조하기 위해 "DevSecOps"라는 용어가 등장하게 되었습니다. DevSecOps(개발, 보안, 운영)는 전체 IT 라이프사이클에 걸쳐 보안을 통합하는 방식으로 책임을 공유하는 문화, 자동화 및 플랫폼 설계에 대한 접근 방식입니다. DevSecOps의 핵심 구성 요소는 보안 CI/CD 파이프라인의 도입입니다.

CI/CD 보안은 자동화된 검사 및 테스트로 코드 파이프라인을 보호하여 소프트웨어 제공 시 취약점을 방지하는 데 사용됩니다. 보안을 파이프라인에 통합하면 코드를 공격으로부터 보호하고, 데이터 유출을 방지하며, 정책을 준수하고, 품질 보증을 보장하는 데 도움이 됩니다.

적절한 보안이 없으면 개발 및 배포의 빠른 특성으로 인해 파이프라인이 다음과 같은 위험에 노출될 수 있습니다.

  • 민감한 데이터가 외부 소스에 노출됨
  • 안전하지 않은 코드 또는 타사 구성 요소 사용
  • 소스 코드 리포지토리 또는 빌드 툴에 대한 무단 액세스

소프트웨어 개발 주기 전반에서 취약점을 식별하고 완화하면 코드 변경 사항이 프로덕션에 배포되기 전에 철저한 테스트를 거쳐 보안 표준을 준수하도록 보장할 수 있습니다.

CI/CD 툴은 팀이 개발, 배포, 테스트를 자동화하도록 지원합니다. 특히 통합(CI) 측면을 다루는 툴도 있고, 개발 및 배포(CD)를 관리하는 툴도 있으며, 지속적인 테스트 또는 관련 기능에 특화된 툴도 있습니다.

Tekton Pipelines는 표준 클라우드 네이티브 CI/CD 경험과 컨테이너를 제공하는 쿠버네티스 플랫폼을 위한 CI/CD 프레임워크입니다.

Tekton Pipelines 외에도 알아둘 만한 다른 오픈소스 CI/CD 툴은 다음과 같습니다.

  • Jenkins: 단순 CI 서버에서 완전한 CD 허브까지 모든 것을 처리하도록 설계된 툴
  • Spinnaker: 멀티클라우드 환경을 위해 구축된 CD 플랫폼
  • GoCD: 모델링 및 시각화에 중점을 둔 CI/CD 서버
  • Concourse: "지속적인 오픈소스 작업 툴"
  • Screwdriver: CD용으로 설계된 빌드 플랫폼

또한 다양한 벤더가 제공하는 관리형 CI/CD 툴도 있습니다. 주요 퍼블릭 클라우드 공급업체는 모두 GitLab, CircleCI, Travis CI, Atlassian Bamboo 등과 함께 CI/CD 솔루션을 제공합니다.

뿐만 아니라 DevOps의 기본 툴은 CI/CD 프로세스에 속해 있을 가능성이 높습니다. 구성 자동화(예: Ansible, Chef, Puppet), 컨테이너 런타임(예: Docker, rkt, cri-o), 컨테이너 오케스트레이션(쿠버네티스)을 위한 툴은 엄밀하게는 CI/CD 툴이 아니지만 많은 CI/CD 워크플로우에 표시됩니다.

선호하는 애플리케이션 개발 전략과 클라우드 제공업체에 따라 CI/CD를 구현하는 다양한 방법이 있습니다. Red Hat® OpenShift® Service on AWS에는 Tekton과 OpenShift Pipelines와 같은 여러 옵션이 제공되어 자체 CI/CD 워크플로우를 더 쉽게 만들 수 있습니다. Red Hat OpenShift를 사용하면 기업은 다수의 온프레미스 및 클라우드 플랫폼에서 애플리케이션을 자동으로 빌드, 테스트, 배포할 수 있습니다. 

Red Hat 전문가는 조직이 더 효율적으로 기존 애플리케이션을 현대화하고 클라우드 네이티브 애플리케이션 개발 여정을 가속화하는 데 필요한 사례와 툴을 개발하고 문화를 조성하도록 지원합니다.

Red Hat® OpenShift®는 조직이 개발자 생산성을 개선하고, CI/CD 파이프라인을 자동화하며, 개발 주기 초기와 전체에 걸쳐 보안 작업을 전환하는 데 도움이 됩니다.

Red Hat OpenShift Pipelines는 CI/CD 파이프라인의 각 단계를 자체 컨테이너에서 실행하도록 설계되어, 각 단계를 파이프라인의 요구에 맞게 독립적으로 확장할 수 있습니다. 따라서 관리자와 개발자는 조직의 고유한 비즈니스 및 보안 요구 사항에 따라 애플리케이션용 파이프라인 청사진을 만들 수 있습니다.

Red Hat OpenShift GitOps는 Git 리포지토리, 지속적 통합/지속적 제공(CI/CD) 툴, 쿠버네티스를 통합하여 품질 저하 없이 더 빠르고 안전한 확장 가능한 소프트웨어 개발을 실현하기 위한 워크플로우를 제공하는 오퍼레이터입니다. OpenShift GitOps는 고객이 선언적 Git 기반 CD 워크플로우를 구축하여 자체 애플리케이션 개발 플랫폼으로 직접 통합할 수 있도록 지원합니다.

Red Hat Ansible® Automation Platform에는 이벤트 기반 솔루션, 분석, 사전 구축된 콘텐츠 컬렉션 등 전사적으로 자동화를 구현하는 데 필요한 모든 툴이 포함되어 있습니다. 이 플랫폼의 공통된 YAML 기반 언어 및 원하는 상태 접근 방식을 활용하면 일상적인 운영은 물론 CI/CD 파이프라인에도 동일한 오토메이션 콘텐츠를 사용할 수 있습니다. 또한 Red Hat Ansible Automation Platform은 IT 인프라의 거의 모든 측면에서 작동하므로 더욱 간편하고 신속하게 일관된 개발, 테스트, 프로덕션 환경을 배포하여 애플리케이션의 신뢰성과 복구 능력을 높일 수 있습니다.

아울러 Ansible Automation Platform은 Red Hat Advanced Cluster Management for Kubernetes와 통합되어 CI/CD 파이프라인 내의 쿠버네티스 클러스터를 오케스트레이션할 수 있도록 지원합니다. 그리고 조직은 사람이 읽을 수 있는 자동화 언어를 사용하여 Red Hat OpenShift 오퍼레이터를 더욱 손쉽게 구축하고 유지 관리할 수 있습니다.

추가 자료

문서

DevOps 엔지니어는 어떤 사람일까요?

DevOps 엔지니어는 조직 내 협업, 혁신, 문화적인 변화를 지원하는 기술과 전문성을 두루 갖춘 사람입니다.  

문서

CI/CD란?

CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다.

문서

DevSecOps란?

DevOps의 민첩성과 대응 능력을 최대한 활용하려면 IT 보안 팀이 애플리케이션의 전체 라이프사이클에서 주요 역할을 해야 합니다.