[CI/CD] 무중단 배포 전략

General Dong·2024년 11월 12일
0

CI/CD

목록 보기
7/12
post-thumbnail

무중단 배포란

만약 무중단 배포를 적용하지 않는 서비스를 이용할 경우, 사용자는 서버가 다시 배포될 때마다 제대로 이용할 수 없게 된다.
이러한 문제점을 해결하고자 배포 시 중단이 되지 않는 무중단 배포를 적용함으로써 해결할 수 있다.

무중단 배포는 애플리케이션이 가동 중인 상태에서 새 버전으로 업데이트하여 사용자에게 서비스 중단을 최소화하거나 없애는 배포 방식이다.
기존 버전과 새 버전을 동시에 운영하거나, 요청을 전환하며 사용자는 중단 없이 서비스를 이용할 수 있다.

무중단 배포 전략

무중단 배포는 크게 3가지의 전략이 있다.

Rolling 배포

롤링 배포는 여러 어플리케이션 인스턴스를 점진적으로 새 버전으로 교체하는 방식이다.

동작 방식

  1. 순차적 교체 : 한 번에 한 인스턴스씩 교체하여 트래픽을 새 버전으로 점진적으로 전환한다.
  2. 확장과 축소를 반복 : 기존 인스턴스 수를 줄이면서 새로운 인스턴스를 증가시키는 식으로 교체한다.
  3. 작동 중인 인스턴스 유지 : 기존 버전과 새 버전이 동시에 존재하면서, 사용자는 중단 없이 계속 서비스에 접근할 수 있다.

장점

  • 점진적으로 교체가 일어나 롤백을 쉽게 처리할 수 있다.
  • 서버 자원이 한정적일 때도 무중단 배포가 가능하다.

단점

  • 교체 시 잠깐 인스턴스가 줄어들어 서버의 부담이 증가된다.
  • 배포 중에는 구 버전과 신 버전이 동시에 존재하기 때문에 호환성 문제가 발생할 수 있다.

사용 사례

주로 Kubernetes 환경에서의 Pod 배포나 VM 교체를 위해 사용되며, 배포 시간이 길더라도 가용성을 유지해야 할 때 적합하다.

* Pod : 하나 이상의 컨테이너를 묶어서 실행하는 논리적 단위이며, 동일한 네트워크 환경과 스토리지를 공유한다.

Blue-Green 배포

블루 그린 배포는 현재 서비스 중인 버전을 블루(Blue), 새 버전을 그린(Green) 환경으로 분리하여, 그린 버전이 준비되면 트래픽을 그린으로 전환하는 방식이다.

동작 방식

  1. Blue 환경(현재 버전)Green 환경(새 버전)을 각각 독립적으로 준비한다.
  2. 그린 환경이 준비되면 트래픽을 블루에서 그린으로 전환하여 새로운 버전을 사용자에게 제공한다.
  3. 문제가 발생하면 즉시 블루 환경으로 트래픽을 되돌려 빠르게 롤백할 수 있다.

장점

  • 문제가 발생하면 빠르게 이전 버전으로 롤백할 수 있다.
  • 배포 중에도 기존 블루 버전이 독립적으로 운영되므로, 서비스 중단 위험이 낮다.

단점

  • 두 버전의 환경을 동시에 유지해야 하므로, 자원이 추가로 필요하다.
  • 데이터베이스 스키마와 같은 공용 자원는 버전별로 분리하기 어렵다.

사용 사례

주로 고가용성이 필수적인 서비스나 금융, 의료 분야처럼 사용자 서비스 중단이 민감한 환경에서 사용된다.

Canary 배포

카나리 배포는 새 버전을 소수의 사용자에게 먼저 제공하여, 점진적으로 전체 사용자에게 배포하는 방식이다.
초기에는 소수의 인스턴스에만 새 버전을 배포하고, 문제가 없으면 점차 배포 대상을 늘린다.

동작 방식

  1. 소수의 인스턴스에 새 버전 배포 : 초기에는 새 버전을 적은 인스턴스에서만 실행하여 일부 사용자에게만 노출한다.
  2. 문제 모니터링 : 서비스 문제, 사용자 피드백, 성능 등을 모니터링하여 안정성을 검증한다.
  3. 검증을 마치면 전체 인스턴스로 점진적 확대하여 전체 사용자가 새 버전을 사용하게 한다.

장점

  • 초기 단계에서 문제가 발생하면 쉽게 롤백할 수 있다.
  • 새 버전의 안정성을 소규모 사용자 대상으로 검증하여 서비스 품질을 유지할 수 있다.

단점

  • 초기 배포와 롤백에 대한 모니터링과 자동화가 필요하여, 구성과 운영이 다소 복잡할 수 있다.
  • 사용자에게 일관된 경험을 제공하기 어렵다.

사용 사례

신규 기능 출시대규모 업데이트에서 사용되며, 주로 Netflix와 같은 대규모 서비스에서 사용자 반응을 확인하기 위해 적용된다.


참고

Performing a Rolling Update | Kubernetes Docs
Blue Green Deployments vs Rolling Deployments? | Stack overflow
Scalability concepts: zero-downtime deployments | gif 출처
Automated Canary Analysis at Netflix with Kayenta | Netflix Technology Blog
무중단 배포 아키텍처(Zero Downtime Deployment)- 글로벌 서비스 운영의 필수 요소 | Samsung SDS 김지명
✏️ 무중단 배포 전략(Zero-downtime Deployment) | 박상민

profile
개발에 대한 기록과 복습을 위한 블로그 | Back-end Developer

0개의 댓글