본문 바로가기

운영체제 및 플랫폼/Docker(도커)

배포 전략 비교 — 롤링, 블루-그린, 카나리 배포 차이 정리

728x90
반응형

한 줄 요약

배포 전략은 새 버전을 사용자에게 내보내는 방식이에요. 한 번에 바꿀지, 나눠서 바꿀지, 일부에게 먼저 보여 줄지에 따라 위험과 비용이 달라져요.


1. 핵심 개념

 

1.1 배포 전략이란

배포 전략은 이전 버전에서 새 버전으로 트래픽을 옮기는 방법이에요. 같은 코드라도 어떤 배포 전략을 쓰느냐에 따라 서비스 중단 시간과 문제 발생 시 영향 범위가 달라져요.

트래픽: 서비스로 들어오는 사용자 요청의 흐름이에요.

롤백(rollback): 문제가 생겼을 때 이전 버전으로 되돌리는 작업이에요.

 

1.2 대표적인 배포 전략

AWS 공식 문서 기준으로 정리하면 이래요.

전략 설명

일괄(All-at-once) 모든 대상을 한 번에 새 버전으로 바꿔요
롤링(Rolling) 일부 서버씩 순서대로 새 버전으로 바꿔요
블루-그린(Blue/Green) 동일한 환경 두 개를 두고 트래픽을 한 번에 전환해요
카나리(Canary) 새 버전을 소수 사용자에게 먼저 보여 준 뒤 확대해요
선형(Linear) 트래픽을 같은 비율, 같은 간격으로 조금씩 옮겨요

 

1.3 왜 중요한가

  • 배포 중 서비스가 멈추는 시간을 줄일 수 있어요.
  • 문제가 생겼을 때 영향받는 사용자 수를 제한할 수 있어요.
  • 되돌리는 속도가 전략마다 달라요.

CI/CD 개념 글에서 다룬 지속적 배포를 운영 환경에 적용할 때 함께 고려하는 내용이에요.


2. 쉽게 이해하기

식당이 메뉴를 새로 바꾸는 상황으로 비유해 볼게요.

  • 일괄 배포: 하루 문을 닫고 모든 메뉴를 한 번에 바꿔요.
  • 롤링 배포: 테이블 몇 개씩 순서대로 새 메뉴판으로 바꿔요. 잠시 두 메뉴판이 섞여 있어요.
  • 블루-그린 배포: 옆에 똑같은 매장을 차려 새 메뉴를 준비한 뒤, 손님 안내를 한 번에 옮겨요. 문제가 있으면 원래 매장으로 다시 안내해요.
  • 카나리 배포: 일부 손님에게만 신메뉴를 먼저 내고 반응을 본 뒤, 괜찮으면 모든 손님에게 내요.

3. 전략별 상세 설명

3.1 일괄 배포 (All-at-once)

모든 서버를 동시에 새 버전으로 교체해요.

  • 절차가 단순하고 빨라요.
  • 교체 중에는 서비스가 중단될 수 있어요.
  • 새 버전에 문제가 있으면 모든 사용자가 영향을 받아요.

 

3.2 롤링 배포 (Rolling)

서버를 묶음 단위로 나눠 순서대로 교체해요. AWS 문서는 이를 기존 서버를 그대로 쓰는 in-place 배포의 한 방식으로 설명해요.

  • 추가 환경이 거의 필요 없어요.
  • 배포 중에는 이전 버전과 새 버전이 함께 실행돼요.
  • 되돌리려면 이전 버전을 다시 배포해야 해요.

 

3.3 블루-그린 배포 (Blue/Green)

AWS 공식 문서는 블루-그린 배포를 서로 다른 버전이 실행되는 동일한 두 환경 사이에서 트래픽을 옮기는 방식으로 정의해요.

  • 블루: 현재 운영 중인 환경이에요.
  • 그린: 새 버전이 배포된 환경이에요.

그린 환경을 충분히 확인한 뒤 트래픽을 전환해요. 문제가 생기면 트래픽을 블루로 되돌려요. AWS 문서는 언제든 블루로 되돌릴 수 있는 점을 핵심 장점으로 설명해요.

  • 환경을 두 벌 유지하므로 자원이 더 필요해요.
  • 데이터베이스를 두 환경이 함께 쓰면 스키마 변경이 두 버전 모두와 호환돼야 해요.

 

3.4 카나리 배포 (Canary)

AWS 문서는 카나리 배포를 트래픽을 두 단계로 옮기는 방식으로 설명해요.

  1. 먼저 적은 비율의 트래픽(카나리 그룹)을 새 버전으로 보내요.
  2. 문제가 없으면 나머지 트래픽을 옮겨요.
  • 문제가 생겨도 영향 범위가 일부 사용자로 제한돼요.
  • 오류율, 응답 시간 같은 지표를 보고 판단해야 하므로 모니터링이 필요해요.
  • 배포 중에는 두 버전이 함께 실행돼요.

 

3.5 선형 배포 (Linear)

트래픽을 같은 비율씩, 같은 시간 간격으로 옮겨요. 예를 들어 일정 시간마다 10%씩 늘리는 방식이에요. 비율과 간격은 설정으로 정해요.


4. 전략 비교

항목 일괄 롤링 블루-그린 카나리

추가 환경 불필요 거의 불필요 필요 (두 벌) 일부 필요
배포 중 버전 혼재 없음 있음 전환 시점 외 없음 있음
문제 시 영향 범위 전체 교체된 서버 전환 후 전체 카나리 그룹
롤백 방식 재배포 재배포 트래픽 되돌리기 트래픽 되돌리기

어떤 전략이 가장 좋은지는 서비스 규모, 비용, 허용 가능한 위험에 따라 달라져요.


5. 쿠버네티스에서의 롤링 업데이트

쿠버네티스 Deployment는 업데이트 방식으로 RollingUpdate와 Recreate를 제공해요.

Deployment: 쿠버네티스에서 앱 컨테이너의 개수와 버전을 관리하는 설정이에요.

spec:
  replicas: 4
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%

 

항목 의미

maxSurge 원하는 개수보다 추가로 만들 수 있는 최대 개수예요
maxUnavailable 업데이트 중 사용할 수 없어도 되는 최대 개수예요

 

공식 문서 기준 두 값의 기본값은 모두 25%예요. 두 값을 동시에 0으로 설정할 수는 없어요.


6. 핵심 정리

  • 배포 전략은 새 버전으로 트래픽을 옮기는 방법이에요.
  • 롤링은 서버를 나눠 순서대로 교체하고, 배포 중 두 버전이 섞여요.
  • 블루-그린은 두 환경을 두고 트래픽을 전환해, 되돌리기가 빨라요.
  • 카나리는 일부 사용자에게 먼저 배포해 영향 범위를 줄여요.
  • 쿠버네티스 Deployment의 기본 롤링 설정은 maxSurge, maxUnavailable 모두 25%예요.

7. 추가 정보

공통 주의사항

  • 헬스 체크: 새 버전이 요청을 받을 준비가 됐는지 확인하는 장치가 있어야 전환 판단이 가능해요.
  • 데이터베이스 호환성: 두 버전이 동시에 실행되는 전략에서는 DB 구조 변경이 양쪽 버전과 모두 호환돼야 해요.
  • 모니터링: 카나리와 선형 배포는 지표를 보고 진행 여부를 판단하므로 모니터링 체계가 필요해요.

 

반응형