CI이란 Continuous Integration
, 지속적인 통합을 의미한다. 싑게 빌드및 테스트 자동화
하여 알면 됩니다.
하지만 가장 중요한 의미는 여러 명의 개발자가 개발한 코드들을 정기적으로 빌드 및 테스트하여 공유 리포지토리에 통합하는 것
을 말합니다.
CI의 연장선에 있는 개념
CD란 두 가지 의미를 내포한다.
1) Continuous Delivery
, 지속적인 제공
2) Continuous Deployment
, 지속적인 배포
지속적인 제공란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 서버(예: GitHub 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 말한다.
지속적인 배포란 개발자의 변경 사항이 깃든 빌드 결과물을 리포지토리에서 고객이 사용 가능한 프로덕션 서버환경까지 자동으로 릴리스(배포)하는 것
을 의미한다.
Tool로는 Jenkins
, Travis ci
, 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 프로젝트가 아닐경우 고려해보시면 좋습니다. (두 서비스 다 무료 제공이 있습니다.)
Jenkins는 설치형 CI/CD로 기업에서 가장 많이 사용하는 CI/CD
입니다. 앞서 소개한 서비스가 클라우드 형태로 일정 조건을 초과하면 요금을 청구하는 형태로 되어있지만, Jenkins는 설치형
으로 다운받아서 설치하면 어디서든 동작시킬 수 있습니다.
가장 유명한 CI/CD 답게 많은 문서가 존재하며 다양한 업무를 Jenkins에서 자동화 할 수 있습니다. 그러나 CI/CD 동작 서버가 내장되어 있지 않기 때문에 직접 서버를 구매해서 동작해야하는 번거로움과, 설치 및 환경설정에 진입장벽이 있습니다.
아키텍쳐를 그려보면 이런 모양새이다.
참고
: CI/CD 구분할것 없이 Tool로 ci cd 기능 모두 가지고 있다고 보면 된다. Jenkins가 대표적이다.
새로운 서비스가 릴리즈할 때 서버중단없이 배포하는 것
1) Rolling 배포
장점)
2) Canary 배포
장점)
단점)
3) Blue / Green
배포
Blue를 구버전, Green을 신버전으로 지칭,
구버전과 동일하게 신버전의 인스턴스를 구성
신버전 배포 시 로드 밸런서(Nginx)
를 통해 신버전으로만 트래픽을 전환
장점)
단점)
1) AWS Blue-Green 배포
2) 도커를 이용한 무중단 배포
3) L4, L7 스위치를 이용한 무중단 배포
4) Nginx를 이용한 무중단 배포
(가장 리소스가 적고 빠르게 구현가능해서 많이 사용)
=> 로드 밸런싱(부하분산)
이 무중단 배포를 가능케 해! 왜?
하나의 서버가 멈추더라도 서비스 중단없이 다른 서버가 서비스를
계속 유지할 수 있는 무중단 배포가 가능
라운드 로빈 스케줄링(Round Robin Scheduling, RR)
은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice)로
CPU를 할당하는 방식의 CPU 스케줄링 알고리즘입니다.기회를 차례대로 받기 시간단위로
"라고 이해해도 좋습니다.Nginx를 이용한 무중단 배포 실습은 다음 블로그를 참조해주세요!
https://velog.io/@mooh2jj/Ubuntu20.04-Nginx-설치-및-로드밸런싱