다운타임(Downtime)과 무중단 배포(Zero Downtime Deployment)

갱갱갱갱
3 min read

다운타임이란?

다운타임(Downtime)은 서버나 애플리케이션이 정상적으로 서비스를 제공하지 못하는 시간입니다.

사용자가 서비스에 접속할 수 없거나 요청이 실패하는 상태가 되면 다운타임이 발생했다고 합니다.

이 글에서는 서비스 중단 없이 배포하는 전략을 설명합니다.

다운타임의 주요 원인

  1. 배포 / 서버 재시작

    • 애플리케이션 업데이트 시 기존 서버를 중단하고 새 서버를 올리는 동안 공백이 발생
  2. 장애 및 오류

    • 서버 다운, 네트워크 문제, DB 장애 등으로 서비스 불가 상태 발생
  3. 인프라 작업

    • 서버 점검, 네트워크 변경, 스케일링 중 일시적 중단

다운타임의 문제점

  1. 서비스 접속 불가 → 사용자 경험 저하

  2. 결제 / 주문 서비스의 경우 → 직접적인 매출 손실

  3. 요청 중단으로 인한 데이터 정합성 깨짐


다운타임을 줄이기 위한 방법 : 무중단 배포 (Zero Downtime Deployment)

무중단 배포는 애플리케이션을 배포하는 동안에도 서비스가 중단되지 않도록하는 배포 방식으로, 사용자는 서버가 배포 중이라는 사실을 인식하지 못하고 서비스를 계속 이용할 수 있습니다. 무중단 배포를 위해서는 최소 2대 이상의 서버 또는 환경이 필요합니다.

이 과정에서 로드 밸런서(Load Balancer) 는 매우 중요한 역할을 합니다.

로드 밸런서는 트래픽을 여러 서버에 분산시키는 장치로, 배포 중 다운타임을 막기 위해 정상 서버만 트래픽을 받도록 라우팅합니다.


무중단 배포의 대표적 전략

1. Blue-Green Deployment

✔️ 개념

  • 두 개의 환경(Blue: 현재 버전 / Green: 새 버전)을 동시에 유지

  • 로드 밸런서는 초기에는 Blue 환경에만 트래픽 전달

  • Green 환경에서 새 버전을 배포하고 테스트 후, 로드밸런서 트래픽을 한 번에 Green으로 전환

  • 문제가 생기면 Blue로 빠르게 롤백 가능

장점

  • 빠른 롤백: 로드 밸런서만 전환하면 즉시 기존 환경으로 복구 가능

  • 안정성 높음: 두 환경이 완전히 분리돼 있어 테스트와 배포 안전성 확보

단점

  • 리소스 2배 필요: Blue/Green 환경을 동시에 유지해야 하므로 인프라 비용 증가

  • DB 동기화 문제: 스키마 변경 시 두 환경 간 데이터 일관성 관리 복잡

  • 트래픽 전환 순간의 세션 관리 필요: 스위칭 시 세션 유지 전략 필요


2. Rolling Update

✔️ 개념

  • 서버 인스턴스를 하나씩 업데이트 하면서 점진적으로 새 버전으로 교체

  • 로드 밸런서는 업데이트 중인 서버를 헬스 체크에서 제외해 트래픽 전달을 막고, 완료 후 다시 등록

  • 항상 일부 인스턴스는 기존 버전을 유지 → 다운타임 없음

장점

  • 리소스 효율적: Blue-Green처럼 환경을 2개 유지할 필요 없음

  • 점진적 배포: 일부 서버부터 업데이트해 문제가 발생하면 빠르게 중단 가능

  • 자동화 용이: Kubernetes, AWS 같은 오케스트레이션 도구에서 기본 제공

단점

  • 롤백 속도 느림: 전체 서버 중 일부가 이미 새 버전으로 바뀌면 되돌리는 데 시간 필요

  • 새 버전과 구 버전 공존: 배포 중에는 두 버전이 동시에 존재 → 호환성 문제 가능

  • 트래픽 분산 주의: 업데이트 중 서버 수가 줄어들면 트래픽이 몰려 부하 발생 가능


3. Canary Deployment

✔️개념

  • 로드 밸런서 또는 트래픽 라우팅 규칙을 이용해 일부 사용자/트래픽에게만 새 버전으로 전달

  • 문제가 없으면 점진적으로 전체로 확장

  • 문제 발생 시 영향 범위 최소화 가능

장점

  • 위험 최소화: 일부 트래픽에게만 새 버전을 먼저 적용 → 문제 발생 시 영향 최소

  • 실제 트래픽 테스트: 실제 사용자 환경에서 새 버전을 테스트 가능

  • 확장성 높음: 안정성 확인 후 단계적으로 100% 배포 가능

단점

  • 설정 복잡: 특정 사용자 그룹에게만 새 버전 라우팅하는 로직 필요

  • 롤백 시 복잡성: Canary 버전에서 발생한 데이터를 기존 버전과 동기화해야 할 수도 있음

  • 장시간 모니터링 필요: 단계적으로 배포하므로 지속적인 관찰 필요

출처:https://2cloud.io/blog/zero-downtime-during-deployment

0
Subscribe to my newsletter

Read articles from 갱갱 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

갱갱
갱갱