CI/CD란 무엇인가

홍준섭·2022년 9월 29일

개발 공부

목록 보기
5/20

CD란 무엇인가?

CD(continuous Delivery) 지속적 인도란 새로운 기능 추가나 구성의 변경, 버그 수정이나 기능 실험을 포함한 모든 유형의 변화를 통제하면서 제품을 생산하는 역량 또는 사용자에게 빠르고 안전하고 안정적으로 제공하는 역량이다.
CD를 사용하지 않는 경우 실제로 구현이 끝나도 배포까지 시간이 필요하다. 그렇기에 CD를 통해 배포 절차를 자동화하여 기능이 구현되면 거의 즉시 사용자에게 전달될 수 있도록 한다.

전통적인 인도 프로세스

동작 방식

개발 -> 품질 보증 -> 운영

  • 개발단계
    개발자가 제품을 구현하고 구현을 끝내면 코드를 QA 팀으로 넘긴다.
  • 품질 보증 단계
    일반적으로 이 단계를 UAT(사용자 인수 테스트)라고 부르며, 테스트에 영향이 없도록 트렁크 코드를 프리징하고 진행한다. QA팀은 통합 테스트와 인수 테스트, 비기능 분석 같은 일련의 테스트를 수행한다.
  • 운영 단계
    전달 받은 코드를 릴리스하고, 제품을 지속적으로 모니터링한다.

단점

  • 느린 인도 기간
    요구 사항이 전달된 후 시간이 많이 지난후 고객에게 제품이 전달된다.
  • 느린 피드백 주기
    개발자는 UAT 단계가 돼서야 자신이 만들어 낸 버그를 알게 된다.
  • 자동화 미비
    릴리스 횟수가 적을수록 자동화 필요성이 낮아지므로 릴리스 기간을 정확히 예측하기 힘들다.
  • 위험한 핫픽스
    핫픽스를 긴급하게 만들어야 하는 경우 시간이 걸리는 UAT를 전부 수행 할 수 없기 때문에 간단한 테스트만 하거나 아예 테스트를 안하고 핫픽스를 발행하게 된다.
  • 스트레스
    릴리스 주기를 예측할 수 없어 운영 팀이 스트레스를 받는다. 또한 릴리스는 매우 중요한 단계이므로 이를 진행하는 개발자와 테스터도 스트레스를 받게 된다.
  • 의사소통 부족
    기존의 방식의 경우 작업 결과물이 한 팀에서 다른 팀으로 전달되기 때문에 각 팀은 제품의 완성보다는 자기가 맡은 부분만 관심을 갖게 된다. 그 결과 문제가 발생하면 협력해 해결하기 보다 서로를 비난하게 된다.

지속적 인도 방식의 장점

  • 빠른 제품 인도
    개발이 끝난 제품이 바로 고객에게 전달되므로 출시 기간이 획기적으로 단축된다.
  • 빠른 피드백 주기
  • 위험도가 낮은 릴리스
  • 유연한 릴리스 가능

자동 배포 파이프라인

코드 변경 -> 지속적 통합 -> 자동 인수 테스트 -> 구성 관리

  • 지속적 통합 (continuous intergration)
    각기 다른 개발자가 작성한 코드가 통합됐는지 확인한다.
  • 자동 인수 테스트
    개발자가 구현한 기능이 고객의 요구 사항과 맞는지 확인한다. 이 테스트는 수동 품질 보증 단계를 대체한다.
  • 구성 관리 (configuration management)
    수동 운영 단계를 대체한다. 환경을 구성하고, 소프트웨어를 배포한다.

지속적 통합(CI)

리포지토리에서 코드를 체크아웃하고 이를 컴파일한 후 단위 테스트를 실행하고 코드 품질을 검증한다.

자동 인수 테스트

  • 인수 테스트(자동)
    비즈니스 관점에서 본 기능적 요구 사항을 검증하는 테스트다. 고객과 개발자가 합의한 소프트웨어의 동작 방식을 스토리나 예제 형식으로 작성한다.
  • 단위 테스트(자동)
    버그를 최소화하고 소프트웨어의 품질을 향상하도록 개발자를 지원하는 테스트다
  • 탐색적 테스트(수동)
    수동으로 하는 블랙박스 테스트이며, 경험을 바탕으로 시스템의 문제를 찾거나 개선하는 테스트를 수행한다.
  • 비기능 테스트(자동)
    성능, 확장성, 보안등과 관련된 시스템 속성을 검증하는 테스트다.

기술 및 개발의 전제 조건

  • 자동 빌드, 테스트, 패키지, 배포작업
    모든 작업을 자동화할 수 있어야 한다. 예를 들어 보안 문제가 생긴다거나 복잡하다는 이유로 자동화가 불가능한 시스템이 있다면 완전히 자동화된 인도 파이프라인을 만드는 것이 불가능하다.
  • 신속한 파이프라인 실행
    파이프라인은 빠르게, 늦어도 5~15분 내에 실행돼야 한다.
  • 신속한 장애 복구
    신속한 롤백이나 복구를 할 수 있어야 한다.
  • 무중단 배포
    하루에도 수 차례 배포를 해야 하기 때문에 배포 시 다운타임이 발생하면 안 된다.
  • 트렁크 기반 개발
    개발자는 정기적으로 한개의 마스터 브랜치에 체크인해야 한다. 그렇지 않고 개발자들이 자신의 로컬 브랜치에서만 작업하면 코드 통합이 되지 않으므로 릴리스 회수가 줄어든다.

CD 프로세스 구축

도구 소개

  • 도커
    애플리케이션을 실행 환경에 독립적인 이미지로 패키징하는 기술을 제공하여 어플리케이션을 사용하려면 컴퓨터를 각기 구성해야 했던 서버를 마치 하나의 리소스처럼 다룰 수 있도록 했다.
  • 젠킨스
    젠킨스를 사용해 CI 및 CD 파이프라인뿐만 아니라 일반적인 대부분의 자동화 스크립트를 생성할 수 있다.
  • 앤서블
    앤서블은 소프트웨어의 프로비저닝과 구성 관리, 애플리케이션 배포를 자동화하는 도구다.
  • 깃허브
    깃허브는 호스팅 서비스를 제공한다.
profile
개발 공부중입니다

0개의 댓글