CI/CD 개념 및 무중단 배포란?

devdo·2022년 1월 1일
0

CI

CI이란 Continuous Integration, 지속적인 통합을 의미한다. 싑게 빌드및 테스트 자동화 하여 알면 됩니다.

하지만 가장 중요한 의미는 여러 명의 개발자가 개발한 코드들을 정기적으로 빌드 및 테스트하여 공유 리포지토리에 통합하는 것을 말합니다.

대표적인 Tool

  • GitDesktop
  • SourceTree

CD

CI의 연장선에 있는 개념
CD란 두 가지 의미를 내포한다.
1) Continuous Delivery, 지속적인 제공
2) Continuous Deployment, 지속적인 배포

지속적인 제공란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 서버(예: GitHub 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 말한다.

지속적인 배포개발자의 변경 사항이 깃든 빌드 결과물을 리포지토리에서 고객이 사용 가능한 프로덕션 서버환경까지 자동으로 릴리스(배포)하는 것을 의미한다.

Tool로는 Jenkins, Travis ci, Github Actions 등이 있다.


1) Github Actions

Github Actions 는 Github에 내장된 CI/CD 도구입니다. Github에 내장되 있는 CI/CD라 github와 통합이 쉽고, CI/CD 동작 서버가 내장 되어 CI/CD서버를 따로 구축할 필요 없으며, 일정 수준까지 가격이 무료 라서 개인 프로젝트를 수행할떄 진입장벽 없이 쉽게 선택할 수 있는 도구 입니다.

.github/workflows 폴더안에 yml로 스크립트를 생성하면 별도의 설정 없이 github에 action이 추가된 것을 확인할 수 있습니다. 자세한 사용법이 궁금하시면 이전에 작성한 포스팅을 확인해 보세요

Github Actions외에 비슷하게 yaml이나 yml로 스크립트를 설정하고 CI/CD서버를 제공해주는 서비스로는 Circle CI와 Travis CI가 존재하니 Github 프로젝트가 아닐경우 고려해보시면 좋습니다. (두 서비스 다 무료 제공이 있습니다.)


2) Jenkins

Jenkins는 설치형 CI/CD로 기업에서 가장 많이 사용하는 CI/CD입니다. 앞서 소개한 서비스가 클라우드 형태로 일정 조건을 초과하면 요금을 청구하는 형태로 되어있지만, Jenkins는 설치형으로 다운받아서 설치하면 어디서든 동작시킬 수 있습니다.

가장 유명한 CI/CD 답게 많은 문서가 존재하며 다양한 업무를 Jenkins에서 자동화 할 수 있습니다. 그러나 CI/CD 동작 서버가 내장되어 있지 않기 때문에 직접 서버를 구매해서 동작해야하는 번거로움과, 설치 및 환경설정에 진입장벽이 있습니다.


배포 구조도

아키텍쳐를 그려보면 이런 모양새이다.

참고: CI/CD 구분할것 없이 Tool로 ci cd 기능 모두 가지고 있다고 보면 된다. Jenkins가 대표적이다.

무중단 배포란?

새로운 서비스가 릴리즈할 때 서버중단없이 배포하는 것

무중단 배포 종류

1) Rolling 배포

  • 무중단 배포의 가장 기본적인 방식
  • 서버를 차례대로 업데이트 시키는 방식

장점)

  • 인스턴스를 추가하지 않아도 돼서 관리가 간편
    단점)
  • 사용중인 인스턴스에 트래픽이 몰릴 수 있음(업데이트를 하기위해선 라우팅을 중지하고 업데이트한 다음에 다시 라우팅을 연결한다.)
  • 구버전과 신버전의 공존으로 인한 호환성 문제

2) Canary 배포

  • 옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해
    가스 노출 위험을 감지했던 것에서 유래
  • 신버전을 소수의 사용자들에게만 배포
  • 문제가 없는 것이 확인되면 점진적으로 다른 서버에 신버전 배포

장점)

  • 문제 상황을 빠르게 감지 가능
  • A/B 테스트로 활용 가능

단점)

  • 모니터링 관리 비용
  • 구버전과 신버전의 공존으로 인한 호환성 문제

3) Blue / Green 배포

Blue를 구버전, Green을 신버전으로 지칭,
구버전과 동일하게 신버전의 인스턴스를 구성
신버전 배포 시 로드 밸런서(Nginx)를 통해 신버전으로만 트래픽을 전환

장점)

  • 배포하는 속도가 빠르다
  • 신속하게 롤백 가능
  • 남아 있는 기존 버전의 환경을 다음 배포에 재사용

단점)

  • 시스템 자원이 2배로 필요

무중단 배포 구현 방법

1) AWS Blue-Green 배포
2) 도커를 이용한 무중단 배포
3) L4, L7 스위치를 이용한 무중단 배포
4) Nginx를 이용한 무중단 배포(가장 리소스가 적고 빠르게 구현가능해서 많이 사용)
=> 로드 밸런싱(부하분산)이 무중단 배포를 가능케 해! 왜?
하나의 서버가 멈추더라도 서비스 중단없이 다른 서버가 서비스를
계속 유지할 수 있는 무중단 배포가 가능

  • 로드밸런싱의 RR이란?
  • 라운드 로빈 스케줄링(Round Robin Scheduling, RR)은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice)로 CPU를 할당하는 방식의 CPU 스케줄링 알고리즘입니다.
    쉽게 말해 라운드 로빈은 "기회를 차례대로 받기 시간단위로"라고 이해해도 좋습니다.
    https://jwprogramming.tistory.com/17

Nginx를 이용한 무중단 배포 실습은 다음 블로그를 참조해주세요!
https://velog.io/@mooh2jj/Ubuntu20.04-Nginx-설치-및-로드밸런싱



참고

profile
배운 것을 기록합니다.

0개의 댓글