Front end/개발 지식

소프트웨어 개발 프로세스 자동화 : CI/CD

_moda 2023. 6. 7. 17:44

CI/CD 알아보기


CI/CD란 ? 

CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다.

CI/CD의 "CD"는 지속적인 서비스 제공 및/또는 지속적인 배포를 의미한다.

 

즉, CI/CD는 소프트웨어 개발 및 배포 프로세스를 자동화하여 개발자들이 소프트웨어를 더 빠르고 안정적으로 제공할 수 있게 해주는 방법이다.

 

지속적 통합(Continuous Integration, CI)

지속적 통합으로 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선할 수 있다.

  • Code - Build - Test 단계
    • Code : 개발자가 코드를 원격 코드 저장소에 push하는 단계
    • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
    • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 과정

지속적 배포(Continuous Delivery/Deployment, CD)

제품 출시가 신속하고 안정적이며 사용자 피드백을 반영하여 지속적으로 개선할 수 있다.

  • 지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함된다.
  • Release - Deploy - Operate 단계
    • Release : 배포 가능한 소프트웨어 패키지를 작성
    • Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출합니다. (실질적인 배포 부분)
    • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지

대표적 지속적 배포 사례 : Github Page가 있다.

 

배포 자동화란 ?

  • 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻한다.
  • 배포 자동화가 필요한 이유 :
    1. 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약됨
    2. 휴먼 에러를 방지할 수 있음
      • 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수를 뜻함

빠른 배포 속도를 보장받는 방법 ?

  • 수없이 진행되는 배포 과정을 자동화 시키는 방법 : CI/CD 파이프라인

CI/CD 파이프라인

배포에서 파이프라인이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻한다.

파이프라인은 전체 배포 과정을 여러 단계로 분리되고, 각 단계는 파이프 라인 안에서 순차적으로 실행,주어진 작업들을 수행한다.

 

파이프라인 대표적 세가지 단계

  1. Source 단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행
  2. Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행
  3. Deploy 단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

CI/CD 파이프라인 구성 요소 및 장점

  • 빌드 (소프트웨어 컴파일)
  • 테스트 (호환성 및 오류 검사)
  • 릴리스 (버전 제어 저장소의 애플리케이션 업데이트)
  • 배포 (개발에서 프로덕션 환경으로의 변환)
  • 규정 준수 및 유효성 검사

CI/CD 구현

CI/CD를 구현하기 위해서는 다양한 도구와 워크플로우를 활용한다.

대표적인 CI/CD 도구로는 Jenkins, Travis CI, CircleCI, GitLab CI/CD 등이 있다.

  • 이러한 도구는 소스 코드의 자동 빌드, 테스트, 배포, 모니터링 등을 지원하여 CI/CD 파이프라인을 구축하고 실행할 수 있다.

CI/CD를 효과적으로 활용하려면 ?

  • 코드 품질 관리, 테스트 커버리지, 로그 및 모니터링, 오류 처리 및 롤백 전략 등에 대한 이해도가 필요
  • 팀 협업과 소프트웨어 개발 프로세스에 대한 이해도가 높아야 함