지속적인 통합이란?

지속적 통합(CI)은 개발자가 단일 코드 리포지토리로 코드 통합을 자동화하는 개발 프랙티스입니다.

CI가 없으면 개발자가 최종 제품에 대한 개별 코드 기여를 수동으로 조율하고 전달해야 합니다. 비CI 환경은 불필요한 관료주의와 복잡한 동기화를 필요로 하므로 필요 이상으로 복잡한 상황이 발생합니다.

엔지니어링 팀과 나머지 조직, 특히 제품 팀과 엔지니어링 팀 사이에 의사 소통이 단절될 가능성이 있습니다. 단일 리포지토리나 위치에 저장되지 않는 새로운 변경 사항을 통합하려면 시간과 복잡성이 발생하므로 개발부터 제품 출시까지 소요 기간은 거의 알려지지 않았습니다.

지속적 통합의 다양한 요소를 보여주는 그래픽.

CI, CD, 지속적 배포는 각각 DevOps 프로세스를 포함한 소프트웨어 릴리스 수명주기의 중요한 부분입니다.

지속적 통합(CI)

일반적으로, CI는 조직이 여러 작업을 한 목록과 제품 로드맵으로 컴파일하는 데 도움이 되는 애자일 소프트웨어 개발과 함께 사용됩니다. 작업이 정리되면 이행해야 할 여러 팀 구성원에게 전달됩니다. 그런 다음 여러 코드가 마스터 코드 리포지토리에 병합됩니다.

지속적 제공(CD)

CD는 프로세스의 두 번째 부분으로, 여기에는 모든 코드의 패키징이 포함됩니다. 그러면 최종 사용자에게 전달할 준비가 완료됩니다. 이 프로세스 단계에 일반적으로 아티팩트를 생성하는 자동 도구를 실행하여 언제든 최종 사용자에게 배포할 수 있습니다.

지속적 배포

프로세스의 마지막 단계인 지속적 배포는 최종 사용자에게 소프트웨어 제품을 자동으로 출시하며, 이 경우 통합과 제공을 성공적으로 통과했음을 뜻합니다. 자동화는 소프트웨어 제품을 공개 서버 또는 기타 공개 배포 수단으로 전송하는 스크립트 또는 도구를 활용합니다. 고도로 자동화되고 잘 관리된 환경에서, 제품이 제공되는 즉시 자동으로(따라서 연속적으로) 이러한 배포가 이루어집니다. 일부 팀 또는 일부 제품은 특정 시간에 또는 다른 프로세스와 확인이 완료된 후에 배포될 수 있습니다.

확장

코드 관료주의를 최소화하면 새 코드 개발부터 주기 종료까지 DevOps와 애자일 워크플로우가 효과적으로 순조롭게 작동할 수 있습니다. CI는 개별 기능의 개발을 방해하는 종속성을 없애 확장하는 회사에 도움이 될 수 있습니다. 개발자가 격리되어 작업하더라도 본인의 코드가 나머지 코드 리포지토리와 통합될 것임을 알고 있기에 안심할 수 있습니다.

피드백 루프 개선

비즈니스 의사결정에 대한 피드백을 빠르게 받으면 제품 팀이 아이디어를 시험해보고 반복적인 제품 디자인의 성과를 높이는 데 도움이 될 수 있습니다. 변경이 신속하고 측정 가능하며 성공적일 수 있으며, 버그를 신속하게 해결하고 수정할 수 있습니다.

의사 소통 개선

엔지니어링 팀이 더 효과적으로 소통하고 책임감을 가질 수 있으므로 DevOps 팀 내에서 의사 소통이 개선됩니다. 다른 팀 구성원이 작성한 코드를 보고 의견을 제시할 수 있으며, 따라서 이후에 다른 개발자들과 코드를 공동으로 작업할 기회도 있습니다.

버전 관리

코드는 Apache subversion이나 Git 같은 버전 관리 소프트웨어를 통해 실행되며, 소프트웨어 코드의 커밋 기록은 필요에 따라 변경할 수 있도록 커밋됩니다.

빌드

개발자들이 코드를 빌드하면 버전 기록 시스템을 통해 코드가 전달됩니다. 그런 다음 코드 컴파일을 위해 빌드 단계로 반환됩니다.

테스트 및 스테이징

소프트웨어는 소프트웨어 단위를 테스트하는 단위 테스트를 비롯한 여러 테스트를 받습니다. 스테이징 단계는 테스트에 성공한 후에 시작되므로, 이제 스테이징 프로세스에 배포할 준비가 된 것입니다. 이때 최종 테스트 단계 전에 코드에 대한 확인 및 최종화가 이루어집니다.

자동 테스트

소프트웨어가 스테이징 환경에 진입하면 소프트웨어에 대해 준비된 자동 테스트를 받게 됩니다. 소프트웨어가 자동 테스트를 통과하면 배포 단계로 전송됩니다.

배포

자동 테스트가 수행된 후 소프트웨어가 프로덕션에 배포됩니다. 테스트 단계 또는 후속 배포 중에 오류가 있는 경우 소프트웨어는 버전 관리 절차로 반환되어 오류 검사를 받습니다. 발견된 오류는 수정됩니다.

리포지토리 유지

프로젝트를 빌드하는 데 필요한 각 아티팩트는 중앙 코드 리포지토리에 배치해야 합니다. 그래야 각각의 버전을 동시에 유지할 필요 없이, 통합된 변경 사항을 유지할 수 있습니다.

빌드 자동화

제품과 같은 환경에 배포되는 통합 자동화를 포함하여 시스템을 빌드하는 단일 명령이 있는 경우가 가장 이상적입니다. 웹 페이지, 배포 매체, 통계, 웹 사이트 페이지를 생성하는 동안 스크립트가 바이너리를 컴파일하는 경우가 많습니다.

빌드 자체 테스트 허용

예상대로 작동하는지 확인하기 위해 테스트를 실행해야 합니다.

모두가 기준선에 따라 커밋

모두가 정기적으로 커밋하면 변경 사항이 충돌할 가능성이 획기적으로 줄어들 수 있습니다. 매일 합의가 이루어지면 개발자가 코드의 문제 또는 필요한 변경 사항을 파악할 수 있으며, 이 경우 변경 사항을 전달합니다. 일주일 분량의 작업이 쌓이면 문제가 포착되지 않거나 악화될 수 있기 때문에 매일 커밋해야 합니다.

모든 커밋을 빌드

제대로 작동하는지 확인하려면 현재 작업 버전으로 커밋을 빌드해야 합니다. 자동화된 지속적 통합(ACI)이 일반적으로 사용되지만 수동으로 수행할 수도 있습니다. ACI가 데몬을 사용하여 수정 제어 시스템에 변경 사항이 있는지 확인하면, 빌드 프로세스가 자동으로 실행됩니다.

빠른 빌드 속도 유지

통합 문제를 방지하거나 문제를 신속하게 식별하기 위해 각 빌드는 최대한 신속하게 완료되어야 합니다.

테스트할 프로덕션 환경 복제

테스트 환경은 테스트하는 시스템이 프로덕션 환경에 배포될 경우의 장애를 생성할 수 있습니다. 프로덕션 환경은 테스트 환경과 다를 수 있으므로 프로덕션 환경의 복제본을 설정하면 장애를 방지할 수 있습니다. 별도의 스테이징 환경은 비용을 절감하면서 기술 스택 구성을 유지하는 확장 가능한 버전이어야 합니다.

쉽게 얻을 수 있는 최신 결과물

이해 관계자와 테스트 담당자가 작업을 봐야 할 수 있으므로, 기능을 다시 빌드해야 하는 경우 필요한 재작업 양을 줄이기 위해 빌드를 바로 사용할 수 있도록 하는 것이 좋습니다. 조기 테스트를 하면 프로세스 후반에 오류가 발생할 가능성도 차단할 수 있습니다.

모든 팀원이 결과 확인 가능

빌드에 장애가 발생하면 쉽게 찾을 수 있습니다. CI는 팀이 변경된 사항과 그와 같이 변경한 팀원을 파악하는 데 도움이 되므로 투명성과 생산성을 높일 수 있습니다.

빌드 배포 자동화

빌드가 완료된 후에도 대부분의 CI 시스템은 스크립트를 실행합니다. 모두가 볼 수 있는 실시간 테스트 서버에 애플리케이션을 배포하기 위해 스크립트를 작성할 수 있습니다. CI에서는 회귀 또는 결함을 방지하기 위해 추가 자동화로 프로덕션에 소프트웨어를 배포해야 합니다.

테스트 주도 개발

CI 파이프라인에 프로젝트가 수립되면 테스트 범위를 지속적으로 개발하고 개선하는 것이 좋습니다. CI 파이프라인을 따라 진행되는 각각의 새로운 기능을 테스트하여 새로운 코드가 예상대로 작동하는지 확인해야 합니다.

풀 리퀘스트 및 코드

풀(pull) 리퀘스트는 CI의 중요한 부분입니다. 대부분의 소프트웨어 개발자는 풀 리퀘스트 및 코드 검토 프로세스를 실행합니다. 자동화된 승인 단계를 실행하기 위해서는 풀 리퀘스트가 CI 파이프라인을 시작하기에 좋은 기회입니다. 풀 리퀘스트 시 수동 승인도 추가되어 이해 관계자가 아니어도 코드 검토를 수행할 수 있습니다. 이렇게 이해 관계자가 아닌 사람이 편집을 구별하거나 풀 리퀘스트를 승인 또는 거부할 수 있는 기회를 제공합니다.

파이프라인 속도 최적화

CI 파이프라인은 일반적으로 사용되는 프로세스이므로 실행 속도를 최적화하는 것이 중요합니다. 워크플로우가 지연되면 기능 릴리스, 코드베이스 크기, 팀 크기가 커지는 동안 문제가 복잡해질 수 있습니다. CI 파이프라인을 지속적으로 측정하여 최적화를 보장합니다.

CI 파이프라인이 빠르면 CI 피드백 루프도 빠릅니다. 개발자는 변경 사항을 적용하고 사용자 경험을 실험하고, 버그를 신속하게 수정하고, 실행 속도를 높여 경쟁 우위를 차지하고 전반적으로 품질을 높일 수 있는 기회가 있습니다.

ServiceNow 플랫폼에서 앱을 구축할 때 CI/CD를 활용할 수 있습니다. CI/CD 도구를 ServiceNow의 DevOps 제품에 연결하여 CI/CD 파이프라인을 통해 진행되는 작업을 ServiceNow에서 관리하는 작업에 연계시킬 수도 있습니다. ServiceNow 플랫폼에서 빌드하든 ServiceNow 외부의 Azure DevOps, GitLab 또는 Jenkins 등의 도구에서 빌드하든 상관없이 ServiceNow DevOps 제품은 CI/CD 프로세스에 많은 이점을 제공할 수 있습니다.

협업 향상

Git repo 통합을 사용하는 경우 여러 개발자의 코드 변경을 효과적으로 관리하고 사용자 스토리 같은 작업 항목과 repo의 커밋을 연결합니다. ServiceNow에서 테스트 결과와 변경 사항에 커밋을 추가로 연결하면 파이프라인 전체에 대한 엔드 투 엔드 가시성을 보장할 수 있습니다.

DevOps 간소화

변경 생성, 승인, 배포를 자동화하고 개발에서 테스트를 거쳐 프로덕션으로 더 빠르고 효율적으로 이행합니다.

개발 가속화

팀이 처음부터 자주 피드백을 바탕으로 빠르게 반복할 수 있도록 애플리케이션을 신속하게 제공합니다.

가치 흐름 관리

아이디어 구상에서 프로덕션에 이르는 전체 파이프라인 또는 가치 흐름에 대해 보고합니다. 여러 팀 사이에서 소통하고, 여러 도구의 성능을 비교하고, 병목 현상을 발견하고 해결합니다.

비즈니스에 따라 확장되는 역량

DevOps의 성공을 전사적으로 확장합니다. 앞서 가는 것에 따른 위험 요소를 없애고 IT 운영과 개발 사이의 마찰을 최소화합니다.