최근 어느 커뮤니티에서 대화를 나누는 도중 ci/cd에 대해서 어떻게 구현한 것인지에 대한 질문이 있었는데 그에 대한 답변에 대해서 스스로 바로 떠오르지 못했기 때문에 이번 글을 작성하게 되었다.
무중단 배포가 뭘까요?
그래서 여러가지 키워드가 나왔었는데 blue-green
, canary
등등의 키워드가 나왔는데 처음 들었다.
솔직히 말해서 그래서 이번 기회에 정리하고 이와 관련해서 무중단 배포를 어떻게 진행하는지 알아보기 위해서 이 글을 작성하게 되었다.
먼저 무중단 배포도 중요하긴 하지만 어쩌다 이런 단어가 나온지 확인하자. 가장 많이 듣는 키워드로는 CI/CD
라는 키워드에서 계속가다가 무중단 배포
라고 나오게 되었다.
먼저 알고가면 좋은 용어
온 프레미스
기업의 서버를 클라우드와 같이 '가상의 공간'이 아니라, 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식
로드 밸런싱
로드 밸런싱은 들어오는 네트워크 트래픽을 서버 팜 또는 서버 풀이 라고도 하는 백엔드 서버 그룹에 효율적으로 분산시키는 것을 말합니다 .
로드 밸런서
로드 밸런서는 서버 앞에 앉아 있는 "교통 경찰" 역할을 하며 속도와 용량 활용도를 최대화하고 어느 한 서버도 과로하지 않도록 하여 성능을 저하시킬 수 있는 방식으로 이러한 요청을 이행할 수 있는 모든 서버에 클라이언트 요청을 라우팅합니다. . 단일 서버가 다운되면 로드 밸런서는 나머지 온라인 서버로 트래픽을 리디렉션합니다. 새 서버가 서버 그룹에 추가되면 로드 밸런서가 자동으로 해당 서버에 요청을 보내기 시작합니다.
등등 되게 많다. 그렇지만 우린 궁금했던 것은 무중단 배포가 무엇인지에 대해서였다.
일단 말 뜻을 제대로 이해하기 위해서 예시 상황이 있다.
내가 어떤 서비스를 버전업을 시킬려고 한다 현재 버전은
v1
이다. 이제 여러 기능을 추가시킨v2
를 사용할 수 있게 배포를 해야 한다.
우리는 사용자들이 우리가 버전을 바꾸는데 전혀 인지하지 못하도록 서비스가 중지되지 않도록 365일 계속 가동되는 것을 목표로 한다.
일반적으로 배포를 할려면 어떤 과정을 거쳐야 할까?
1. 새로 만든 v2 버전 빌드 서버에 다운로드
2. V1 버전과 V2 버전은 서로 같은 포트를 사용하므로, V2 버전을 실행하기 전에 먼저 현재 실행중인 V1 버전의 프로세스를 종료해야한다.
3. 이 시점부터 유저는 서비스를 사용할 수 없게 된다. 유저가 새로운 V2 버전으로 접속할 수 있도록 바로 V2 빌드를 실행한다.
4. 로딩과정을 거치고 V2 버전이 정상적으로 실행되면 유저가 다시 정상적으로 서비스를 이용할 수 있게 된다.
만약 게임을 사용하는 클라이언트의 입장이 되어볼까? 갑자기 개발자가 새 버전 올려야겠다
하고 배포를 했다.
그러면 예를 들면 LOL
과 같은 게임을 하다가 서비스를 사용할 수가 없는데 이 상황은 마치...
너무 유명한 위의 사진과 같은 경우가 아닐 수 없다. 개발자가 클라이언트의 폭력성을 체험시키게 할 필요는 없어 보인다.
아래와 같은 상황이 어찌보면 사람 손이 아닌 개발자 손에서 일어나는 거랑 비슷한 경우라고 볼 수 있다.
결국 이러한 상황을 겪지 않기 위해서 지속적으로 365일 가동하는 서비스들은 무중단 배포
를 꼭 사용해야 한다.
트래픽을 점진적으로 구버전에서 새 버전으로 옮기는 방식이다.
서버 개수를 유연하게 조절할 수 있는 AWS와 같은 클라우드를 기반으로 서비스를 운영할 때 적합한 방식일 것 같다.
이런 방식이 대표적이지만 다른 방식도 여러가지 있는 것으로 알고 있다.
이런 방식은 클라우드 환경이 아닌, 물리적인 서버로 서비스를 운영하는 상황에서도 사용할 수 있을 것이다.
v2 버전 1개 v1 버전 2개인 서버가 생기지 않냐?
맞다. 이것이 롤링 배포의 단점에 해당된다.
청록색 배포는 원래 환경과 복제 환경을 갖는 것으로 시작됩니다. 이렇게 하면 새 애플리케이션을 동시에 배포하는 동안 이전 환경을 보존할 수 있습니다.
트래픽을 한번에 구버전에서 신버전으로 옮기는 방법이다.
Blue와 Green의 서버를 동시에 나란히 구성해둔 상태로 배포 시점에 로드 밸런서가 트래픽을 Blue에서 Green으로 일제히 전환시킨다. Green 버전 배포가 성공적으로 완료 되었고, 문제가 없다고 판단했을 때에는 Blue 서버를 제거할 수 있다. 혹은 다음 배포를 위해 유지해둘수 있다.
카나리 단어의 유래 : 예전 광부들이 가스에 예민한 카나리아 새를 활용하여 가스 누출을 감지했다는 이야기에서 유래되었다.
카나리 배포는 애플리케이션이 소규모 배치로 배포되는 경우입니다. 초기에 배포되면 소수의 사람들에게만 적용됩니다. 그런 다음 단계적 릴리스에서 점진적으로 배포가 계속됩니다.
위 gif처럼 점진적으로 v1 -> v2로 옮겨가는 것이다.
기본적으로는 롤링 배포 방식과 비슷한 부분이 있다. 그렇지만 카나리 배포의 핵심은 새로운 버전에 대한 오류를 조기 감지하는 것이다.
소수 인원에 대해서만 트래픽을 새로운 버전에 옮겨둔 상태에서 서비스를 운영한다.(오류를 감지하기 위해)
새로운 버전에 이상이 없다고 판단하였을 경우에 모든 트래픽을 신규 버전으로 옮긴다. 이때, 트래픽을 새로운 버전으로 옮기는 기준은 정해진 규칙(특정 유저 등) 혹은 랜덤이다.
Hi all! I am a website designer, and I would like to advise you to pay attention to https://flipabit.dev/. I used their services when creating my website, and I was very satisfied. You can implement any design idea there, and their functional interface makes it easy to work with projects. I recommend them!