CICD

송철진·2023년 4월 28일
0

1. 용어 정리

  • Staging: Production의 전 단계. 실제 유저에게 배포하기 전에 테스트용

  • Production: 실제 유저에게 배포되어 서비스되는 단계

  • Build: 인간이 읽을 수 있는 소스코드를 프로그램 실행 시 컴퓨터가 읽을 수 있게 필요한 모든 것(pre-processing, compiling, converting data files, running automated tests, packaging 등)을 준비하는 작업

compiling, 컴파일 프로세싱: 소스 코드 파일을 실행 코드로 변환

interpreted languagecompiled language
언어 종류파이썬, 자바스크립트Java, C/C++
빌드 중 컴파일 과정없다있다
빌드dependency, 라이브러리 설치가 대부분직관적 확인 가능

2. 개발자 workflow

  1. 개발(코딩) - 하나의 기능 구현을 완료하면
  2. 테스트
  • (1) feature branch에서 Unit Test 실행
  • (2) Pull Request를 거쳐 develop branch에 merge
  • (3) develop branch에서 Unit Test를 실행★
  1. Staging 배포
  • (1) Staging 서버에 직접 접속 후에 새로운 코드를 pull로 내려받고,
  • (2) 빌드 명령어를 실행해 빌드 과정을 거친 후
  • (3) 애플리케이션 서버를 실행
  1. Integration test, E2E (End To End) Test - 시간 소요多
  • 프로덕션과 최대한 동일한 환경을 구축한 후 진행되어야 한다.
  1. Production 배포 - 시간, 공수多多
  • 발견한 버그나 오류를 수정.
  • 테스트부터 모든 배포 과정을 다시 수행

3. 개발 환경 자동화 특징

CICD, Continuous Integration / Continuous Deployment
개발자들이 개발에 더 집중할 수 있도록, 테스트와 배포등 개발 외의 작업들은 모두 자동화를 시켜서 개발자의 생산성을 높여주는 것

  1. 개발자의 생산성 향상 효과
    Unit Test, Integration Test, E2E Test등의 테스트 과정과 모든 배포 과정을 자동으로 실행되도록 하고, 문제가 생겼을때 자동으로 알려주는 시스템을 구축

  2. 배포 속도 향상, 빈도 증가

  • CICD가 사용되기 전 - 개발자의 개발시간 확보를 위해 대부분의 기업에서는 정해진 주기에만 배포를 실행
  • CICD 시스템을 잘 구축해놓은 기업들은 하루에도 여러 번 배포 가능. Netflix는 하루에 100번 이상도 배포한다!

4. CICD 란?

Continuous Integration 지속적인 통합
Continuous Deployment 지속적인 배포

CICD 시스템은 빌드, 테스트 그리고 배포를 자동화 함으로서 개발자들의 생산성을 높이고 배포를 더 빠르게 그리고 더 자주 할 수 있도록 한다.

  • 더 빠르고 더 자주하는 배포 = 지속적인 배포

4-1. Continuous Integration(CI)

Integration (통합)

개발자들이 작업한 코드가 통합되어서 하나로 합쳐지는 것

Git 환경에서 개발자들이 구현한 코드를 담고 있는 feature branch들이 develop branch에 merge되어 staging 서버에 배포(혹은 실제 서버에 배포 되지 않더라도 배포 될 수 있는 package나 artifact 형태로 생성)되는 것.

자동화하여, 개발자가 개발을 끝내고 커밋하는 순간 테스트와 머지까지 자동으로 신속하게 이루어지게 하는 것.

4-2. Continuous Deployment(CD)

Continuous Deployment 지속적인 배포.
Continuous Integration의 다음 부분들이 자동화되는 것

CI 과정을 거쳐 develop 브랜치에 merge가 된 최신 코드들을 실제 유저들이 사용할 수 있도록 production 서버에 배포가 되어야 한다.
Production 서버의 배포 전에 많은 테스트들이 이루어져 한다.

  1. Staging 서버에서 최신 코드를 배포한다.
  2. Staging 서버에서 다음과 같은 다양한 테스트를 실행하여 production에 배포가 될 수 있을지를 판단한다.
  3. Integration Test
  4. E2E(End-To-End) Test
  5. 그 외 Load Test등 필요한 테스트들
  6. 모든 테스트가 통과 하면 Production 서버에 배포하고 master(혹은 main) 브랜치에 merge한다.

Continuous Deployment는 위 과정들을 자동화하여, 개발자가 개발을 끝내고 커밋 및 푸쉬를 하면 그대로 모든 테스트를 자동으로 거치고 바로 production 배포까지 완료되는 것

4-3. Continuous Delivery?

Continuous Deployment
production 배포까지 모두 100% 자동으로 이루어짐

Continuous Delivery
production 배포는 사람의 승인을 거친 후에 이루어짐.

production 배포가 모두 자동화가 되기 위해서는 테스트의 자동화가 정말 구축이 되어 있어야 한다.

촘촘한 테스트 자동화 시스템을 구축하기 위해서는 굉장히 많은 공수가 들어간다. 그래서 대부분 사람의 승인을 거친 후 production 배포되도록 CICD (Continuous Integration / Continuous Delivery) 시스템을 구축한다.

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글