CI/CD

1. CI/CD란?

(1) CI (Continuous Integration)

- 지속적인 통합 ; 한마디로 "빌드와 테스트 자동화"
- 모든 개발이 끝난 후 코드 품질을 관리하는 고전적 방식의 단점을 해소하기 위해 나타난 개념
-
"지속적인 통합"이라는 말 그대로 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 (가능하면 매시간 또는 매일) 공유 레파지토리에 통합되는과정을 통해 품질을 계속 유지하면서 개발을 진행하는 방법

지속적인 통합 (Continuous Integration)

(2) CD (Continuous Delivery / Continuous Deployment)

- 지속적인 전달(Continuous Delivery)  또는 지속적인 배포(Continuous Deployment) ; 한마디로 "배포 자동화"
- CI의 연장선으로, CI 프로세스를 통과한 코드 버전을 마지막에 "배포"하는 과정
- 코드 변경사항이 파이프라인의 이전 단계(CI)를 모두 성공적으로 통과하면 어떠한 개입없이 프로덕트에 자동으로 배포
- 신속하고 능률적으로 사용자에게 새로운 기능을 제공할 수 있는 것이 장점

지속적인 배포 (Continuous Delivery / Continuous Deployment)

2. CI/CD 파이프라인이 중요한 이유

(1) 명확한 프로세스

체계적인 CI/CD 접근 방식은 파이프라인의 각 단계를 명확하게 배치하여 정확히 어떤 작업이 이루어져야 하는지에 대한 상세한 개요를 제공함으로써 구상부터 완료까지 프로젝트의 길잡이가 된다.

(2) 높은 품질의 코드

작고 점진적인 변화는 품질의 효과를 보다 쉽게 검토할 수 있으며, 코드 내에 문제가 발생하면 훨씬 더 명확하게 드러나므로 프로세스 초기에 해결이 가능한다. 따라서 프로젝트 전체에 걸쳐 코드의 품질이 높아진다.

(3) 쉬운 엑세스

변화가 중앙 레파지토리에 자동으로 저장되므로, 이해관계자, QA, 기타 권한을 가진팀과 개인이 최신 버전을 포함한 모든 버전의 제품에 직접 엑세스가 가능하다.

(4) 신뢰할 수 있는 버전관리

코드에 관련한 문제를 쉽게 해결할 수 없는 경우에는 이전 버전으로 롤백해야 하는데, 효과적인 버전 관리를 통해 번거로움을 최소화하여 롤백이 가능하다.

(5) 빠른 프드백

체계적인 CI/CD 접근 방식은 파이프라인의 각 단계를 명확하게 배치하여 정확히 어떤 작업이 이루어져야 하는지에 대한 상세한 개요를 제공함으로써 구상부터 완료까지 프로젝트의 길잡이가 된다.

(6) 짧은 테스트 주기

기존의 개발에서는 제품 전체에 해당하는 코드를 반복해서 테스트해야 하므로 테스트 사이클이 길고 복잡했지만, CI/CD 파이프라인에서는 코드의양이 계속해서 감소하고 있어이런 문제가 더 이상 발생하지 않는다.

(7) 개발 민첩성 향상

개발팀은 CI/CD 파이프라인을 통해 조직의 요구 사항에 즉각적으로 대응하고 필요한 경우 진행중인 프로젝트에 대한 조치를 취할 수 있다. 개발 응답성이 향상됨에 따라 기업은 필요한 시점에 정확하고 강력한 전문적인 소프트웨어 솔루션의 이점을 얻을수 있다.

3. CI/CD 파이프라인을 향한 단계

(1) 계획

CI/CD 파이프라인의 첫 단계는 새로운 어플리케이션을 구상하는데 필요한 모든 번거로운 백그라운드 작업을 포함한다. 프로젝트/제품 관리자는 고객과 이해관계자의 요구사항을 수집하여 프로젝트 로드맵을 구축하고, 필요한 작업의 백로그를 생성한다.
이 단계에는 Agile 관리도구(예: 스크럼, 칸반)를 진행중인 프로세스에 적용하는 일도 포함된다.

(2) 개발

개발 단계에서는 간소화된 코딩(Agile의 중요한 원칙 중 하나)과 빠른 피드백을 사용한다. 지속적 개발 원칙을 사용하고 프로세스 초기에 보안을 적용하여 코드를 지속적으로 확인하며 정확성을 유지할 수 있다.

(3) 빌드

개발 단계에서 이어지는 빌드 단계에서는 팀이 짧은 반복 작업을 통해 제품의 실행 가능한 인스턴스를 만들며, 제품이 빌드 단계를 통과할 수 없도는 하는 문제를 즉시 해결해야 한다.

(4) 테스트

이 단계에서는 자동화된 테스트를 통해 코드가 의도된 대로 작동하는지 확인한다. 테스트 단계에서는 버그가 고객에게 도달하지 못하도록 걸러내고 개발자 피드백을 빠르게 제공하여 무제가 심각한 상태로 벌전하기 전에 분리하여 해결할 수 있다. 성숙한 CI/CD 파이프라인 테스트는 보안 취약성을 스캔하는 작업, 즉 DevSecOps로 확장될 수 있다.

(5) 배포

코드가 테스트를 통해 확인되면, 프로젝트를 배포 환경으로 전달할 수 있다. 이는 보통 코드에 추가적인 수작업 테스트와 검토를 거치는 스테이징 환경으로, 승인된 변화는 자동으로 프로덕션으로 전달된다.

(6) 운영

어플리케이션이 배포되고, 프로덕션으로 전달되면 면밀한 모니터링을 통해 트렌드와 잠재적인 문제를 파악한다. 이는 종종 어플리케이션의 운영 기능에 통합되어 향후 업데이트 정보를 제공한다.

개발에 대한 지속적 접근 방식을유지하기 위해 이러한 단계 중 많은 단계가 동시에 일어나고 어플리케이션이 조정과 개선을 거치면서 여러 단계에 걸쳐 코드가 반복적으로 순환될 수 있다.

4. 효율적인 파이프라인의 지표

(1) 속도

파이프라인의 속도는 새 파이프라인을 구축하는데 얼마나 걸리는지, 어플리케이션을 빌드, 테스트, 배포하는데 얼마나 걸리는지, 피드백이 얼마나 빨리 오는지, 필요에 따라 파이프라인을 효과적으로 확장할 수 있는지와 같은 여러가지 요인에 따라 달라진다. 속도는 프로세스 간소화, 효과적인 자동화 구현, 병목현상 방지에 따라 크게 달리진다.

(2) 신뢰성

자동화의 큰 장점 중 하나는 예측 가능하다는 점이다. 입력이 동일하기 때문에 언제나 동일한 출력이 생성되고, 신뢰할 수 없는 파이프라인에서는 런타임이 일정하지 않고 기술 스택 변경 시 장애가 발생하거나 팀 토는 프로젝트가 추가된다.

(3) 정확성

CI/CD 파이프라인의 최종 목표는 소프트웨어 제공 프로세스를 처음부터 끝까지 완전히 자동화하고 시각화하고, 이를 정확히 수행하는 것이다. 이것이 불가능한 경우, 파이프라인이 수작업에 크게 의존하는 경우가 발생되고, 당연히 제공 시간과 비용이 증가한다.

'D.E.V > etc..' 카테고리의 다른 글

AWS - CI/CD  (0) 2024.01.17
윈도우10 정품인증  (1) 2023.11.28
PHP 개발환경 구축  (2) 2023.11.28