본문 바로가기

DevOps

[DevOps] 배포 전략에 대해서 알아보자

새로운 기능을 완료하고 테스트를 완료 후 운영 서버에 배포를 완료했습니다. 구현한 기능이 문제 없이 동작하는 지 확인하려고 운영서버에 들어가서 확인하던 중 버그를 발견하고 급하게 수정했습니다. 수정 내용을 바로 업데이트하려고 했지만, 업데이트를 하는 동안 어플리케이션이 빌드되고 실행되면 서비스가 잠깐 멈추기 때문에 업데이트를 진행할 수 없었습니다. 서비스가 중단 되지 않고 배포할 수 있는 방법이 없을까? 에 대한 의문을 가지게 되었고 여러가지 방법이 있어 정리해보고 프로젝트에도 적용시켜보려고 합니다.

먼저 배포를 진행하려면 어떤 과정이 필요할까?

  1. 새롭게 구현된 기능을 빌드하고 배포하려고 하는 서버에 다운로드를 받아야 합니다.
  2. 현재 실행중인 프로세스를 종료하고 새롭게 빌드한 배포 파일을 실행해야 합니다.
  3. 배포 파일이 실행되고 나면 정상적으로 서비스를 사요할 수 있습니다.

무중단 배포?

무중단 배포 (Zero-Downtime Deployment)는 어플리케이션을 업데이트할 때 서비스 중단 없이 새로운 버전을 배포하는 방법입니다. 사용자는 배포 중에도 기존 서비스와 동일한 방식으로 어플리케이션을 이용할 수 있습니다.

무중단 배포의 핵심 개념

  1. 트래픽이 끊기지 않는다.
    • 배포 중에도 사용자는 서비스를 계속 이용 가능합니다.
    • 요청이 끊기거나 장애가 발생하지 않도록 설계된다.
  2. 순차적 콜아웃
    • 기존 서버 또는 컨테이너에서 실행 중인 어플리케이션을 유지하면서 새로운 버전 점진적 교체합니다.
  3. 롤백 가능
    • 배포 도중 문제가 발생하면 신속하게 이전 버전으로 복구 가능합니다.
    • 데이터베이스 변경이 포함되면 롤백이 어려울 수 있습니다.

롤링(Rolling) 배포

특징

한 번에 전체 서버를 교체하는 것이 아니라, 일부 인스턴스를 교체한 후 정상 작동하면 점진적으로 업데이트하는 방식입니다.

예시

2대의 서버 중 1대 부터 업데이트를 진행합니다. 이 때 로드 밸런서에서 업데이트하려고 하는 서버를 떼어내고 업데이트를 진행합니다. 전체 서버가 업데이트 될 때까지 나머지 서버도 순차적으로 교체합니다.

장점

많은 인스턴스를 확보하지 않아도 무중단 배포가 가능합니다.

트래픽을 점진적으로 분산하여 배포 중에도 서비스가 가능합니다.

단점

배포 중 서비스 중인 서버가 줄어들게 되면서 서버가 부담하는 트래픽이 증가하게 됩니다.

구버전과 신버전의 어플리케이션이 동시에 서비스가 되기 때문에 호환성 문제가 발생할 수 있습니다.

Blue-Green 배포

특징

두 개의 환경(Blue와 Green)을 운영합니다. 현재 사용 중인 환경(Blue), 신규 배포 환경(Green)을 번갈아 가면서 배포하는 방식입니다.

예시

기존 서비스 (Blue) 실행 중이고, 새로운 버전 (Green) 배포 후에 테스트를 진행한다.

로드 밸런서가 트래픽을 Blue에서 Green으로 일제히 전환시킨다.

Green 버전 배포가 성공적으로 완료 되었고, 문제가 없다고 판단했을 때에는 Blue 서버를 제거하거나 다음 배포를 위해 유지합니다.

장점

롤링 배포와 달리 한 번에 트래픽을 모두 새로운 버전으로 옮기기 때문에 호환성 문제가 발생하지 않는다.

배포 후 문제가 발생하면 즉시 롤백 가능합니다.

단점

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

두개의 환경을 유지해야 하므로 인프라 비용이 증가합니다.

카나리(Canary) 배포

특징

점진적으로 구버전에 대한 트래픽을 신버전으로 옮기는 것은 롤링 배포 방식과 비슷하다. 한 번에 전체 인스턴스를 교체하는 것이 아니라, 일부 인스턴스를 교체한 후 정상 작동하면 점진적으로 업데이트 하는 방식입니다.

예시

일부 사용자에게 새 버전 배포 후 점진적 확장하는 방식으로, 새로운 버전에 대한 오류를 조기에 감지하는 방법입니다. 새로운 버전에 이상이 없다고 판단하였을 경우 모든 트래픽을 신규 버전으로 옮깁니다.

장점

트래픽을 점진적으로 분산하여 배포 중에도 서비스가 가능합니다.

새로운 버전으로 인한 위험을 최소화 할 수 있습니다.

단점

롤링 배포와 마찬가지로 신/구 /버전의 어플리케이션이 동시에 존재하기 때문에 호환성 문제가 발생할 수 있다.

어떤 배포 전략을 선택해야 할까?

다양한 환경에 맞게 적절한 배포 방식을 선택하는 것이 중요합니다.

1. Blue-Green Deployment (블루-그린 배포)

  • 빠른 롤백이 필요할 때 (문제 발생 시 즉시 이전 버전으로 전환 가능)
  • 서비스 중단 없이 한 번에 배포해야 할 때
  • 인프라 비용을 감당할 수 있을 때

2. Canary Deployment (카나리아 배포)

  • 새 버전을 일부 사용자에게 먼저 배포하고 테스트하고 싶을 때
  • 배포 중에도 실시간으로 피드백을 받고 싶을 때
  • 문제가 생기면 빠르게 원래 버전으로 돌아가야 할 때

3. Rolling Deployment (롤링 배포)

  • 서버를 하나씩 점진적으로 교체하며 배포하고 싶을 때
  • 트래픽을 분산하면서 부하를 최소화해야 할 때
  • 마이크로서비스 환경에서 개별 서비스만 업데이트할 때

마무리

오늘은 무중단 배포에 대해서 알아봤습니다. 배포 전략들을 실제 서비스에 적용해보고 과정과 후기를 공유하고자 합니다.

참고

https://hudi.blog/zero-downtime-deployment/