프로젝트를 진행하면서 서버에 새로운 버전을 배포할 때마다 서버의 다운타임이 발생하여 이를 없애기 위해 무중단 배포를 적용해달라는 요청을 받았다.
이를 적용하기 위해 무중단 배포가 무엇인지, 어떠한 방법으로 해야하는지 학습을 해보고 직접 적용을 해보기로 하였다.
이번 글에서는 학습한 내용에 대한 정리를 해보겠다.
무중단 배포란?
- 무중단 배포 방식은 중단 배포와 달리 서비스와 고객에게 부정적인 영향을 최소화하는 좋은 대안
- 서비스 장애와 배포의 부담을 최소화하기 위해 운영 중인 서비스를 중단하지 않고 신규 소프트웨어 서비스를 배포하는 기술
- 무중단 배포의 핵심은 로드밸런서를 통해 연결된 두 개 이상의 인스턴스에 트래픽을 제어해 배포하는 것

즉 위의 그림처럼 로브밸런서가 새로 올린 배포가 사용이 가능해졌을 때 트래픽을 보내 다운타임을 없애는 방법이라고 보면 편할 거 같다. (이전까지는 구버전 서버로 트래픽을 보냄)
무중단 배포의 종류
롤링(Rolling) 배포
- 트래픽을 점진적으로 구버전에서 신버전으로 옮기는 방식
- 서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅하지 않도록 하고, 새 버전을 적용하여 다시 라우팅 -> 반복
- 상황에 따라 손쉽게 롤백 가능 but 구버전과 신버전 공존으로 호환성 문제가 발생할 수 있음

blue/green 배포
- 실제로 서비스 중인 환경(구버전) blue와 새롭게 배포할 환경(신버전) green을 세트로 준비해서 배포하는 방식
- 신버전을 배포하고 일제히 전환하여 모든 연결을 신버전을 바라보게 하는 전략(트래픽이 일제히 전환)
- 빠른 롤백이 가능(그린, 블루가 항상 있기 때문) / 실제 환경에서 신버전 미리 테스트가 가능
- 블루 그린 배포를 위해서는 시스템 자원이 두배로 필요하여 비용이 더 많이 발생할 수 있음

카나리(Canary) 배포
- 잠재적 문제 상황을 미리 발견하기 위한 방식
- 지정한 서버 또는 특정 user에게만 배포했다가 정상적이면 전체 배포 -> 신버전 제공 범위를 늘려가면 모니터링 및 피드백 가능
- 실제 환경에서 신버전 미리 테스트가 가능하다는 blue/green과 유사 but 단계적인 전환 방식을 통해 부정적 영향 최소화, 상황에 롤백 가능
- 롤링과 마찬가지로 신·구 두버전이 운영되기 때문에 버전 관리가 필요

3가지 방법 이외에도 있긴 하지만 대표적인 방법들은 위의 방법들이라고 한다. 그중 특히 찾아보면 blue/green 배포를 가장 많이 사용을 하고있는 것으로 보인다. 그렇기 때문에 다음 글에서 직접 현재 내가 진행 중인 프로젝트에 blue/green을 적용해서 무중단 배포를 수행해보도록 하겠다.