✏️ 무중단 배포 전략(Zero-downtime Deployment)

박상민·2024년 5월 18일
0

개념 정리!

목록 보기
13/18

이번에는 무중단 배포에 대해서 글을 작성해보려고 한다.

⭐️ 무중단 배포란?

무중단 배포를 알아보기 위해서 무중단 배포를 사용하지 않는 경우를 보자.

무중단 배포를 사용하지 않을 경우
실제 서비스를 서버 1개만을 사용해 운영한다고 가정해보자.
현재 서비스 중인 서비스는 V1 버전을 배포하고 있다.
기능을 추가로 개발해서 서비스 버전을 V2로 변경해서 배포하려고 한다.

새로운 버전 V2를 배포하기 위해서는 V2 버전의 빌드 파일을 서버에 배포를 해야한다.
현재 운영중인 서버는 1대뿐이기 때문에 V1과 V2는 서로 같은 포트를 사용한다. 따라서 V2 버전으로 변경해서 배포하기 위해서는 현재 배포중인 V1 버전의 서비스를 종료해야한다.

문제점?
이런 경우 문제점이 무엇일까?


이 짤로 문제점을 설명할 수 있다.
위 상황처럼 서비스를 사용하던 중 갑자기 서비스가 중단된다면?
PC방을 이용하던 사람들의 폭력성을 시험하던 것과 마찬가지로 클라이언트의 폭력성을 체험하는 계기가 될 것이다.

무중단 배포
무중단 배포란 말 그대로 서비스가 중단되지 않은 상태로 새로운 버전을 배포하는 것이다.
서비스가 계속 운영되는 상태에서 새로운 버전의 어플리케이션을 배포하는 과정에서 시스테 가동시간을 최소화하여 사용자에게 생기는 불편함(다운타임)이 없는 방식이다.

⭐️ 무중단 배포 전략

무중단 배포 전략에는 대표적으로 3가지가 있다.

📌 Blue/Green 배포

이전 버전과 새로운 버전의 서버를 공통 로드 밸랜서 하에 동시에 운영하기 위해 두 개의 독립적인 환경(블루 환경, 그린 환경)을 이용하는 전략이다.

이 방식은 트래픽을 한 번에 구버전에서 신버전으로 옮긴다.

  • Blue: 현재 운영적인 서비스
  • Green: 새롭게 배포할 환경

로드 밸런서
로드 밸런서는 서버 앞에 앉아 있는 "교통 경찰" 역할을 하며 속도와 용량 활용도를 최대화하고 어느 한 서버도 과로하지 않도록 하여 성능을 저하시킬 수 있는 방식으로 이러한 요청을 이행할 수 있는 모든 서버에 클라이언트 요청을 라우팅한다. 단일 서버가 다운되면 로드 밸런서는 나머지 온라인 서버로 트래픽을 리디렉션한다. 새 서버가 서버 그룹에 추가되면 로드 밸런서가 자동으로 해당 서버에 요청을 보내기 시작한다.


Blue에서 서비스가 정상 가동 중일 때 새로운 버전은 Green에 배포한다.
배포가 완료되면, 로드 밸런서가 Green으로 트래픽을 전환하고, Blue 서비스는 종료된다.

만약, 이전 버전에 문제가 발생 시 빠르게 로드 밸런서를 통해 블루 환경으로 롤백이 가능하다.

장점

  • 트래픽을 모두 새로운 버전으로 옮기기 때문에 호한성 문제가 발생하지 않는다.

단점

  • 실제 운영에 필요한 서버 리소스 대비 2배의 리소스를 확보해야한다.

📌 Rolling 배포

서비스 중인 인스턴스 하나를 로드 밸런서에서 라우팅하지 않도록 떼어낸다. (이렇게 되면 해당 서버에는 트래픽이 도달하지 않게 된다.)

이 상태에서 해당 서버의 애플리케이션을 새 버전으로 교체한다.


이 과정을 모든 서버가 새로운 버전으로 교체되도록 돌아가면서 반복한다.

장점

  • 많은 서버 자원을 확보하지 않아도 무중단 배포가 가능하다.
  • 인스턴스마다 차례로 배포를 진행하기 때문에 배포로 인한 위험이 줄어든다.

단점

  • 새 버전을 배포할 때 배포 도중 서비스 중인 인스턴스 수가 줄어, 각각의 서버가 부담하는 트래픽 양이 증가한다.
  • 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.

📌 Canary 배포

Canary 전략은 위험을 빠르게 감지하는 배포 전략이다.

이전 버전과 새로운 버전이 동시에 가동되는 방식으로, 새 버전의 인스턴스는 일부 사용자에게만 서비스하고, 나머지 사용자는 기존 버전을 사용한다.

새 버전이 정상적으로 작동함을 확인하면 전체 트래픽을 새 버전을 전환한다.
만약 오류가 발생한다면, 일부 사용자에게서 오류를 조기에 감지해 큰 위험을 방지할 수 있다.

장점

  • 실제 사용자 테스트와 무중단 배포를 동시에 할 수 있다.
  • 새로운 버전으로 인한 위험을 최소화 할 수 있다.

단점

  • 롤링 배포와 마찬가지로 두 버전이 함께 존재하기 때문에 호환성 문제가 발생할 수 있다.

출처
https://hstory0208.tistory.com/entry/무중단-배포란-무중단-배포-전략에-대해-알아보자
https://hudi.blog/zero-downtime-deployment/
https://velog.io/@nandong1104/무중단-배포를-알고-계신가요#용어-정리
https://www.samsungsds.com/kr/insights/1256264_4627.html
https://www.youtube.com/watch?v=HKkhD6nokC8
https://www.youtube.com/watch?v=6SvUZqbU37E
https://www.youtube.com/watch?v=sIPU_VkrguI

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글