본문 바로가기
카테고리 없음

서버 무중단 배포 전략

by 서버의달인 2025. 6. 10.

 

배포를 하는 중 이슈가 생겨 서비스가 운영 중 잠시라도 중단된다면, 사용자는 불편을 겪게 되며, 서비스 신뢰도까지 타격이 생깁니다. 특히 실시간이면서 24*365 서비스일수록 무중단 배포(Zero Downtime Deployment)는 필수입니다. 이번 포스팅에서는 무중단 배포의 핵심 개념과 다양한 전략을 기술해보겠습니다.

 

1. 무중단 배포란?

무중단 배포란, 기존 서비스를 중단하지 않고 새로운 버전의 애플리케이션을 배포하여, 사용자가 배포 과정을 인식하지 못하도록 하는 배포 방식입니다. 서버를 재시작하거나 트래픽이 일시적으로 차단되는 기존 방식과 달리, 무중단 배포는 사용성과 안정성을 모두 보장합니다.

무중단 배포의 필요성

  • 24시간 운영되는 서비스의 안정성 확보
  • 사용자 경험(UX) 보호
  • 서비스 장애 가능성 최소화
  • 배포 후 문제가 생겨도 빠른 롤백 가능

무중단 배포는 단순히 애플리케이션 배포로만 그치는 것이 아니라, 서비스 장애 상황을 가정하여 대비책을 가지고 있어야하며, 빠르게 롤백할 수 있어야 합니다. CI/CD 자동화 파이프라인을 구성하는 가장 큰 이유 중 하나가 롤백이 쉽다는 점입니다.

2. 주요 무중단 배포 전략

운영자들은 다양한 무중단 배포 방식을 가지고 있으며, 대표적인 전략을 살펴보겠습니다.

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

두 개의 환경(블루와 그린)을 만들어, 하나는 현재 운영 중이고 다른 하나는 대기 상태로 두었다가 새 버전을 배포하는 것입니다. 배포 후 트래픽을 새 환경으로 전환하면 됩니다.

  • 롤백이 매우 빠름
  • 운영 환경과 배포 환경이 완전히 분리되어 안전함
  • 다만, 서버 리소스가 두 배로 필요

2-2. 롤링 배포 (Rolling Deployment)

여러 서버 중 일부만 교체하면서 순차적으로 배포하는 방식입니다. 최소한의 서버만 먼저 배포한 후 이슈가 없으면 점차 배포 대수를 늘려가는 방식으로 사용됩니다.

  • 리소스 효율적 사용
  • 점진적 배포로 위험도 분산
  • 중간에 문제가 발생하면 롤백이 까다로울 수 있음

2-3. 카나리 배포 (Canary Deployment)

전체 사용자 중 일부에게만 새로운 버전을 제공하고, 문제가 없으면 점차 확장하는 방식입니다. 트래픽 분할이 가능해야 하며, 사용자 그룹 분리가 필요합니다.

  • 실제 사용자 환경에서 안정성 검증
  • 문제 발생 시 빠른 중단 가능
  • 분기 처리 및 테스트 구조가 복잡할 수 있음

3. 로드밸런서와의 연계

무중단 배포에서 순차적으로 배포를 하기 위해서는 로드밸런서가 반드시 있어야합니다. 서버 교체나 애플리케이션 재시작이 발생하더라도, 로드밸런서가 이슈있는 서버를 다운시켜 자동으로 정상 서버로만 트래픽을 보내게 구성해야 합니다.

헬스 체크 설정 예시 (Nginx)

upstream backend {
    server 192.168.0.10 max_fails=3 fail_timeout=10s;
    server 192.168.0.11 max_fails=3 fail_timeout=10s;
}
  

health check를 통해 응답이 없는 서버는 자동으로 제외되며, 배포 중인 서버에 트래픽이 전달되지 않도록 할 수 있습니다.

자동화 예시

무중단 배포를 위해 Jenkins, GitHub Actions, GitLab CI 등을 사용해 CI/CD 파이프라인을 구축하면 다음과 같은 흐름을 구성할 수 있습니다.

  1. 코드 변경 → 테스트 → 이미지 빌드
  2. 스테이징 서버에 배포 및 헬스 체크
  3. 로드밸런서 설정 변경 → 트래픽 전환
  4. 이전 버전 서버 정리

4. 컨테이너 기반 무중단 배포 (Docker + Compose)

Docker와 Docker Compose를 사용하면 컨테이너 단위로 배포를 진행하고, 빠르게 롤백하거나 스위칭할 수 있습니다.

Zero Downtime 배포 예시 (docker-compose)

docker-compose -f docker-compose.yml up -d --build
  

신규 배포를 하는 과정에서 기존 컨테이너가 종료되면서 새 컨테이너로 교체되지만, Nginx 등과 연결되어 있다면 사용자에게는 끊김 없이 서비스가 제공됩니다.

 

5. 무중단 배포 시 고려할 요소

  • 세션 관리: 세션이 서버에 저장된다면 로드밸런서에서 session stickiness 필요
  • DB 마이그레이션: 스키마 변경 시 구버전 호환 고려 필요
  • 캐시: 캐시 서버 또는 CDN에서 구버전 콘텐츠 제공 가능성
  • 모니터링: 배포 이후 에러, 트래픽, 응답 시간 즉시 확인
  • 롤백 전략: 문제 발생 시 즉시 되돌릴 수 있는 계획 수립

무중단 배포는 단순히 중단 없이 새 버전을 올리는 것이 아니라, 서비스 안정성 전체를 통합적으로 관리하는 전략이 반드시 필요합니다.

 

 

사용자가 증가하고, 서비스 가용성이 중요한 서비스일수록 무중단 배포가 중요해집니다. 컨테이너 및 클라우드 인프라를 활용하면 가용성을 높이고, 위험성을 줄이면서 무중단 배포 체계를 구축할 수 있습니다.