관리 메뉴

Optimal Solution

CI/CD - 기본 개념 본문

CICD

CI/CD - 기본 개념

ICE_MAN 2024. 8. 31. 02:54
728x90

CI/CD란 ?

CI/CD란 Continous Integration(CI)와 Continous Delivery/Deployment(CD)를 아우르는 용어이다.

DevOps라는 분야의 핵심 업무로도 알려져 있다.

 

CI

CI는 지속적 통합이라는 의미를 가지고 있다.

모든 개발자의 작업물을 하루에 여러 번이고 공유 레파지토리에 병합(merge)하는 방식이며, 각 병합은 자동화된 빌드 및 테스트 프로세스를 트리거한다.

CI의 주요 목표는 병합 시 버그를 조기에(사전에) 자주 감지하고 수정하여 안정적인 소프트웨어를 더 쉽게 생성할 수 있도록 하는 것이다.

 

CI의 프로세스는 아래와 같다.

  - 개발자는 코드 변경 사항을 공유 레파지토리에 자주 commit, push한다.

  - 자동화된 빌드 프로세스는 코드를 검사하여 예상대로 컴파일되고 작동하는지를 확인한다.

  - 새로운 코드 변경으로 인해 기존의 기능이 중단되지 않는지를 확인하기 위해 자동으로 테스트를 실행한다.

  - 빌드 혹은 테스트에서 실패가 발생하는 경우, 개발자에게 이를 즉시 알려 문제를 신속하게 해결할 수 있도록 한다.

 

CD

CD는 지속적 전달 혹은 배포라는 의미를 가지고 있다.

지속적 전달(Continous Delivery)와 지속적 배포(Continous Delivery)의 차이는, 개발자의 변경 사항이 릴리즈되는 수준이 공유 레파지토리 레벨인지, 프로덕션 레벨인지의 차이이다.

 

Continous Delivery

지속적 전달의 경우, 모든 테스트를 통과한 코드 변경 사항이 스테이징 또는 프로덕션 환경으로 릴리즈되도록 자동으로 준비하는 CI의 확장의 형태이다. 이 프로세스는 코드 베이스가 항상 배포 가능한 상태인지 확인한다.

지속적 전달의 주요 목표는 소프트웨어가 언제든지 안정적으로 출시될 수 있도록 보장하여 시장 출시 시간을 단축시키고 최종 제품의 품질을 향상시키는 것이다.

 

지속적 전달의 프로세스는 아래와 같다.

  - CI 프로세스 이후 추가 테스트(ex - 성능, 통합, 사용자 승인 테스트)가 실행될 수 있다.

  - 그 후 빌드는 추가 테스트 및 검증을 위해 스테이징 환경에 자동으로 배포된다.

  - 프로덕션 릴리즈는 수동으로 수행할 수 있으므로 언제든지 소프트웨어를 배포할 준비가 되어있다.

 

Continous Deploy

지속적 배포의 경우, 프로덕션 파이프라인의 모든 단계(빌드, 테스트 및 스테이징)를 통과하는 모든 변경 사항이 수동 개입 없이 자동으로 프로덕션에 릴리즈되도록 배포 프로세스를 자동화하는 지속적 전달(Continous Delivery)의 확장 형태이다.

지속적 배포의 주요 목표는 모든 변경 사항을 최종 사용자에게 즉시 제공하여 피드백 루프를 가속화하고 더 빠른 반복과 개선을 가능하게 하는 것이다.

 

지속적 배포의 프로세스는 아래와 같다.

  - 지속적 전달과 유사하지만, 변경 사항이 모든 테스트를 통과하면 자동으로 프로덕션 환경에 배포된다.

 

CI/CD의 이점

CI/CD의 이점으로는 아래와 같다.

  - 빠른 릴리즈 주기

    - CI/CD는 빌드, 테스트 및 배포 프로세스를 자동화하여 더 빠르고 더 빈번한 릴리즈를 가능하게 한다.

  - 고품질 소프트웨어

    - 지속적인 테스트를 통해 버그를 조기에 발견하여 더욱 안정적이고 신뢰할 수 있는 소프트웨어를 만들 수 있다.

  - 수동 노력 감소

    - 자동화는 수동 개입의 필요성을 줄여 사람의 실수(human error)를 최소화하고 개발자가 다른 작업에 집중할 수 있도록 한다.

  - 향상된 협업

    - CI/CD는 더 작고 관리하기 쉬운 코드 변경과 빈번한 커밋을 장려하여 개발자 간의 더 나은 협업을 촉진한다.

  - 일관된 배포

    - 자동화된 배포 프로세스는 소프트웨어가 일관된 방식으로 배포되도록 보장하여 배포 문제를 줄인다.

 

CI/CD에 사용되는 일반적인 툴

- CI 서버 : Jenkins, CircleCI, Travis CI, Gitlab CI/CD 등

- 버전 관리 : Git, Github, Gitlab, Bitbucket 등

- 빌드 도구 : Maven, Gradle, npm 등

- 테스트 : JUnit, Selenium, pytest 등

- 배포 : Docker, Kubernetes, Ansible, Terraform 등

728x90

'CICD' 카테고리의 다른 글

CI/CD - 빌드 자동화 기초  (1) 2024.09.01
CI/CD - 빌드 자동화 개념  (0) 2024.08.31