etc.

[DevOps/Infra] 무중단 배포란?(Rolling, BlueGreen, Canary)

토발자 2024. 1. 15. 15:30
반응형

현재 재직 중인 회사는 사실 아직 무중단 배포 환경이 아니다.

빌드 후 생성된 jar나 war를 직접 수동으로 배포하기 위해 서비스의 중단이 필연적인 상황이다.

서비스 이용자가 늘어나고 비즈니스 로직 추가 및 수정에 빈번하게 일어나며 무중단 배포에 대한 필요성을 더욱 절실히 느끼고 있다.

기회가 된다면 무중단 배포 환경을 만들어보고 싶은데..우선 공부를 해야한다.(당연히)

 

우선 무중단 배포에 대해서 알아보자.


 

무중단 배포란?

무중단, 말 그대로 서비스의 중단 없이 새로운 버전의 소프트웨어를 배포하는 것을 말한다.

앞서 말했듯 서비스를 운영 중일 때 새로운 버전을 배포하기 위해서는

  1. 기존의 서비스를 종료하고
  2. 새로운 서비스를 시작하는

과정이 필요하다.

이렇게 서비스가 중단되는 시간, 즉 시스템을 이용할 수 없는 시간을 다운타임(Downtime)이라고 한다.

운영 중인 서비스가 중단되어 이용할 수 없다는 것은..큰 문제이다.

 

이를 해결할 수 있는 방법이 바로 무중단 배포이다.

 

 

무중단 배포 방식

무중단 배포에는 Rolling, Blue Green, Canary 라고 하는 3가지 방식이 있다.

 

Rolling 배포

Rolling 배포는 사용 중인 인스턴스들에 새 버전의 서비스를 점진적으로 배포하는 방법으로 무중단 배포의 가장 기본적인 방식이다.

서비스 중인 인스턴스 하나를 로드 밸런서에서 라우팅하지 않도록 한 뒤, 새로운 버전의 서비스를 적용하여 다시 라우팅하도록 한다.

이를 반복해 모든 인스턴스에 새 버전의 서비스를 배포한다.

 

장점

  • 인스턴스마다 차례로 배포를 진행하기 때문에 에러 등 이슈 발생 시 쉽게 롤백 가능하다.
  • 기존의 인스턴스에 추가적인 인스턴스를 늘리지 않아도 된다.
  • 관리에 용이하다.

 

단점

  • 새 버전을 배포할 때 라우팅되어 있는 인스턴스의 수가 감소하기 때문에 정상 동작 중인 인스턴스에 트래픽이 몰릴 수 있다.
  • 라우팅되어 있는 인스턴스들의 서비스 처리 용량을 고려해야 하는 이유이다.
  • 배포가 진행될 때 기존의 버전과 새로운 버전이 함께 존재하기 때문에 호환성 문제가 발생할 수 있다.

 

 

Blue Green 배포

배포 전

 

배포 후

Blue는 기존 버전, Green은 새로 배포될 버전을 의미한다.

신 버전을 배포하고 일제히 전환하여 모든 연결이 신 버전을 바라보게 하는 전략이다.

운영 중인 구 버전과 동일한 신 버전의 인스턴스를 나란히 구성한 후 배포 시점에 로드 밸런서를 통해 모든 트래픽이 일제히 전환된다.

 

장점

  • 구 버전의 인스턴스가 그대로 남아있어서 빠른 롤백이 가능하다.
  • 운영 환경에 영향을 주지 않고 새 버전 테스트가 가능하다.
  • 구 버전의 환경을 다음 배포에 재사용할 수 있다.

 

단점

  • 시스템 자원이 두 배로 필요해 비용이 더 많이 발생한다.

 

 

Canary 배포

카나리 배포에 대해 설명하기 전 카나리에 대한 어원을 알아보자.

Canary의 사전적 의미에는 카나리아라는 새가 있다. 이 새는 유독가스에 민감해 옛날 광부들이 광산에서 가스 누출 위험을 감지하는 용도로 사용했다고 한다.

 

여기서 유래한 카나리 배포 또한 잠재적 문제 상황을 미리 발견할 수 있는 배포 전략이다.

지정한 서버 또는 특정한 유저에게만 배포했다가 정상적이면 전체를 배포한다. 서버의 트래픽을 일부 신 버전으로 분산시켜서 오류 여부를 확인할 수 있는 것이다.

블루 그린 배포와 유사한 듯 보이지만, 블루 그린과 같이 트래픽을 한 번에 바꾸는 것이 아니라, 단계적으로 전환한다.

 

장점

  • 문제 상황을 빠르게 감지할 수 있어, 성능 모니터링에 유용하다.
  • A/B 테스트가 가능하다.
    • A/B 테스트 : 대조군과 실험군으로 나누어서 특정한 UI나 알고리즘의 효과를 비교하는 방법론

 

단점

  • 네트워크 트래픽 제어에 부담이 될 수 있다.
반응형