지속적 통합

menu icon

지속적 통합

이 안내서에서는 각 개발자가 하루에 한 번 이상 코드의 기본 분기에 새 코드를 통합하는 소프트웨어 개발 및 DevOps 사례인 지속적 통합에 대해 자세히 알아봅니다.

지속적 통합이란?

지속적 통합은 개발자가 개발 주기 전체에서 보다 빈번히 작성한 새 코드를 통합하여 이를 하루에 한 번 이상 코드 베이스에 추가하는 소프트웨어 개발 프로세스입니다. 자동 테스트는 보다 손쉬운 수정이 가능할 때 통합 발행을 보다 손쉽게 식별하기 위해 빌드의 각 반복에 대해 수행되며, 이는 릴리스의 최종 병합 시에 문제점을 제거하는 데도 도움이 됩니다. 전체적으로, 지속적 통합을 통해 빌드 프로세스가 효율화되며, 결과적으로 고품질의 소프트웨어 및 보다 예측 가능한 딜리버리 스케줄이 생성됩니다.

지속적 통합(CI) vs. 지속적 딜리버리(CD) vs. 지속적 배치

지속적 통합을 통해 각 개발자는 하루에 한 번 이상(또는 경우에 따라 하루에 여러 번) 자체 작업을 소스 코드의 기본 분기와 통합합니다. 또 다른 DevOps 사례인 지속적 딜리버리는 그 대신에 업데이트, 버그 수정, 심지어는 새로운 기능 등 코드 베이스에 대한 검증된 변경사항을 가능한 빠르고 안전하게 사용자에게 전달하는 데 집중합니다. 지속적 배치는 자동화된 테스트를 사용하여 코드 베이스 변경사항을 검증하여 보다 즉각적인 업데이트를 유도함으로써 프로세스를 더욱 효율화합니다.

지속적 딜리버리는 지속적 통합의 종료 지점을 선택하여 선택된 인프라 환경으로 애플리케이션의 딜리버리를 자동화합니다. 이는 개발, 테스트 및 프로덕션 등의 다른 환경으로 코드 변경사항을 푸시하는 자동화를 보장합니다.

이점

다음은 지속적 통합이 제공하는 몇 가지 주목할 만한 장점들 중 일부입니다.

  • 향상된 피드백을 위한 지속적이고 입증된 진행을 수행합니다.
  • 오류를 조기에 해결할 수 있도록 해주는 조기 및 개선된 오류 감지 및 메트릭(종종 체크인하는 즉시)을 제공합니다.
  • 개선된 팀 협업 - 팀의 모든 구성원이 코드를 변경하고 시스템을 통합하며 소프트웨어의 기타 부분과의 충돌을 빠르게 판별할 수 있습니다.
  • 시스템 통합을 개선하여, 소프트웨어 개발 라이프사이클 종료 시에 뜻밖의 상황을 줄입니다.
  • 병합 및 테스트에 대한 병행 변경사항을 줄입니다.
  • 시스템 테스트 중 오류를 줄입니다.
  • 반대 테스트를 위한 지속적으로 업데이트된 시스템을 제공합니다.

CI, 애자일 및 DevOps

기민성

애자일은 소프트웨어 개발 팀이 자체 구성하고 요구사항 변경에 대처하며 소프트웨어를 릴리스하는 방법을 개선하는 소프트웨어 개발 사례입니다. 지속적 통합(IBM 외부 링크)애자일 개발(PDF, 153KB)이 다수의 동일 기능(예: 테스트 자동화)을 공유하므로, 지속적 통합과 애자일을 동시에 논의하는 게 유용할 수 있습니다. 애자일은 개발을 보다 작은 그룹의 작업 또는 스프린트로 구성합니다. DevOps에서 적용 시에, 이러한 결합된 사례들은 소프트웨어 품질과 프로젝트 유연성을 보장하는 데 도움이 됩니다.

지속적 통합을 위해서는 자주(종종 하루에 여러 번) 작업을 통합해야 합니다. 사용자는 가능한 한 빨리 통합 오류를 감지하는 자동화된 빌드로 통합을 검증합니다. 빌드는 검증의 일부로서 실행 테스트를 포함해야 합니다. 자동화된 테스트 환경에서 신속한 테스트를 런타임 테스트로 확장하면 자연스럽게 지속적 딜리버리로 유도됩니다.

애자일(IBM 외부 링크) 역시 반복적이며, 시간이 지나면서 솔루션을 확장 및 발전시킬 수 있도록 변경사항에 적응합니다. 지속적 통합의 맥락에서 보면, 애자일 소프트웨어 개발은 사용자가 지속적으로 통합하면서 기능의 가치에 우선순위를 부여하는 방식에 기반하여 소프트웨어 반복을 제공하는 것을 말합니다.

DevOps

DevOps 프레임워크에서, 지속적 통합은 소프트웨어 개발 프로세스의 시작 부분에 위치합니다. 여기서 사용자는 로컬 사본이 코드 빌드의 기본 분기에서 너무 멀리 표류하지 않도록 유지하기 위해 하루에 한 번 이상 코드를 체크인합니다. 이렇게 하면 빌드를 "중단"시키고 팀이 이를 해결하는 데 수 시간이나 수 일이 걸릴 수 있는 심각한 병합 충돌을 피하는 데 도움이 됩니다.

지속적 통합은 지속적 딜리버리의 테스트, 배치 및 릴리스 단계에 대한 전제조건으로 제공됩니다. 지속적 통합 서비스가 오류에 대한 코드 변경사항을 자동으로 빌드 및 테스트하므로, 전체 개발 팀은 잘못된 코드를 작성했는지 여부를 체크인 이후 즉시 알 수 있습니다.

오픈 소스 지속적 통합 툴

다음은 가장 인기 있는 지속적 통합 툴 중 일부입니다.

  • Jenkins: 널리 사용되는 오픈 소스 지속적 통합 툴인 Jenkins를 사용하면 개발자가 코드를 소스 저장소에 커미트하는 즉시 자동으로 코드를 빌드, 통합 및 테스트할 수 있으므로, 개발자는 보다 손쉽게 버그를 조기에 포착하고 소프트웨어를 보다 빠르게 배치할 수 있습니다. docker 플러그인은 Jenkins에서 사용 가능합니다.
  • Buildbot: Buildbot은 소프트웨어 개발 주기의 모든 측면을 자동화할 수 있습니다. 작업 스케줄링 시스템인 이는 작업을 큐에 지정하고 실행하며, 결과를 보고합니다.
  • Go: Go가 유사한 툴들 중에서 뛰어난 이유는 복잡한 빌드 워크플로우를 손쉽게 모델링할 수 있도록 해주는 파이프라인이라는 개념 때문입니다.
  • IBM UrbanCode Build
  • Travis CI: 가장 오래되고 가장 신뢰할 수 있는 호스팅 솔루션 중 하나인 이는 엔터프라이즈의 온프레미스 버전에서도 사용이 가능합니다.
  • GitLab CI: 오픈 소스 Rails 프로젝트의 핵심 파트인 GitLab CI는 액세스 제어, 이슈 추적, 코드 검토 등과 같은 기능을 통해 세부적인 git 저장소 관리를 제공하는 무료 호스팅 서비스입니다.

개방형 소스 툴을 사용하여 지속적 통합을 수행하면 다음을 포함하여 많은 이점을 얻을 수 있습니다.

  • 프로젝트를 지원할 수 있는 수많은 플러그인
  • Python, Java 및 JavaScript 등의 오픈 소스 언어에 대한 광범위한 지원
  • 무료 - 각 분야에서 작업하는 학생, 스타트업 및 개발자들에게 예산에 구애받지 않는 강력한 툴을 제공함
  • 개발자가 요구사항에 맞게 CI 툴의 기반 위에서 구축할 수 있도록 해주는 맞춤형 기능
  • 툴을 수정하고 재분배하는 기능

소프트웨어 개발 워크플로우에 대해 고려해 볼 수 있는 오픈 소스 지속적 통합 툴에는 Jenkins, Go, Buildbot 및 Travis CI 등이 있으며, 관련 정보는 다음 섹션에서 읽을 수 있습니다.

유스케이스

다음 가상 유스케이스에서는 두 명의 소프트웨어 개발자가 자체 DevOps 프로세스를 개선하기 위해 지속적 통합을 사용하는 방법을 보여줍니다.

두 개발자는 어떤 기능이 어떻게 작동하는지에 관해 서로 간에 의견을 주고받아야 합니다. 이 소규모 팀은 정기적인 업데이트를 필요로 하며, 전체적으로 해당 코드를 통합하고 테스트할 수 있어야 합니다. 코드 체크인의 스케줄링과 테스트는 많은 개발 시간을 차지합니다. 지속적 통합을 위한 자동 시스템이 필요합니다.

이러한 조합과 테스트가 발생하는 시기를 협상하는 것은 많은 개발자 시간을 차지할 수 있습니다.

이를 수행하려면 다음 사항에 동의해야 합니다.

  1. 코드 통합의 테스트를 시작하는 시점
  2. 통합의 성공적인 완료를 테스트하는 방법
  3. 결과를 팀에 전달하는 방법

지속적 통합 플랫폼에는 이러한 질문에 대한 기본적인 답변이 있으며, 대부분은 구성 및 설정을 허용합니다.

일반적으로, Jenkins 등의 CI 플랫폼은 체크인 시 통합 테스트를 시작합니다. 새 코드가 체크인된 경우, CI 시스템은 유닛 테스트와 회귀 테스트가 포함될 수 있는 테스트 세트를 실행한 후 코드가 성공적으로 통합되었는지를 판별합니다.

또는 컴파일된 언어를 사용 중이면 기본 테스트는 코드가 성공적으로 컴파일되었는지 여부입니다. 그렇지 않은 경우, 새 코드가 빌드를 중단했습니다. Python 또는 JavaScript 등의 언어의 경우에는 자체 통합 테스트를 작성해야 합니다.

어떤 방식이든, 대부분의 CI 시스템은 통합 시도, 성공률 및 기타 메트릭을 로깅합니다.

서버

지속적 통합 서버는 모든 지속적 통합 작업을 중앙집중화하고 프로젝트를 빌드할 수 있도록 신뢰할 수 있는 안정적인 플랫폼을 제공하는 소프트웨어 툴입니다. 서로 다른 플랫폼을 위한 다양한 프로젝트를 빌드할 수 있도록 CI 서버를 구성 및 조정할 수 있습니다. 지속적 통합 서버는 복잡한 워크플로우를 손쉽게 모델링 및 시각화하고(지속적 딜리버리 사용), 지속적 딜리버리 파이프라인을 빌드하기 위한 직관적 인터페이스를 제공합니다. 지속적 통합 서버는 다음을 수행할 수 있는 기능을 제공합니다.

  • 단일 위치에서 자동 빌드, 테스트 및 릴리스 실행
  • 언제든지 임의의 버전 배치
  • 순서대로 구성 유지
  • 기능 향상을 위한 플러그인 지원
  • 프로젝트의 저장소 모니터
  • 변경사항을 받고 성공적인 커미트를 위해 정의한 태스크 수행
  • 빌드의 세부사항으로 관련 프로젝트 구성원에게 피드백 전송

테스트의 중요성

지속적 테스트는 지속적 통합 빌드 및 패키지(설치 가능한 엔티티 또는 패키징된 엔티티라고도 함)를 생성할 때 시작됩니다. 이는 패키징된 해당 엔티티가 프로덕션으로 이동할 때 중지됩니다. 엔드-투-엔드의 모든 단계에는 테스트 스위트가 포함됩니다.

최소한, 하나의 테스트 단계만 보유한 경우 지속적 통합의 30%에는 테스트가 포함됩니다. 실제로 지속적 통합 활동은 50~70% 테스트로 구성됩니다. 예전에는 수동으로 테스트를 완료해야 했습니다. 이제는 성공적인 지속적 통합의 핵심인 자동 테스트를 사용할 수 있습니다.

지속적 통합을 위한 자동 테스트의 일부인 테스트 기반 개발은 반복적으로 코드를 빌드하고 한 번에 하나의 유스케이스를 테스트함으로써 테스트 커버리지를 보장하고 코드 품질을 향상시키며 지속적 딜리버리의 기반을 마련합니다. 자동화된 테스트는 새 코드가 애플리케이션의 모든 기능 영역에서 개발된 하나 이상의 테스트에서 실패했는지 여부를 알려줍니다. 우수 사례에서는 개발자가 로컬 환경에서 테스트의 전부 또는 일부를 실행하도록 요구하며, 이는 개발자가 새 코드 변경사항이 테스트를 통과한 후에만 버전 제어에 대해 소스 코드를 커미트할 수 있도록 보장합니다. 경험적으로, 효과적인 회귀 테스트는 나중에 반갑지 않은 뜻밖의 상황을 피할 수 있도록 도와줍니다.

지속적 통합 파이프라인

지속적 통합 파이프라인은 최소한의 인간 개입으로 반복적으로 프로젝트의 파이프라인(예: 빌드, 테스트 및 배치)의 단계를 자동화합니다. 자동화된 지속적 통합 파이프라인은 제어, 체크포인트 및 속도를 사용함으로써 애플리케이션 개발, 테스트 및 배치를 간소화하는 데 필수적입니다.

우수 사례

지속적 통합 프로세스는 DevOps의 핵심 컴포넌트이며, 이는 소프트웨어의 코딩, 테스트, 배치 및 지원을 위해 공유 저장소로 개발 및 운영 팀을 통합하는 데 도움이 됩니다. 다음은 성공에 도움이 되는 일부 CI 우수 사례입니다.

  • 단일 소스 코드 저장소 유지보수: 소스 제어 관리를 사용하여 제품 빌드를 위한 모든 파일을 추적 및 제어합니다. 이 통합 코드 베이스는 배포 및 가시성을 보다 간편하게 만듭니다.
  • 빌드 자동화: 이에는 빌드 아티팩트를 생성하는 컴파일, 링크 및 기타 프로세스가 포함됩니다. 자체 테스트도 역시 자동화되어야 합니다.
  • 일별 메인라인 커미트 사용: 개발자가 매일 한 번 이상 기본 개발 스트림에 대해 변경사항을 커미트하도록 강제합니다. 각각의 개발자는 작업 사본이 기본 개발 스트림과 일치하는지 확인해야 합니다.
  • 프로덕션 환경의 클론에서 테스트: 테스트 환경을 최종 프로덕션 환경과 가급적 유사하게 만듭니다.
  • 배치 자동화: 빌드 및 테스트를 실행하기 위한 다수의 환경(개발, 통합, 프로덕션)을 구현합니다.

지속적 통합 및 IBM Cloud®

IBM 접근 방법은 프로젝트를 정의 및 자동화하고 템플릿을 사용하여 보안을 구성하는 것입니다. 라이브러리가 변경되는 경우, 종속 애플리케이션이 다시 빌드되고 연결, 링크되거나 고정됩니다. 애플리케이션 종속성의 이해는 애플리케이션의 현대화에 도움이 됩니다.

기업들이 이러한 디지털 전환을 가속화함에 따라, 비즈니스 및 IT 운영 전체에서 자동화의 필요성이 점차 커지고 있습니다. 자동화 확대를 추구하는 움직임은 소규모의 측정 가능한 성공적인 프로젝트로 시작해야 하며, 이후에 이를 기업의 다른 파트에서 및 다른 프로세스에 대해 스케일링 및 최적화할 수 있습니다.

IBM과의 공동 작업을 통해, 모든 프로세스를 보다 지능화하여 혁신의 가속화에 도움이 되도록 사전 빌드된 워크플로우를 포함하여 AI 기반 자동화 기능에 액세스할 수 있습니다.

다음 단계로 진행:

IBM® UrbanCode® Build의 도움을 받아서 스케일링 및 구성을 포함하여 소프트웨어 빌드의 관리를 시작합니다.

— 이 HFS 연구 보고서에서 자동화 성공을 위한 5개의 "필수 요소"(IBM 외부 링크)에 대해 읽어봅니다.

지금 바로 IBM Cloud 계정을 시작합니다.