[Dev] CI/CD 파이프라인에 대한 포괄적인 소개

개발 프로세스의 혁신을 만들수 있는 CI/CD 파이프라인에 대한 포괄적인 소개입니다. 내용이 다소 기니 인내심을 갖고 일독하시길 추천합니다. :-)


🔥 CI/CD 정의

  • CI/CD는 소프트웨어 개발 프로세스를 최적화하는 데 도움이 되는 최신 개발 기술인 Continuous Integration(지속적인 통합), Continuous Delivery(지속적인 전달), Continuous Deployment(지속적인 배포)의 약자

  • CI/CD 프로세스는 여러 개발자의 코드 업데이트를 단일 코드베이스로 자동으로 통합하는 것 포함

  • CI/CD를 사용하면 팀은 코드에 대한 업데이트를 더 자주 일관되게 제공할 수 있으며 오류를 더 일찍 찾을 수 있으며, CI/CD 덕분에 코딩, 테스트 및 개발 절차가 간소화됨


🔥 CI/CD 개념

🍊 지속적 통합(Continuous Integration)

  • 개념

    • 개발자는 CI 개발 방법론의 일부로 코드 변경 사항을 공통/공유 저장소에 정기적으로 커밋. 커밋할 때마다 자동 빌드 절차가 트리거되고, 그런 다음 코드가 컴파일되어 일련의 자동화된 테스트에서 실행되어 오류를 조기 발견. 각 커밋은 CI 서버에서 자동화된 워크플로를 생성하고 CI 서버는 개발자에게 코드의 모든 문제를 통보

    • 지속적인 통합 파이프라인은 코드 검토를 수행하고, 단위 테스트를 실행하고, 자동으로 빌드를 실행하고, 코드베이스에 커밋/병합이 있을 때마다 CI 파이프라인이 활성화되도록 구성

    • Jenkins 및 GitlabCI와 같은 인기 있는 CI 도구를 Git과 같은 버전 제어 시스템과 통합하여 CI 프로세스 자동화 가능

  • 장점

    • 개발자가 바로 입력을 받기 때문에 발생하는 문제를 즉시 수정할 수 있어 코드 충돌 가능성을 줄이는 데 도움

    • CI 프로세스에서 코드 품질을 검증할 때 정적 코드 분석은 코드의 품질을 확인하는 데 도움이 되고 정적 테스트가 통과되면 자동화된 CI 절차가 추가 테스트를 위해 코드를 컴파일하는 데 도움

🍊 지속적 전달(Continuous Delivery)

  • 개념

    • 지속적인 배포 프로세스에서 코드 릴리스는 사전 프로덕션 환경으로 자동화되어 공식적으로 배포되기 전에 개인적으로 코드를 테스트하고 검증.

    • 이 프로세스 동안 리포지토리의 코드가 컴파일되고 빌드가 생성되어 테스트 진행 > 그런 다음 소프트웨어는 준비가 되면 자동으로 릴리스할 준비함

  • 장점

    • 부하 테스트, UI 테스트 등과 같은 일련의 테스트를 실행하여 사후 프로덕션의 놀라움을 방지하는 데 도움이 되며, 이는 사전에 결함을 해결하는 데 유용

    • 지속적인 배포는 지속적인 통합과 함께 작동하여 애플리케이션의 릴리스 프로세스 자동화

🍊 지속적 배포(Continuous Delivery)

  • 개념

    • 자동화된 테스트를 통과한 코드 변경 사항이 사람의 개입 없이 자동으로 프로덕션 환경에 배포

    • 이 단계에서 DevOps 팀이 코드 릴리스에 필요한 요구사항을 설정한 후, 해당 요구사항이 충족되면 코드가 프로덕션 환경에 배포

    • 완전 자동화된 지속적 배포 프로세스

  • 장점

    • 지속적 통합, 전달, 배포의 전체 과정은 기업이 새로운 서비스를 신속하게 제공

    • 예) 아마존은 하루에 125,000회 이상 지속적인 배포 진행하고 있음


🔥 CI/CD 파이프라인

  • 개념

    • 소프트웨어를 코드 커밋에서 최종 프로덕션 배포까지 자동으로 이동시키는 과정

    • 앞서 설명한 지속적 통합, 지속적 전달, 지속적 배포의 자동화된 DevOps 워크플로우

  • 장점

    • 이러한 파이프라인은 CI/CD 프로세스의 기반이 되어 소프트웨어 개발, 테스트 및 배포 과정을 자동으로 조율하는 데 도움


🔥 CI/CD 워크플로

CI/CD 파이프라인에는 CI/CD 워크플로를 구성하는 일련의 단계/스테이지(소스-빌드-테스트-배포)가 포함됨.

🍊 소스

  • CI/CD 파이프라인 프로세스의 첫 번째 단계로, 소스 코드를 작성하는 단계

  • Git, Bitbucket 등의 버전 관리 시스템을 사용해 소스 코드 변경 사항 관리

  • 코드에 변경이 이루어지고 저장소에 푸시되면 CI/CD 파이프라인이 ‘빌드’ 단계로 진행되도록 트리거 됨.

🍊 빌드

  • 이 단계에서는 저장소에서 소스 코드를 가져와 컴파일하고, 실행 가능한 아티팩트(EXE 파일 등)를 생성

  • 프로젝트 단계에 따라 빌드 빈도는 하루 한 번일 수도 있고 하루에 여러 번일 수도 있음

  • 코드에 의존성 및 라이브러리가 결합되어 배포 가능한 빌드가 생성

🍊 테스트

  • 통합 테스트, 기능 테스트, 회귀 테스트, 단위 테스트 등 일련의 자동화된 테스트를 실행하여 코드가 유효한지 확인하고, 문제를 해결하며 애플리케이션이 기대한 대로 작동하는지 확인

  • 테스트 단계는 여러 테스트를 실행해야 하므로 파이프라인에서 가장 긴 단계 중 하나로 테스트 형식은 프로젝트의 특정 요구사항에 따라 달라짐. 테스트 중에 오류가 발견되면 개발자에게 통보되어 결과를 확인하고 이후 릴리스에서 수정 가능

🍊 배포

  • 코드가 모든 필수 테스트를 통과한 후 배포 가능

  • 테스트를 통과한 코드는 스테이징 또는 프로덕션 환경/서버에 배포 가능

  • 지속적 전달에서는 코드가 저장소에 업로드되고, 인간의 승인을 거쳐 배포되거나 프로덕션으로 전환.

  • 지속적 배포에서는 이 단계가 자동화됨


🔥 CI/CD 구현의 이점

  • CI/CD는 개발자가 수동으로 처리해야 할 작업을 자동화하는 데 도움

  • CI/CD는 모든 환경에서 동일한 구성을 사용하도록 하여 테스트 환경과 프로덕션 환경 간의 차이 가능성을 줄이고 일관성 보장

  • 이 시스템은 개발 팀이 새로운 기능을 지속적으로 릴리스할 수 있게 하여 코드 커밋부터 프로덕션까지의 시간을 단축하고, 효율적인 소프트웨어 개발을 촉진. 또한 자동화된 프로세스이므로 개발자의 시간 절약

  • CI/CD는 반복적인 프로세스에서 사람의 개입을 줄여 인간 오류 가능성을 낮추며, 이로써 문제가 커지기 전에 작은 문제를 감지하여 코드 품질 높임.

  • CI/CD 파이프라인은 개발자가 창의적이거나 비전통적인 코딩 기법을 원래의 수동 소프트웨어 개발 프로세스보다 훨씬 낮은 위험으로 테스트 가능케 함

  • 이 시스템은 개발자가 수동으로 작업할 때보다 더 효과적으로 협업 지원. 또한 빠른 배포 속도로 인해 회사의 경쟁력을 높이는 데 기여


🔥 CI/CD 및 DevOps

  • DevOps는 ‘개발(Development)’과 ‘운영(Operations)’의 결합으로, 코드 작성, 테스트, 릴리스를 작은 반복 단계로 수행하는 일련의 실천 방식 의미

  • DevOps 파이프라인의 기반은 CI/CD로, 이는 애플리케이션의 지속적인 개발, 통합, 테스트, 전달을 위한 자동화 및 신뢰성 제공

  • DevOps의 핵심 실천 중 하나가 바로 CI/CD

    • 일반적인 DevOps 파이프라인 단계는 애플리케이션의 기능과 내용을 정의하여 계획하는 것에서 시작하여 > 애플리케이션의 코드 작성 > CI/CD를 통해 지속적 통합, 전달, 배포 단계 거침 > 애플리케이션을 모니터링하고 사용자 피드백을 받아 향후 릴리스 반영

  • CI/CD는 DevOps 프레임워크의 기본적인 실천사항 중 하나

    • CI/CD는 신뢰할 수 있는 소프트웨어 릴리스를 자동화하여 개발(Dev)과 운영(Ops) 간의 격차를 줄임으로써 팀워크, 생산성, 품질 향상이라는 DevOps의 목표 부합


  • source: https://dev.to/debtech/a-comprehensive-introduction-to-cicd-pipelines-4ijc?context=digest

A Comprehensive Introduction to CI/CD Pipelines

DEV Community

A Comprehensive Introduction to CI/CD Pipelines

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 11월 4일 오후 1:52

댓글 2