🐕 CI/CD 무중단 배포
위키 백과에 따르면 CI/CD는
소프트웨어 공학에서 지속적 통합(continuous integration)과 지속적 배포(continuous delivery)가 결합한 사례
를 의미합니다.
즉 소프트웨어의 개발, 테스트, 배포를 모두 통합하는 것을 통해 더 빠른 배포 주기를 가질 수 있게하는 방법론..이라고 볼 수 있겠네요
각각의 개념들을 좀 더 깊게 살펴 보기 전에 먼저 용어를 정리하고 보겠습니다.
컴파일 | 프로그래머가 작성한 소스코드를 기계어로 변환하는 과정 |
빌드 | 소스 코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정 |
배포 | 빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것 |
👻CI 지속적 통합(Continuous integration)
소프트웨어 공학에서 CI는 지속적으로 품질관리를 적용하는 프로세스를 실행하는 것입니다.
또한 이 CI는 기존의 고전적인 방법을 대체하는 방법입니다.
그렇다면 기존의 방법은 무엇일까요?
기존의 방법 | 모든 개발을 완료한 뒤에 품질 관리를 적용하는 프로세스 |
지속적 통합 | 지속적으로 품질 관리를 적용하는 프로세스 |
이렇게 정리할 수 있습니다.
이러한 CI는 이렇게 요약할 수 있습니다.
여러 명이 하나의 코드에 대해 수정을 진행해도 지속적으로 통합하면서 관리할 수 있는 방법론
여러명의 개발자와 하나의 레포지토리를 두고 작업을 하다보면 흔하게 생길 수 있는 문제점으로
다른 개발자들이 변경한 코드를 레포지토리에 제출하는 일이 반복되다보면
저장소에 있는 원본 코드와 각자가 가지고 있는 복사본은 점차 달라지게 됩니다.
그런데 문제가 있습니다. 각자가 변경한 내용이 많아지면 많아질수록
같이 작업하는 개발자가 많으면 많을수록 작업 내용을 통합하는 데 걸리는 시간이 길어질것입니다.
충돌이 발생할 가능성도 높아질 것이고요 이것을 통합의 지옥이라고 부른다고 하네요
지속적인 통합 CI는 이런 통합의 지옥을 피하기 위한 방법으로 자주 통합하는 것을 채택한 것입니다.
만약 지속적인 통합을 적용하지 않는다면 각각의 프로그래머가 자신이 작업한 것을 제출하기 전에
반드시 완벽한 빌드와 테스트를 진행해야할 것이고 이는 굉장히 귀찮을 거에요!
원래는 merge day를 정해서 하루 날잡고 야 이거 한번 합쳐보자~!! 했는데
이렇게하니까 충돌나는거도 골치아프고 병합하기가 너무 힘들다..
그러니까 차라리 잘게잘게 쪼개서 통합을 하면 문제가 안생기지 않겠냐?
라는 논리로 CI를 하면 좋다는 거겠네요
이러한 CI를 도와주는 여러가지 CI Tool들이 세상에 나와있습니다.
젠킨스, 서클CI, 팀시티, bamboo, gitlab , github actions 등이 있다고합니다.
이러한 CI 툴들은 빌드, 테스트를 자동화하는 역할을 수행해주곤 합니다.
🥶 CD 지속적 제공 (Continuous delivery) / 지속적 배포 (continuous deployment)
지속적 제공과 지속적 배포는 용어가 굉장히 혼용되고 있는 상태입니다.
굉장히 헷갈리는 개념인데 구분짓는 기준을 세워보면
Deploy 작업의 자동화 여부로 지속적 제공과 지속적 배포를 가른다고 할 수 있습니다.
지속적 배포 | 마지막 배포까지 자동화되었다면 |
지속적 제공 | 배포까지는 자동화되어있지 않다면 |
그림으로 표현하면 이런 느낌이 됩니다.
test까지만 자동화해준다면 CI
staging까지 자동화해준다면 지속적 제공
마지막 deploy까지 자동화해준다면 지속적 배포라고 부를 수 있습니다.
즉 CD는 CI의 연장선에 있는 개념이라고도 인식할 수 있고
코드를 빌드하고 테스트한 결과물을 배포하는 것까지 자동화한 개념이다. 라고 인식할 수 있습니다.
🌞무중단 배포
만약 이미 서비스 되고 있는 애플리케이션을 재 배포하기 위해서는
기존 서비스를 종료시키고 새롭게 업데이트한 서비스로 배포하는 과정이 필요할 것입니다.
그렇게되면 새로운 서비스가 배포되기 이전까지 다운 타임이 발생합니다.
다운 타임 동안 사용자들은 서비스를 이용할 수 없다는 문제가 있습니다.
그렇기 때문에 서비스를 중단하지 않으면서 배포를 하는 무중단 배포의 개념이 등장하게됩니다.
무중단 배포를 구현하기 위한 방법으로는
AWS에서 Blue-Green 무중단 배포 |
도커를 이용한 무중단 배포 |
L4, L7스위치를 이용한 무중단 배포 |
Nginx를 이용한 무중단 배포 |
등이 있습니다.
😋여러가지 테스트 방법
앞서 살펴본 테스트 부분에서 여러가지 테스트를 도입하기도 합니다.
시스템 테스트, 알파 테스트, 베타 테스트 등의 테스트가 존재해요
시스템 테스트 | 모든 모듈을 통합한 뒤 최종적으로 완성된 시스템이 요구사항을 만족하는지 확인합니다. 요구 사항을 만족하지 않는다면 다시 요구 분석 단계로 돌아가 새로 개발을 하기도 합니다. |
알파 테스트 | 완전히 개발된 시스템을 개발 현장에서 비공개로 테스트하는 것으로 주문형 제품의 경우 개발진과 클라이언트 사이에서 동의가 이루어질때까지 수행됩니다. 대기업의 경우 이 업무를 주로 하는 전문 QA 팀이 존재합니다. |
베타 테스트 | 고객의 실제 사용환경에서 수행되는 테스트로 미리 선별된 유저들이 해당 제품을 사용해 봅니다. 이 과정에서 에러나 버그가 발견되면 수정하는 형식으로 진행됩니다. |
🤢SaaS
Software as a Service의 준말입니다.
클라우드 제공 업체가 클라우드 애플리케이션 소프트웨어를 개발 및 유지관리하고 자동 소프트웨어 업데이트를 제공하며 인터넷을 통해 pay as you go 방식으로 고객에게 소프트웨어를 제공하는 방식을 말한다고 합니다.
클라우드 서비스의 한 방식이며 브라우저에 접속하기만 해도 새 버전을 즉시 사용할 수 있다고 해요
애플리케이션부터 서버, 가상화, 스토리지, 네트워킹까지 전부 다 공급자 쪽에서 관리하기 때문에 고객이 제어하거나 관리할 부분이 거의 없게되며 따라서 업데이트에 대한 걱정에서 벗어나고 잦은 배포를 가능하게 해줍니다
🐶마치며 and 레퍼런스
https://www.youtube.com/watch?v=sIPU_VkrguI
https://ko.wikipedia.org/wiki/CI/CD
'frontend' 카테고리의 다른 글
webpack proxy 설정 에러 해결방법.. (0) | 2023.06.07 |
---|---|
Github Action으로 S3 배포 자동화하기 (0) | 2023.06.05 |
AWS EC2에서 git ssh key 생성하고 사용하기.. (0) | 2023.06.04 |
aws ec2 인스턴스에 node.js/ nvm 설치방법 (0) | 2023.06.03 |
아마존 웹 서비스 (aws)를 케이크처럼.. 어렵게.. 이해하기.. (0) | 2023.05.11 |