지속적 통합(CI)이란?

"CI"라는 용어에 대한 추가적인 컨텍스트를 제공하자면 "CI"는 "continuous integration(지속적인 통합)"의 약어이며, CI로 자주 불려집니다. CI는 '동일한 프로젝트에서 작업하는 모든 사람이 정기적으로 코드 베이스의 변경 사항을 중앙 저장소에 병합하도록 하는 방식'으로 정의됩니다. 프로젝트에는 일반적으로 한 명 이상의 개발자가 참여하므로 각 작업 부분을 하나의 중앙 위치에 결합하는 것이 중요합니다. 이상적으로는 이 프로세스를 자동화하고 하루에 여러 번 수행해야 합니다. 지속적 통합의 목표는 공동 작업, 자동화 및 짧은 피드백 주기를 촉진하여 소프트웨어 빌드와 릴리스에 대한 안정적인 접근 방식을 유지관리하는 것입니다.

지속적 통합은 변경 사항을 소스/버전 관리 시스템에 정기적으로 커밋하는 작업부터 시작하므로 모두가 같은 기반에서 빌드하게 됩니다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장합니다. 지속적 통합은 그 자체로 유익하지만 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계이기도 합니다.

명확한 CI 정의를 채택하고 개발 프로세스에 이 방식을 구현함으로써 팀은 워크플로를 간소화하고 소프트웨어 품질을 개선할 수 있습니다.

지속적 통합

CI의 실행

지속적 통합의 핵심 요소는 다음과 같습니다.

  • 소스 코드 파일, 라이브러리, 구성 파일 및 스크립트를 포함하여 전체 코드 베이스를 포함하는 소스 또는 버전 관리 시스템
  • 자동화된 빌드 스크립트
  • 자동화된 테스트
  • 빌드 및 테스트를 실행할 인프라

모든 사람이 동일한 기반 위에 있으려면 동일한 저장소에서 작업하고 변경 사항을 서로 자주 공유해야 합니다. 경험상 모든 사람이 적어도 하루에 한 번 마스터/트렁크에 변경 사항을 커밋하도록 하는 것이 좋습니다.

변경 사항을 커밋한 후 다음 단계는 솔루션을 구축하고 일련의 자동화된 테스트를 통해 동작을 확인하는 것입니다. 이 프로세스를 자동화하는 것은 지속적 통합의 필수적 부분입니다. 수동으로 구축 및/또는 테스트하는 것은 시간이 많이 걸리고 오류가 발생하기 쉬우며 매일 변경 사항을 통합하려는 목표에 비추어볼 때 비현실적입니다. 사용하는 정확한 빌드 도구와 테스트 프레임워크는 작업 중인 언어에 따라 다릅니다.

스크립트와 테스트가 준비되면 프로세스를 유지해야 합니다. 즉, 새로운 기능의 일부로 자동화된 테스트를 추가한 후, 문제가 있으면 처리하고 프로세스의 성과를 모니터링해야 합니다.

저장소 모니터링, 빌드 트리거, 자동화된 테스트 실행 및 결과 대조 등의 작업을 처리하기 위해 CI 서버를 추가하면 이러한 모든 요소를 한데 모을 수 있어 맞춤화된 자동화 로직을 작성하는 데 드는 시간을 절약하고 코드 커버리지 지표 및 빌드 기록과 같은 추가적인 인사이트를 얻을 수 있습니다.

이러한 도구와 프로세스가 지속적 통합을 구현하는 데 중요하지만 지속적 통합의 이점을 최대한 활용하려면 이 방식을 수용할 사람들이 필요합니다. 개발 팀이 정기적으로 마스터에 커밋하기, 새로운 기능에 자동화된 테스트 추가하기, 문제가 발생했을 때 우선적으로 빌드 수정하기 등을 포함하여 프로세스를 조정해야 합니다. QA 팀과 협력하여 자동화된 테스트의 우선순위를 정하고 설계 및 유지 관리하며 인프라 직원과 협력하여 빌드 및 테스트를 실행할 시스템을 제공하면 조직 내의 사일로를 해소하는 데 도움이 됩니다.

지속적 통합의 해결 과제

지속적 통합은 개발자뿐만 아니라 조직 전체에 이점을 제공하지만 항상 열렬한 환대를 받는 것은 아닙니다.

많은 개발 현장에서 DevOps는 작업 방식의 큰 변화를 의미하며 기존 프로세스에 도전을 가합니다. 팀 간의 업무를 조정하고 협력의 문화를 조성하려면 훌륭한 의사 소통이 필요합니다.

이미 애자일 방법론을 따르고 있다면 올바른 구축을 위해 피드백을 수렴하는 것의 중요성과 자체 편성형 팀의 개념이 이미 어느 정도 자리를 잡았을 것이므로 전환 과정이 일반적으로 더 용이합니다.

그렇지 않은 경우라면 이것이 중요한 변화임을 인식하고 참여도를 높이며 작게 시작하고 단계를 밟아가면서 이점을 입증하는 등의 방법을 따르는 것이 직원들의 결속력을 높이는 데 효과적일 수 있습니다.

지속적 통합은 또한 보다 실용적인 문제에 직면합니다. 대규모 모놀리식 애플리케이션에서 작업하는 경우, 빌드 시간이 느려질 수 있으며 테스트 환경의 공급이 부족하면 테스트를 동시에 실행하는 것이 어려울 수 있습니다.

지속적 통합 워크플로에 대한 가시성을 확보하고 메트릭을 사용하여 병목 현상을 식별하면 아키텍처 변경, 추가 인프라 및 자동화된 테스트 커버리지에 대한 투자의 비용과 이득을 수량화하는 데 도움이 될 수 있습니다.

CI의 이점

지속적 통합을 통해 팀은 품질 저하 없이 소프트웨어 릴리스 주기를 단축할 수 있습니다. 지속적 통합의 주요 목표는 배포 중에 발생할 수 있는 잠재적인 위험을 완화하고 피드백 루프를 단축하는 것입니다.

지속적 통합의 주요 이점은 다음과 같습니다.

  • 배포 위험 감소. 코드를 작성하면서 지속적으로 병합하면 초기에 발생하는 모든 오류를 해결할 수 있습니다.
  • 높은 품질. 수작업의 상당 부분을 자동화하면 개발자가 더 높은 수준의 테스트 활동에 집중할 수 있습니다.
  • 비용 절감. 지속적 통합을 구현하고 세분화된 배치로 나누어 많은 작업을 자동화하면 소프트웨어 전달과 관련된 비용을 크게 줄일 수 있습니다.

CI/CD 성공 사례

지속적 통합, 전달 및 배포는 소프트웨어 회사가 비용을 절감하고 소프트웨어 전달 주기를 크게 단축하는 데 도움을 줍니다. 올바르게 수행한다면 소프트웨어 구축, 테스트 및 릴리스 프로세스의 효율을 높이는 데 없어서는 안 될 요소입니다. 다음은 몇 가지 CI/CD 모범 사례입니다.

  • 조기에 커밋하고 자주 커밋. 소규모 업데이트를 더 자주 제공하면 변경 사항이 있을 때마다 피드백을 받고 추적할 수 있습니다. DevOps 현황 보고서에 따르면 성과가 높은 팀은 성과가 낮은 팀보다 417배 더 많은 배포를 수행하는 것으로 확인됩니다.
  • 빌드를 청신호로 유지. 새 코드가 커밋될 때마다 실행되는 자동 테스트를 구현함으로써 CI/CD 파이프라인은 모든 변경 사항에 대해 개발자에게 신속한 피드백을 제공할 수 있습니다.
  • 프로덕션에 배포하는 유일한 방법으로 만들기. 팀에서 소프트웨어를 신속하게 릴리스해야 하는 경우 확립된 CI/CD 프로세스 단계를 건너뛰려는 유혹이 생길 수 있습니다. 그러나 루틴을 지키면 모르는 사이 코드베이스에 오류가 생기는 일을 피할 수 있습니다.

CI/CD 도구

안정적이고 신뢰할 수 있는 CI/CD 파이프라인을 구축하려면 반드시 적절한 CI/CD 도구가 필요합니다. 이러한 도구는 통합을 시작하고 자동화된 테스트를 트리거하며 프로덕션에 코드를 배포하는 등 파이프라인의 여러 부분을 조정하는 데 도움을 줍니다. TeamCity와 같이 CI/CD 프로세스의 모든 단계를 지원하는 통합 CI/CD 도구를 사용하거나 다양한 목적에 맞는 다양한 도구를 사용하는 모든 경우, 선택한 도구는 팀이 다루는 전체 기술 스택을 지원해야 합니다. 또한 작업에 사용하는 나머지 소프트웨어와 통합할 수 있어야 하며 모든 수준의 워크플로 복잡성을 지원할 수 있을 만큼 유연하고 맞춤화가 가능해야 합니다.

CI 대 CD

CI와 CD의 이점을 비교하기보다는 최종 사용자에게 오류 없는 소프트웨어를 제공하는 데 도움이 되도록 개발 프로세스의 이러한 서로 다른 부분이 어떻게 어우러질 수 있을지 고려하는 편이 더 유용합니다.

지속적 통합은 코드 변경 사항을 하나의 주요 브랜치로 병합하는 프로세스입니다. 지속적 전달은 지속적 통합 단계에서 구축된 테스트 및 빌드 자동화를 기반으로 합니다. 지속적 배포는 CI/CD 프로세스의 마지막 단계로, 모든 요구 사항이 충족되면 새 버전의 소프트웨어가 최종 사용자에게 제공됩니다.

CI와 CD에 대해 자세히 알아보기

마무리

지속적 통합을 채택하면 개발 프로세스의 속도를 높이는 동시에 코드 품질을 개선하는 효과를 거둘 수 있습니다. 이러한 단계를 자동화하면 보다 효율적으로 작업하고 사용자에게 가치를 더하는 일에 집중할 수 있습니다. 그러나 지속적 통합은 CI/CD 파이프라인의 시작일뿐입니다. 다음 단계인 지속적 배포는 릴리스 프로세스의 다음 부분에 DevOps의 원칙을 적용합니다.