CI/CD

SuJin·2022년 12월 7일
0

CI

  • 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
  • CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제 해결 가능
  • 개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code - Build - Test 단계에서 사용 가능
    • Code : 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계
    • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
    • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정

      이 과정에서 개발자는 코드를
      (Code) 원격 코드 저장소에 push하고,
      (Build) 테스트 및 빌드를 하며 빌드 결과를 통해 빌드가 성공했는지 실패했는지 확인을 하고,
      (Test) 통합 테스트 결과를 통해 개선 방안을 찾는다.
      이 지속적인 통합 과정을 통해 개발자는 버그를 일찍 발견할 수 있고, 테스트가 완료된 코드에 대해 빠른 전달이 가능해지며 지속적인 배포가 가능해진다.

지속적 통합

  • 모든 코드 변화를 하나의 리포지토리에서 관리하는 것 부터 시작
  • 모든 개발팀이 코드의 변화 확인 가능 -> 투명하게 문제점 파악 가능
  • 잦은 풀 리퀘스트(pull request)와 머지(merge)로 코드를 자주 통합하며 기본적인 테스트도 실행 가능
  • 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선 가능

CD

  • 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미
  • 위 두 용어는 상호 교환적으로 사용됨
  • 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻함
  • 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도
  • Release : 배포 가능한 소프트웨어 패키지를 작성
  • Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출. 실질적인 배포 부분
  • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지
  • 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함됨


최근에는 클라우드 기술 발전과 맞물려 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어서 다루는 경우가 점차 증가하고 있다.
ex) 이전에는 배포 자체가 상당히 오래 걸리고 힘든 일이어서 배포 이전 단계에서 많은 고민을 하곤 했다면, 요즘은 사용자의 피드백을 빨리 받기 위해서, 서비스를 중단하지 않기 위해서 릴리즈만 잘 기록해두고 바로바로 배포하는 사례가 증가하고 있다.

CI/CD 사례

Github Page

지정해둔 디렉터리에 정해진 방식에 따라 commit 하면, Github Page가 알아서 해당 index.html 파일과 해당 디렉터리에 있는 파일을 Bundling하여 Github Page 서버에 업로드한다. 이런식으로 자동으로 인터넷에 배포가 되었고, 만든 결과물을 쉽게 공유할 수 있다.

profile
Anyone can be anything.

0개의 댓글