개발은 변경사항을 통합하고, 테스트, 릴리스하는 단계를 거칩니다.
그 과정에서, 코드를 자주 커밋하여 통합하면
피드백을 자주할 수 있으며 높은 성과로 이어질 수 있습니다.
성과가 높은 팀은 성과가 낮은 팀보다 417배 더 많이 배포합니다.
- DevOps 현황 보고서 (2022)
그러나 "커밋 - 배포 - 테스트"과정을 수작업으로 처리한다면
보다 많은 시간과 자원이 소모될 수 있습니다.
이를 자동화하여
짧은 주기로 배포할 수 있는 방법이 있습니다.
CI/CD 입니다.
CI
1. CI(Continuous Integration, 지속적인 통합)이란?
(CI/CD 파이프라인을 구현하기 위한 첫 번째 단계입니다)
동일한 프로젝트에서 작업하는 모든 사람이 정기적으로 코드 베이스의 변경 사항을 중앙 저장소에 병합하도록 하는 방식입니다.
프로젝트에는 일반적으로 한 명 이상의 개발자가 참여하므로 각 branch를 main에 통합(Integration)하는 것이 중요합니다.
(이 프로세스를 자동화하여 하루에 여러 번 수행하는 것을 권장합니다)
이를 통해 공동 작업, 자동화 및 짧은 피드백 주기를 촉진하여 개발을 안정적으로 할 수 있습니다.
CI(지속적인 통합)은 변경사항을 형상관리 시스템(예시: GitHub)에 정기적으로 커밋하는 작업부터 시작합니다.
커밋할 때마다
빌드를 포함한 일련의 자동 테스트가 이루어져
동작을 확인하고, 변경으로 인한 문제가 없도록 보장합니다.
2. CI(Continuous Integration, 지속적인 통합)의 핵심 요소
- 소스 코드 파일, 라이브러리, 구성 파일 및 스크립트를 포함한 전체 코드 베이스 소스 또는 버전 관리 시스템
- 자동화된 빌드 스크립트
- 자동화된 테스트
- 빌드 및 테스트 실행 인프라
애플리케이션 개발에 관여하는 사람들이 최신화된 코드를 기반으로 작업을 하려면
동일한 저장소에서 작업하고, 변경 사항을 자주 공유해야 합니다.
변경 사항을 커밋한 후,
소스 코드를 실행 가능하거나 배포 가능한 형태로 컴파일 또는 어셈블하는 프로세스(솔루션)을 구축하고
일련의 자동화된 테스트를 통해 동작을 확인합니다.
매일 통합을 한다는 가정하에,
수동으로 솔루션을 구축하고 테스트하는 것은
(비현실적인 계획이며 통합 지옥에 빠지기 쉽습니다)
시간이 오래 걸리며 오류가 발생하기 쉬울 수 있습니다.
스크립트와 테스트를 준비하고 프로세스를 유지합니다.
자동화된 테스트를 추가한 후,
문제가 있으면 처리하고 프로세스의 성과를 모니터링합니다.
(저장소 모니터링, 빌드 트리거, 자동화된 테스트 실행 및 결과 대조 등의 작업을 처리하기 위해 CI 서버를 추가할 수 있습니다)
3. CI(Continuos Integration, 지속적 통합) 주의사항
지속적 통합을 적용하기 앞서,
조직이 이미 애자일 방법론을 따르고 있다면 전환 과정이 용이할 수 있습니다.
단, 대규모 모놀리식 애플리케이션에서 작업하는 경우, 빌드 시간이 느려질 수 있으며
(높은 결합성과 낮은 독립성을 가진, 단일 단위로 배포되는 애플리케이션)
테스트 환경의 공급이 부족하면, 테스트를 동시에 실행하는 것이 어려울 수 있습니다.
(워크플로를 분석했을 때, 인프라를 추가하는 것이 이득일 수 있습니다)
4. CI(Continuos Integration, 지속적 통합) 이점
지속적인 통합을 통해
소프트웨어 릴리스 주기를 단축할 수 있으며,
배포 중에 발생할 수 있는 잠재적인 위험을 완화하고 피드백 루프를 단축할 수 있습니다.
- 배포 위험 감소: 코드를 작성하면서 지속적으로 통합하면, 초기에 발생할 수 있는 오류를 해결할 수 있습니다.
- 높은 품질: 수작업을 자동화하면, 다른 곳에 더 집중할 수 있습니다.
- 비용 절감: 배치를 세분화하여 많은 작업을 자동화하면, 소프트웨어 전달과 관련된 비용을 크게 줄일 수 있습니다.
(통합에 들어가는 시간과 비용을 절약하여 다른 곳에 집중할 수 있습니다)
CD
1. CD(Continuous Delivery, 지속적인 전달)이란?
(CI/CD 파이프라인 구축을 포함, 통합 - 빌드 제공 단계를 자동화)
소프트웨어를 빌드하고 릴리스하는 데 필요한 수작업을 자동화하는 방법입니다.
(수작업에 사용할 시간을 절약하여 다른 작업에 몰두할 수 있게 합니다)
프로젝트 코드가 항상 배포 가능한 상태에 있도록 하기 위해
일련의 자동화된 테스트를 구현합니다.
소프트웨어 릴리스 프로세스를 더 빠르고 안정적으로 만듭니다.
(피드백을 받기까지의 시간을 단축합니다)
릴리스 빈도를 높이기 쉽습니다.
(더 많은 배포를 할 수 있습니다)
지속적인 전달은
전달 프로세스를 지연하는 문제점을 파악하고,
자동화된 파이프라인을 구축하여
더욱 빠르고 안정적인 릴리스 과정을 만들어
언제나 릴리스에 대비하는 것을 의미합니다.
(파이프라인이 준비되면 명령어 하나만으로 적합한 빌드를 라이브 배포할 수 있어야 합니다)
프로덕션으로의 최종 Push는 수동으로 트리거 되지만,
스크립팅된 프로세스를 따르므로 쉽게, 반복하여, 필요한 만큼 여러 번 릴리스할 수 있습니다.
2. 파이프라인 구축
파이프라인을 구축하는 것은,
지속적 전달을 하기 위해 중요한 단계입니다.
파이프라인을 구축할 때, 여려 요구 사항을 고려합니다.
보안 요구 사항을 고려하면 보안 검증에 소요되는 시간을 단축할 수 있습니다.
소프트웨어 아키텍처와 조직의 우선순위에 따라 빌드, 환경, 테스트과정이 달라질 수 있음을 고려합니다.
각 단계에서 실행할 파이프라인 프로세스를 결정하면
스크립팅하여 안정성과 반복 가능성을 점검합니다.
또한, CI 단계의 동일한 아티팩트를 사전 프로덕션 환경과 프로덕션 자체에 배포하여 일관성을 유지합니다.
(배포를 스크립팅하여 프로세스를 빠르고 일관성 있게 유지할 수 있습니다)
4. CD(Continuous Delivery, 지속적인 전달) 이점
지속적인 전달을 구현하기 위해선 조직의 여러 부분이 협력해야 합니다.
(협력을 통한) 구현 과정에 긴 시간이 소요될 수 있으며 어려울 수 있습니다.
(클라우드 인프라를 사용하여 비용을 지불하고 시간을 단축할 수 있습니다)
지속적인 전달이 구현되면
수동 절차와 비교했을 때, 개발이 더 수월해지고 빠르게 진행할 수 있습니다.
(소프트웨어 제공 프로세스를 1/10의 시간만에 완료할 수 있습니다)
CD
1. CD(Continuous Deployment, 지속적인 배포)란?
코드 변경이 파이프라인의 이전 단계를 통과하면 프로덕션에 자동으로 배포하는 것입니다.
(수동 개입이 없어서 새로운 기능을 사용자에게 빠르게 제공할 수 있으며, 하루에도 여러 번 릴리스할 수 있습니다)
2. CD(Continuous Deployment, 지속적인 배포) 고려사항
코드를 변경하고 릴리스되는 방식을 고려해야 합니다.
배포에는 다양한 전략이 존재합니다.
(카나리, 블루/그린, 롤링 업데이트 등)
이해 관계자가 다양하다는 것도 고려해야 합니다.
릴리스 과정에서 수동적인 검수를 하지 않는 것이 통제 불가능한 것으로 여겨질 수 있으며,
대시보드 및 알림을 통해 지속적인 정보를 제공하는 것이 필요할 수 있습니다.
(규모가 큰 기능을 테스트한 직후 각 커밋을 라이브로 배포하는 것은 위험할 수 있습니다)
CI/CD
CI vs CD vs CD
지속적인 통합 vs 지속적인 전달 vs 지속적인 배포
CI/CD는 피드백 루프 단축 및 반복 작업의 자동화를 통해 소프트웨어 릴리스 프로세스의 속도를 개선하며,
애자일 원칙을 실현하는 데 핵심적인 역할을 합니다.
지속적인 통합은 새로운 코드 변경을 기본 브랜치에 병합하는 과정입니다.
지속적인 전달은 소프트웨어 빌드 및 테스트에 필요한 수작업을 자동화합니다(예: 테스트).
지속적인 배포는 빌드 및 테스트 단계를 자동화하는, 지속적인 전달에서 이어지는 단계로, 필요한 모든 체크포인트를 통과하면 자동으로 배포되는 것입니다.
CI/CD 파이프라인을 완벽히 나누어 단계별로 구축할 수 있습니다.
CI/CD는 소프트웨어 전달 프로세스의 순차적 단계입니다.
CI/CD를 구축할 때 중요한 것은
모든 구성 요소가 어떤 방식으로 함께 작동하게 할 것인지를 고려하는 것입니다.
CI/CD를 통해
피드백 주기를 단축하고
클라이언트의 요구사항을 빠르게 적용할 수 있습니다.
참고
https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/
https://www.redhat.com/ko/topics/devops/what-is-ci-cd#%EC%A7%80%EC%86%8D%EC%A0%81-%EB%B0%B0%ED%8F%AC
'Dictionary' 카테고리의 다른 글
JSON Web Tokens, JWT란? (3) | 2023.10.14 |
---|---|
클라우드의 서비스 제공 형태 XaaS, SaaS, PaaS, IaaS (0) | 2023.09.26 |
프록시(Proxy)란? (0) | 2023.09.20 |
구성 관리 (0) | 2023.09.20 |
스왑 공간, 스와핑, 스왑 파일, 스왑 파티션(Swap Space, Swapping, SwapFile, SwapPartition) (0) | 2023.09.08 |