Server

CI와 CD에 대하여 (Continuous Integration / Deployment )

지화자_ 2024. 6. 14. 01:48

학습에 앞선 선행 용어 정리

더보기

컴파일

- 프로그래머가 작성한 소스코드를 기계어로 변환하는 과정

 

빌드

- 소스 코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정

 

배포

- 빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것

 

비유*

영문판 책을 서점에 개재한다 (영어로 된 글을 한국어로 변환한다 ➡︎ 변환된 글을 책으로 엮는다 ➡︎ 이를 서점에 배치한다)

 

 

 

CI (Continuous Integration)

개발을 진행하면서도 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리함으로써, 통합 시마다 자동으로 빌드하고 테스트하여 문제를 조기에 발견하고자 하는 Extreme Programming(XP) 방법론 중 하나

 

CI의 한계

테스트를 마치고 배포할 서버가 증가할 경우, 각 서버마다 배포를 일일히 해야 하는 문제 발생➡︎ CD를 통한 배포 자동화

 

 

CD (Continuous Delivery)

reposityory에 자동으로 릴리즈 되게 하여 언제든지 배포될 준비가 된 상태를 유지하는 것 ( 프로덕션 배포 자동 X)

 

CD (Continuous Deployment)

 CI의 연장선 개념으로 빌드의 결과물을 프로덕션으로 배포 하는 작업을 자동화하는 것

 

출처: Red Hat

 

 

그래서 CI/CD가 왜 필요한가?

코드의 빌드, 테스트, 병합과정을 거쳐 배포에 이르기까지 체계적이고 자동화된 빌드와 테스트 과정을 통해 버그나 오류의 유무를 조기에 발견하고 수정할 수 있다. 이는 배포의 속도 및 안정성을 향상시킨다. 

 

대표적인 CI/CD tool

  1. Jenkins
  2. GitLab CI/CD
  3. Travis CI

무중단 배포 (Zero Downtime  Deployment)

애플리케이션을 업데이트 하거나 새 버전을 배포하는 동안에도 서비스 중단 없이 사용자에게 서비스를 제공하는 배포 방법

 

배포 방법

1. 롤링 배포

서버 그룹을 점진적으로 업데이트하여 배포하는 방법으로 한 번에 한 대의 서버 혹은 소규모 서버 그룹을 업데이트

서버 그룹 중 일부를 선택하여 새로운 버전의 애플리케이션 배포 후 모니터링 이상 없을 시 다음 서버 업데이트 함

 

장점

  • 전체 시스템의 가용성 유지 가능
  • 인스턴스를 추가하지 않아도 되어 관리가 간편함

단점

  • 사용 중인 인스턴스에 트래픽이 몰릴 가능성
  • 이전 버전과 신버전과의 공존으로 인한 호환성 문제

 

2. 블루 - 그린 배포

블루(이전 버전)와 그린(새로운 버전)을 사용한 배포 방법으로 한 환경을 운영하면서, 이와 다른 환경으로 새로운 버전의 어플리케이션을 배포하고 테스트 한 뒤, 테스트 성공 시 그린 환경으로 트래픽을 옮김. 기존 블루 환경의 경우 다음 배포를 위해 준비함.

 

장점

  • 배포 속도가 빠름
  • 롤백이 쉬움
  • 남은 버전의 환경을 다음 배포에 재사용 가능

단점

  • 시스템 자원 유지 비용이 2배로 증가함

 

3. 카나리 배포

새로운 버전의 어플리케이션을 소수의 사용자에게만 배포하여 테스트하는 방법으로 롤링 배포와 달리, 문제가 발생하지 않을 시 배포 범위를 늘림

 

장점

  • 초기 배포 리스크 감소로 인한 문제 발생 시 영향을 받는 사용자의 수가 적음

단점

  • 배포 및 모니터링 과정이 복잡할 수 있음
  • 이전 버전과의 호환성 문제 발생 가

 

출처

더보기