Backend 개발자/Devops

Gitlab ci(지속적 통합) cd(지속적 배포) 정리

by 앵과장 2024. 3. 6. 15:21
반응형

프로젝트를 진행하기 위해서 필요한 항목은 언제든지 서비스중인 Application을 업데이트, 버그픽스, 트래픽 대응을 위한 리펙토링등 애자일 스프린트로 1일 1 build deploy를 진행하기 위해서 필요 한건 바로 cicd 구성


CI 지속적 통합
Continuous integration

신뢰성 있는 코드레벨을 서비스중인 어플리케이션에 오류없이 안정적으로 배포 즉 코드변경사항(update)을 지속적 병합(merge) 하며 개발자가 쉽게 접근 가능해야 하고 이 과정은 자동화된 빌드와 테스트를 포함하여, 변경사항이 문제를 일으키지 않는지 확인 이를 통해 소프트웨어의 품질을 개선하고, 개발 단계에서 발견하지 못한 버그 위험요소를 제거하기 위한 수단이며 지속적 통합을 하기위한 행위

- 코드레벨 작업 이후 여러사람의 코드 충돌을 최소화하고 각 프로젝트에 맞는 Git 전략을 어떻게 할것인지에 대한 고민
- 코드 관리에 필요한 소스 코드 저장소 (github, girlab, bitbucket)
- 개발문화를 통한 코드리뷰 활성화
- SonarQube와 같은 코드검증 플러그인을 통한 버그, 코드스멜, 코드커버리지 변경 사항이 기존기능을 손상시키지 않는지 검증 가능한 자동화 테스트
- 빌드 또는 테스트 실패에 대한 오류 알림 기능
- 최종 서비스 런칭 필수 기능 동작에 대한 QA검증


CD 지속적 배포

지속적 배포는 소프트웨어 개발 프로세스에서 개발된 코드가 자동화된 테스트를 통과한 후, 자동으로 운영 환경에 배포되는 과정을 말합니다. 이 접근 방식은 개발부터 운영까지의 소프트웨어 배포 과정을 자동화하고 최적화하여, 코드 변경사항을 신속하게 고객에게 제공할 수 있도록 합니다. 지속적 배포의 목표는 배포 과정의 복잡성과 시간을 줄이고, 높은 품질의 제품을 지속적으로 고객에게 제공하는 데 있습니다.

- 자동화된 배포 파이프라인 구축: 코드가 주요 저장소에 통합된 후, 테스트를 성공적으로 통과하면 자동으로 스테이징 또는 프로덕션 환경에 배포됩니다. 이 과정은 수동 개입 없이 실행되어야 합니다.
- 배포 환경의 일관성 유지: 개발, 스테이징, 프로덕션 환경 사이의 설정과 환경을 일치시켜 배포 과정에서의 예기치 않은 오류를 최소화합니다.
- 피드백 루프와 모니터링: 실시간 모니터링과 로깅 도구를 사용하여 배포된 어플리케이션의 성능을 지속적으로 모니터링하고, 문제가 발생할 경우 즉시 알림을 받아 빠른 대응이 가능하도록 합니다. 이는 지속적인 개선을 위한 피드백 루프를 제공합니다.
- 안전하고 점진적인 배포 전략 수립: 블루/그린 배포, 카나리 배포와 같은 전략을 활용하여 변경 사항을 점진적으로 배포함으로써 리스크를 관리하고, 문제가 발생했을 때 빠르게 롤백할 수 있습니다.
- 자동화 테스트와 품질 보증: 코드 통합 시 수행되는 자동화된 테스트에 더해, 배포 전 환경에서의 추가적인 테스트를 통해 최종 사용자에게 영향을 미칠 수 있는 버그나 문제점을 사전에 식별하고 수정합니다.

CD에는 두가지 용어가 상호 교환적으로 사용됩니다
지속적인 서비스 제공(Continuous Delivery)
지속적인 배포 (Continuous Deployment)

지속적인 서비스 제공
Continuous Delivery


지속적 서비스 제공은 소프트웨어 개발 과정에서 코드 변경사항이 자동으로 빌드, 테스트를 거쳐 준비된 상태에서 수동으로 운영 환경에 배포될 준비가 되는 과정을 의미합니다. 이 접근법은 배포 준비 과정을 최대한 자동화하여, 언제든지 안정적인 소프트웨어 버전을 신속하게 운영 환경에 배포할 수 있도록 합니다.

- 자동화된 배포 프로세스: Continuous Integration에서 한 단계 더 나아가, 코드 변경 사항을 자동으로 빌드, 테스트하고 스테이징 환경에 배포하는 과정을 자동화합니다.
- 배포 준비성의 유지: 개발된 소프트웨어는 항상 실제 운영 환경에 배포될 준비가 되어 있어야 하며, 이는 배포 결정이 비즈니스 요구에 의해서만 결정되도록 합니다.
품질과 보안의 강화: 자동화된 테스트와 보안 점검을 통해 개발 초기 단계에서 품질과 보안 문제를 식별하고 해결합니다.
- 피드백과 반복의 빠른 사이클: 더 빈번하고 작은 단위의 배포를 통해 고객 피드백을 신속하게 수집하고, 이를 바탕으로 제품을 지속적으로 개선합니다.


지속적인 배포
Continuous Deployment

지속적인 배포는 지속적인 서비스 제공의 자연스러운 연장선으로, 모든 코드 변경 사항이 테스트를 통과하면 자동으로 운영 환경에 배포되는 과정입니다. 이는 개발부터 운영까지의 소프트웨어 배포 과정을 완전히 자동화함으로써, 최소한의 인간 개입으로 신속한 제품 반복을 가능하게 합니다.

- 완전 자동화된 배포 파이프라인: 코드 변경이 주요 저장소에 병합될 때 자동으로 빌드, 테스트, 배포까지 이어지는 완전 자동화된 파이프라인을 구축합니다.
- 즉각적인 운영 환경 반영: 테스트를 성공적으로 통과한 코드는 즉시 운영 환경에 배포되어 사용자에게 제공됩니다. 이는 개발 사이클을 대폭 단축시킵니다.
- 지속적인 모니터링과 품질 관리: 배포된 어플리케이션의 성능을 지속적으로 모니터링하고, 품질 관리를 통해 사용자 경험을 극대화합니다.
- 리스크 관리와 빠른 대응: 작은 단위로 자주 배포함으로써 변경 사항에 의한 리스크를 최소합니다