1.1 소프트웨어 개발에서의 지속적 통합 및 전달(CI/CD)
깃허브(GitHub)는 소프트웨어 개발자와 오픈 소스 커뮤니티를 위해 가장 널리 사용되는 리포지토리 플랫폼입니다. 대기업과 개인 개발자는 깃허브 플랫폼을 사용하여 버전이 지정된 소스 코드를 유지합니다. 깃허브는 애저 파이프라인 및 다른 지속적 통합 및 지속적 전달(CI/CD) 도구와 통합되어 소프트웨어 배포 자동화를 제공할 수 있습니다. 깃허브 리포지토리에 다른 통합을 사용하는 대신 이제 깃허브 액션스(Github Actions)을 워크플로로 사용하여 지속적 통합 및 전달 파이프라인을 구현할 수 있습니다.
최근에 소프트웨어 통합과 관리를 위해 애자일 방법론을 동원하여 여러가지 도구를 사용해 왔습니다만 사용 경험상 깃허브에서 소스를 관리하고 지속적인 통합과 배포하는 것이 다른 서비스들의 도움을 받지 않고 독립적으로 사용할 수 있어서 많이 애용합니다. 또한 이 깃허브의 방식으로 부터 다른 서비스들이 응용되어 만들어지기 때문에 소프트웨어 관리 방식으로 깃허브가 출발점인 셈입니다. 이 글에서는 소프트웨어 개발 팀이 성공하고 경쟁력을 갖추기 위해 소프트웨어 제공 자동화가 왜 중요한지 이해하는 데 도움이 되도록 지속적 통합 및 전달을 간략하게 살펴봅니다.
1.1 지속적 통합 및 전달
먼저 깃허브도 데브옵스(DevOps)의 하나의 구성 요소입니다. 먼저 지속적 통합과 전달에 대한 개념부터 알아보도록 하겠습니다. 소프트웨어 개발에서 여러 팀 구성원 코드를 개발하고 소프트웨어의 기능을 만들기에 기여합니다. 여러 사람이 코드 기반에 기여할 때 무결성을 유지하고 모든 팀 구성원이 최신 버전을 검색하고 로컬에서 빌드 및 실행할 수 있도록 하는 것 이 중요합니다.
코드 기반의 안정성을 보장하려면 두 가지 중요한 측면을 유지해야 합니다. 첫 번째 측면은 코드가 오류 없이 컴파일 되는지 확인하는 것입니다. 두 번째 측면은 최신 코드 변경 사항을 포함하여 코드 동작을 검증하는 모든 단위 테스트가 매우 높은 비율로 통과하도록 하는 것입니다.
빌드 파이프라인은 코드 기반에 대한 각 체크인/커밋을 컴파일한 다음 모든 단위 테스트를 실행하여 코드 기반의 안정성을 확인하도록 정의해야 합니다. 이것은 일반적으로 지속적 통합 빌드(CI Build) 로 알려져 있습니다. 빌드가 성공적으로 컴파일되고 모든 단위 테스트가 통과하면 대상 환경에 배포되는 출력을 생성하고 게시합니다(그림 1-1 참조).
[그림 1-1] 지속적 통합
코드 보안 취약점 검사는 빌드 파이프라인에 통합되어 프로젝트/제품의 보안을 향상시킬 수 있습니다. 코드 품질은 빌드 파이프라인에서 검증할 수 있습니다. 시프트 레프트 방식으로 보안 취약성과 코드 품질 문제를 조기에 감지하면 프로덕션 중에 감지된 취약성은 수정하는 데 비용이 많이 들기 때문에 장기적으로 비용을 절감할 수 있습니다.
따라서, 개발 팀은 현대적이고 민첩한 소프트웨어 개발 접근 방식으로 짧은 주기로 소프트웨어를 생산합니다. 가장 큰 과제 중 하나는 대상 환경에서 소프트웨어 릴리스의 안정성을 보장하는 것입니다. 간단하고 재사용 가능한 배포 프로세스는 프로덕션에서 애플리케이션에 대한 증분 업데이트(Increase Update)를 포함하여 소프트웨어 변경을 제공하는 비용, 시간 및 위험을 줄이는 데 필수적입니다. 간단히 말해서, 지속적인 전달은 소프트웨어 변경 사항이 더 자주 그리고 안정적으로 전달되도록 합니다. 데브옵스는 지속적인 배포의 산물로 발전했습니다.
지속적 전달(Continous Delivery)는 수동 승인이 제공될 때까지 배포를 보류하는 옵션과 함께 모든 변경 사항이 프로덕션에 배포되도록 합 니다. 지속적인 배포(Continous Deployment)를 통해 모든 변경 사항을 프로덕션에 자동으로 배포할 수 있습니다. 지속적 전달을 구현하려면 지속적 배포가 이미 마련되어 있어야 합니다. 지속적 배포는 지속적 전달의 승인 단계를 자동화하여 생성됩니다(그림 1-2 참조).
[그림 1-2] 지속적 전달과 배포
이 지속적 통합과 전달 개념은 머신러닝 모델을 배포 및 운영할 때 사용하는 ML옵스(MLOps) 에게 그대로 적용됩니다.