solyrion

무중단 배포 본문

DevOps

무중단 배포

ert1015 2026. 1. 24. 22:40

들어가며

최근 AI 기반 회식 장소 추천 서비스를 개발하면서, 배포 과정에서 서비스를 멈추지 않고 업데이트하는 방법이 필요해졌습니다

설계 단계에서 서비스 특성상 단순히 배포 시간을 줄이는 게 아니라, 장애 영향 범위를 최소화하고 문제가 생겼을 때 빠르게 복구할 수 있는 배포 전략의 필요성을 느끼게 되어 무중단 배포를 단계적으로 도입하기로 했습니다.

초기에는 블루/그린으로 운영 안정성과 빠른 롤백을 확보하고, 이후에는 롤링 혹은 카나리로 전환해 일부 트래픽에서 먼저 검증하며 리스크를 더 작게 통제하고자 합니다.

이 글에서는 블루/그린, 롤링, 카나리를 각각을 설명하고 왜 우리 서비스는 블루/그린 → 롤링 or 카나리로 진화하려는지 정리합니다

무중단 배포란?

무중단 배포는 서비스를 멈추지 않고 새 버전을 배포하는 방식입니다

핵심 두 가지

  1. 다운 타임을 최대한 줄이면서 트래픽을 안전하게 새 버전으로 전환할 것
  2. 전환 중 문제가 생기면 빠르게 롤백할 것

이 목표를 달성하는 대표 전략이 블루/그린, 롤링, 카나리 입니다


1) 블루/그린 배포(Blue/Green)

개념

동일한 운영 환경을 두 버전(Blue, Green) 유지합니다.

  • Blue: 현재 운영 중(Stable)
  • Green: 새 버전 배포 대상(Next)

새 버전을 Green에 올려서 헬스체크/스모크 테스트를 끝낸 뒤,

로드밸런서/라우팅을 한 번에 스위치해서 트래픽을 Green으로 넘기게 됩니다

(배포 전)  Users → Blue
(배포 후)  Users → Green

장점

  • 스위치만 다시 Blue로 되돌리면 되기 때문에 롤백이 매우 빠름
  • 배포 전 Green에서 실제 운영과 거의 동일한 환경 검증 가능
  • 배포 시점이 명확해서 운영이 단순해짐

단점

  • 운영 환경을 두 버전 유지해야 하기 때문에 비용이 2배로 필요
  • 100% 트래픽이 한 번에 이동하기 때문에 스위치 순간에 문제가 터지면 대규모 영향
  • 상태가 있는 시스템(세션/캐시/파일)에서는 전환 설계가 까다로움
    • 예시: 세션 스토리지, 캐시 warm-up, 마이그레이션 호환성등

유용한 상황

  • 빠른 롤백이 최우선인 초기 운영
  • 배포 빈도는 높지 않지만 안정성이 매우 중요한 서비스
  • 완전한 동일 환경에서 검증을 하고 싶을 때

2) 롤링 배포(Rolling)

개념

서버(인스턴스/파드)를 조금씩 교체하며 배포합니다

예를 들어 10대 중 2대씩 새 버전으로 바꾸고, 문제 없으면 다음 2대를 교체하는 방식

v1 v1 v1 v1 v1  →  v2 v2 v1 v1 v1  →  v2 v2 v2 v2 v2

장점

  • 블루/그린 대비 추가 비용이 적음
    • 똑같은 환경이 추가로 필요 없음
  • 점진 교체라서 리소스 효율이 좋고 일반적인 운영 방식 중 하나
  • 오토스케일/컨테이너 환경과 궁합이 좋음

단점

  • 배포 중에는 v1과 v2가 공존 → 호환성 요구
    • API 스키마/DB 컬럼/캐시 포맷이 깨지면 혼란
  • 문제가 생겨도 어느 시점에 어떤 노드가 v2인지 추적, 복구가 번거로울 수 있음
  • “중간 상태”가 길면 사용자 경험이 일관되지 않을 수 있음

유용한 상황

  • 트래픽이 꾸준하고, 표준적인 운영/배포 파이프라인을 원할 때
  • 컨테이너/오케스트레이션 환경(K8s 등)에서 기본 전략으로 쓰기 좋음
  • 기능 변화가 비교적 단순하고, 호환성을 잘 지킬 수 있을 때

3) 카나리 배포(Canary)

개념

새 버전을 전체에 뿌리지 않고 일부 트래픽에만 먼저 노출한다.

  • 1% → 5% → 20% → 50% → 100% 처럼 단계적으로 확대
  • 지표(에러율, p95 latency, CPU/mem, 전환율 등)가 기준을 넘으면 즉시 중단/롤백
Users → (99%) v1 + (1%) v2
     → (95%) v1 + (5%) v2
     → ...

장점

  • 문제 발생 시 영향 범위를 작게 제한
  • 실제 사용자 트래픽으로 검증하므로 신뢰도가 높음
  • 기능 플래그/실험(A/B)과 결합하면 위험 관리 + 실험까지 가능

단점

  • 트래픽 분배/관측/자동 중단 기준(SLO) 설계가 필요하기 때문에 운영 난이도 상승
  • v1/v2 공존 기간이 길어질 수 있어 호환성 요구가 더 큼
  • 로그/메트릭/트레이싱 같은 관측의 기준이 약하면 왜 실패했는지 파악이 어려움

유용한 상황

  • 배포 빈도가 높고, 작은 변경이 자주 들어오는 제품
  • 장애 비용이 크고, 리스크를 정량 지표로 통제하고 싶은 팀
  • AI/추천/랭킹처럼 결과 품질이 중요한 기능을 안전하게 바꾸고 싶을 때

“AI 기반 회식 장소 추천” 에는 어떤 전략이 맞나?

이 서비스는 단순 CRUD만 있는 게 아니라, 보통 아래 특성이 있습니다.

  • 트래픽이 시간대에 몰릴 가능성(회식 잡는 시간대)
  • 추천/랭킹 로직 변경이 사용자 경험에 직접 영향
  • AI/추천은 “정답이 없다” 보니, 실사용 지표로 검증이 중요
  • 모델/피처/캐시/DB 스키마 변경이 섞이면 롤백이 단순하지 않을 수 있음

그래서 저희 팀은 초기에는 블루/그린으로 운영 안정성 확보 → 이후 카나리로 점진 진화가 합리적이라고 판단했습니다.


블루/그린 → 카나리로 점진적으로 바꾸는 이유

1) 초기에는 운영 안정성이 우선

서비스 초반에는 장애 한 번이 치명적일 수 있습니다

블루/그린은 배포가 단순하고, 문제가 생기면 스위치 한 번으로 즉시 복구가 가능합니다

즉, “운영을 안정화하는 단계”에서 강력합니다.

2) 하지만 추천/AI는 “실사용 검증”이 더 중요해진다

시간이 지나 기능을 고도화 할수록, 바뀌는 건:

  • 추천 결과의 품질 변화
  • 클릭/전환율 변화
  • 지연 시간(p95) 변화
  • 특정 조건에서만 발생하는 에러

이런 건 스테이징 테스트로 100% 예측이 어렵다고 생각합니다

카나리로 1~5% 실트래픽을 먼저 태워보면서 “실제 사용자 환경”에서 리스크를 제한한 채 검증할 수 있습니다

3) 블루/그린은 “한 번에 100% 전환”이라 위험이 커진다

초기엔 배포 안정성 때문에 괜찮지만, 변경이 커질수록 스위치 한 번에 전체가 바뀌는 구조는 부담이 됩니다

4) 카나리로 가면 “관측과 자동화”가 구축된다

카나리 도입 과정에서 자연스럽게 아래가 정리될 수 있습니다.

  • SLI/SLO(에러율, p95 latency, 추천 클릭률 등)
  • 배포 게이트(기준 넘으면 자동 중단)
  • 로그/메트릭/알림 체계
  • 기능 플래그/실험 문화

이건 한 번 구축해두면 이후 기능 개발 속도도 같이 올라갈 수 있습니다.


결론

  • 블루/그린
    • 단순하고 롤백이 빠른 초기 안정화에 강함
  • 롤링
    • 비용 효율적인 표준 운영
  • 카나리:
    • 실사용 기반으로 위험을 줄이는 “고도화/실험”에 최적

AI 기반 추천 서비스는 시간이 갈수록 정확히 동작하냐를 넘어 사용자가 더 좋아하는지가 중요해집니다.

그래서 초기에는 블루/그린으로 안전하게 운영 기반을 만들고, 운영 지표와 기준 및 자동화를 갖춘 뒤 카나리로 확장해 리스크를 통제하면서 개선 속도를 높이는 방향으로 설정했습니다.

'DevOps' 카테고리의 다른 글

트래픽 분산  (0) 2025.12.27
Spring Boot 빌드: GitHub Actions vs Dockerfile  (0) 2025.11.29
Comments