본문 바로가기
서버 인프라 실무

Nginx 무중단 배포 완전 가이드: Blue-Green·Canary·graceful reload로 서비스 끊김 없이 배포하기

by yamoojin83 2025. 12. 15.

서론: 왜 무중단 배포가 필수가 되었을까?

운영 중인 서비스를 한 번이라도 내려본 경험이 있다면,
"점검 시간입니다"라는 공지가 얼마나 큰 리스크인지 잘 알고 있을 것이다.

사용자는 더 이상 기다려주지 않는다.
특히 API 서버, 인증 서버, 결제 시스템에서는 단 몇 초의 중단도 장애로 이어진다.

이 글에서는 Nginx를 활용해 서비스 중단 없이 배포하는 실전 전략을 정리한다.
Blue-Green, Canary, 그리고 반드시 알아야 할 graceful reload까지
운영 환경에서 바로 적용 가능한 구성만 다룬다.

 


1. 무중단 배포의 핵심 원리

무중단 배포의 본질은 단순하다.

“기존 요청은 끝까지 처리하고, 새 요청만 새로운 버전으로 보낸다”

이를 위해 필요한 조건은 다음 세 가지다.

  • 로드밸런싱 또는 리버스 프록시 존재
  • 여러 버전의 애플리케이션 동시 실행
  • 연결을 끊지 않는 서버 재시작 방식

Nginx는 이 세 가지를 모두 충족한다.
그래서 단일 서버 환경에서도 무중단 배포의 출발점으로 가장 많이 사용된다.


2. Nginx graceful reload란?

많은 운영 장애는 단순히 nginx restart 한 줄에서 시작된다.

restart는 모든 연결을 즉시 끊는다.
반면 reload는 다르다.

nginx -s reload

graceful reload의 동작 방식은 다음과 같다.

  • 기존 worker process는 유지
  • 새 설정으로 새로운 worker 생성
  • 기존 연결이 종료되면 기존 worker 종료

즉, 현재 처리 중인 요청은 끝까지 보장된다.
무중단 배포의 가장 기본이 되는 기능이다.


Blue-Green Architecture

3. Blue-Green 배포 전략

Blue-Green 배포는 가장 직관적이고 안정적인 무중단 배포 방식이다.

구성 개념

  • Blue: 현재 운영 중인 버전
  • Green: 새로 배포할 버전

두 버전을 동시에 띄운 후, Nginx upstream만 교체한다.

Nginx 설정 예시

upstream app_blue {
  server 127.0.0.1:8080;
}

upstream app_green {
  server 127.0.0.1:8081;
}

server {
  location / {
    proxy_pass http://app_blue;
  }
}

배포 시에는 proxy_pass 대상만 변경한 뒤 reload 한다.

proxy_pass http://app_green;

이 방식의 장점은 명확하다.

  • 즉시 롤백 가능
  • 배포 실패 시 영향 최소
  • 구조가 단순함

단점은 리소스를 두 배 사용한다는 점이다.


Canary Deployment Flow

4. Canary 배포 전략

Canary 배포는 트래픽을 점진적으로 새 버전으로 이동시키는 전략이다.
대규모 서비스에서 특히 많이 사용된다.

트래픽 비율 기반 설정

upstream app {
  server 127.0.0.1:8080 weight=9;
  server 127.0.0.1:8081 weight=1;
}

전체 트래픽 중 약 10%만 새 버전으로 유입된다.
문제가 없으면 비율을 점차 늘린다.

Canary 배포가 적합한 경우

  • 대규모 사용자 트래픽
  • 신규 기능 리스크가 큰 경우
  • 실시간 모니터링 환경이 있는 경우

5. 세션과 무중단 배포

무중단 배포에서 가장 많이 발생하는 실수는 세션 관리다.

  • 서버 로컬 세션 사용
  • Sticky session 미구성

해결책은 명확하다.

  • JWT 기반 Stateless 인증
  • Redis 등 외부 세션 스토리지

무중단 배포를 하려면 상태를 서버 밖으로 빼는 설계가 선행되어야 한다.


6. 배포 시 반드시 체크해야 할 실무 포인트

  • health check endpoint 존재 여부
  • 배포 전후 에러 로그 비교
  • connection timeout 설정
  • keep-alive 종료 정책

특히 다음 설정은 반드시 확인해야 한다.

proxy_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;

Nginx Graceful Reload Process

 

결론: 무중단 배포는 기술이 아니라 운영 철학이다

무중단 배포는 단순한 설정 문제가 아니다.

배포를 두려워하지 않는 구조를 만드는 과정이다.

Nginx의 graceful reload를 이해하고,
Blue-Green과 Canary 전략을 상황에 맞게 선택한다면
단일 서버 환경에서도 충분히 안정적인 운영이 가능하다.


다음 추천 글
👉 Tomcat 무중단 배포 전략: systemd + Nginx 연동
👉 HAProxy + Nginx 혼합 배치로 대규모 트래픽 처리