본문 바로가기

Backend/Study

[Study] 서버 다운 없이 배포하는 방법 (무중단 배포)

반응형

0. 배포의 중요성

서비스가 성장할수록 “배포”는 더 중요해집니다. 특히, 사용자가 많은 서비스는 배포 순간의 서버 다운타임조차 큰 장애로 이어질 수 있습니다. 이번 글에서는 배포 방식의 종류, 무중단 배포의 장점, 그리고 무중단 배포 방법과 예제를 정리해보겠습니다.


1. 배포의 종류

배포 방식 특징 장점 단점
수동 배포 서버에 직접 들어가서 코드 교체 후 재시작 단순, 작은 프로젝트에 적합 다운타임 발생, 자동화 부족
Rolling Update 서버를 하나씩 교체하면서 배포 다운타임 최소화 오래 걸릴 수 있음
Blue-Green 기존 서버(Blue)와 새로운 서버(Green)를 준비 후 전환 즉시 전환 가능, 빠른 롤백 서버 리소스 2배 필요
Canary 배포 일부 트래픽만 새 버전으로 보내 테스트 위험 최소화, 점진적 배포 설정 복잡, 모니터링 필수

2. 무중단 배포란?

무중단 배포(Zero-Downtime Deployment)란 사용자가 서비스를 이용하는 동안 서버가 중단되지 않고 배포가 이루어지는 방식을 말합니다.

- 무중단 배포의 장점

  • 사용자 경험 향상 → 장애 없는 안정적인 서비스 제공
  • 빠른 롤백 가능 → 문제 발생 시 즉시 이전 버전으로 전환
  • 배포 자동화와 연계 → CI/CD 파이프라인과 결합하여 효율성↑

3. 무중단 배포의 주요 방법

1) Rolling Update

  • 서버를 하나씩 순차적으로 업데이트
  • Kubernetes, AWS ECS 등에서 기본 제공
  • 다운타임은 거의 없지만 전체 배포 완료까지 시간이 오래 걸림

2) Blue-Green Deployment

  • Blue(현재 서비스 중) / Green(새 버전) 두 개의 환경 운영
  • 트래픽을 Green으로 전환하면 즉시 배포 완료
  • 문제 발생 시 Blue로 빠르게 롤백 가능
  • 단점: 서버 리소스가 2배 필요

3) Canary Deployment

  • 전체 트래픽 중 일부(예: 5%)만 새 버전으로 전달
  • 모니터링 결과 이상 없으면 점진적으로 100%까지 확장
  • 실서비스 환경에서 새 버전 테스트 가능
  • 단점: 설정/모니터링이 복잡

4) Load Balancer 기반 무중단 배포

  • Nginx, HAProxy, AWS ALB 등을 사용
  • 배포 시 새 서버를 추가 → 로드 밸런서에 연결
  • 구 서버는 연결 해제 후 종료 → 자연스럽게 무중단 배포 완성

4. 실전 예제 (Spring Boot + Nginx + Blue-Green 방식)

1) Nginx 설정 (두 개의 WAS 서버를 Blue/Green으로 운영)

upstream backend {
    server 127.0.0.1:8081; # Blue
    # server 127.0.0.1:8082; # Green
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

 

  • 현재는 Blue 서버(8081)만 연결된 상태.

2) Blue → Green 전환

  1. Green 서버(8082)에 새 버전 배포
  2. Nginx 설정 수정:
upstream backend {
    # server 127.0.0.1:8081; # Blue
    server 127.0.0.1:8082; # Green
}
  1. Nginx 설정 reload:

nginx -s reload

  1. 기존 Blue 서버는 종료 → 무중단 전환 완료 ✅

3) 장점

  • 다운타임 없이 배포 가능
  • 장애 시 Blue 서버로 즉시 롤백 가능
  • Nginx 로드밸런싱 기능 활용

5. 정리

  • 배포 방식은 수동/롤링/블루-그린/카나리 등 다양하며, 서비스 특성에 맞게 선택해야 합니다.
  • 무중단 배포는 사용자 경험과 안정성을 보장하며, 대규모 서비스에서는 필수.
  • 대표적인 방식은 Rolling Update, Blue-Green, Canary이며, Nginx·Kubernetes·AWS 등을 활용해 쉽게 구현할 수 있습니다.
반응형