무중단 배포 완벽 가이드: Rolling, Blue/Green, Canary 배포 전략
CI/CD 파이프라인을 구축해서 코드 변경을 빠르게 배포할 수 있게 되었는데, 정작 배포 후 서비스가 중단되거나 사용자들이 불편을 겪는 경험을 해본 적 있나요?
CI/CD 파이프라인을 구축해서 코드 변경을 빠르게 배포할 수 있게 되었는데, 정작 배포 후 서비스가 중단되거나 사용자들이 불편을 겪는 경험을 해본 적 있나요? 로컬에서는 완벽하게 작동하던 코드가 실제 서버에 반영되면서 여러 문제에 부딪히곤 합니다. 이런 상황을 피하기 위해 많은 팀들이 무중단 배포 를 도입하고 있어요.
무중단 배포는 말 그대로 서비스를 중단하지 않으면서 새로운 버전을 배포하는 기술입니다. 사용자가 서비스를 계속 이용하는 와중에도 백그라운드에서 새로운 버전을 배포하고, 트래픽을 부드럽게 전환하는 방식이에요. 이 글에서는 실무에서 가장 많이 사용되는 세 가지 무중단 배포 전략인 Rolling, Blue/Green, Canary 배포 에 대해 깊이 있게 알아보겠습니다.
📌 먼저 알아야 할 기본 개념들
무중단 배포를 이해하려면 먼저 몇 가지 인프라 개념을 짚고 넘어가야 해요. 특히 수평 확장(Scale Out) 과 로드 밸런싱 이 무중단 배포의 핵심 기반이 됩니다.
⚙️ 수평 확장(Scale Out) vs 수직 확장(Scale Up)
서버의 성능을 높이는 방법은 크게 두 가지입니다. 수직 확장(Scale Up) 은 하나의 서버를 더 좋은 하드웨어로 업그레이드하는 방식이에요. CPU나 메모리를 더 좋은 것으로 교체하는 거죠. 구현이 간단하고 기존 애플리케이션 수정이 거의 필요 없다는 장점이 있지만, 하드웨어 성능의 한계가 있고 비용이 기하급수적으로 증가합니다. 또한 확장할 때 서비스가 중단될 수 있다는 치명적인 단점이 있어요.
반면 수평 확장(Scale Out) 은 여러 대의 서버를 추가해서 부하를 분산하는 방식입니다. 이론적으로는 무한 확장이 가능하고, 일부 서버 장애 시에도 전체 서비스가 중단되지 않아요. 비용도 점진적으로 증가하기 때문에 효율적입니다. 무중단 배포는 이 수평 확장 개념을 기반으로 하고 있습니다.
🔀 로드 밸런서와 로드 밸런싱
여러 대의 서버가 있을 때, 사용자의 요청을 어느 서버로 보낼지 결정하는 것이 로드 밸런싱 입니다. 이 역할을 하는 것이 로드 밸런서 에요. 마치 공항에서 줄을 세우는 직원처럼, 로드 밸런서는 “너는 이 서버로, 너는 저 서버로” 하면서 요청을 나눠줍니다. 각 서버의 부하를 고려해서 효율적으로 분산 처리하는 거죠.
무중단 배포 전략들은 모두 이 로드 밸런서를 활용해서 트래픽을 제어합니다. 새로운 버전으로 배포할 때, 로드 밸런서가 트래픽을 어떻게 전환하느냐에 따라 배포 방식이 결정되는 거예요.
⏸️ 다운타임(Downtime)이란?

서버 한 대로 서비스를 운영할 때 V1에서 V2로 배포하는 과정
서버 한 대로 서비스를 운영한다고 가정해봅시다. 현재 V1 버전이 실행되고 있는데, 새로 개발한 V2 버전을 배포해야 해요. 먼저 V2 빌드를 서버에 다운로드합니다. V1과 V2는 같은 포트를 사용하므로, V2를 실행하기 전에 반드시 V1 프로세스를 종료해야 합니다. 이 순간부터 사용자는 서비스를 이용할 수 없게 됩니다. 그 다음 V2를 실행하고 로딩이 완료되면 사용자가 다시 서비스를 이용할 수 있게 되죠.
V1이 종료되고 V2가 실행되는 그 사이, 즉 사용자가 서비스를 이용할 수 없는 시간을 다운타임(downtime) 이라고 합니다. 이런 방식을 중단 배포라고 하는데, 현대의 서비스 환경에서는 이 다운타임이 치명적일 수 있어요. 특히 결제 시스템이나 금융 서비스처럼 24시간 운영되어야 하는 서비스라면 더욱 그렇습니다.
🎯 세 가지 무중단 배포 전략 비교
![]()
무중단 배포의 세 가지 주요 전략
🔄 Rolling 배포: 점진적 교체
Rolling 배포: 인스턴스를 하나씩 새로운 버전으로 교체
Rolling 배포는 무중단 배포의 가장 기본적인 방식입니다. 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체 하는 방식이에요. 여러 대의 서버 중에서 하나를 로드밸런서에서 라우팅하지 않도록 한 뒤, 그 서버에 새 버전을 적용합니다. 새 버전이 정상적으로 배포되고 헬스체크를 통과하면 다시 라우팅을 시작하고, 다음 서버를 같은 방식으로 업데이트합니다. 이를 반복해서 모든 인스턴스에 새 버전을 배포하는 거죠.
예를 들어 4개의 V0.0.1 인스턴스가 있다고 가정해봅시다. 먼저 2개의 라우팅을 끊고 V0.0.2로 업그레이드합니다. 업데이트가 완료되면 다시 라우팅을 시작하고, 나머지 2개 인스턴스의 라우팅을 끊어서 같은 방식으로 업데이트합니다. 이렇게 하면 항상 일부 인스턴스는 서비스를 제공하고 있으므로 무중단 배포가 가능해요.
Rolling 배포의 장점: 인스턴스를 추가로 늘리지 않아도 되므로 비용 효율적입니다. 또한 k8s나 elastic beanstalk 같은 많은 오케스트레이션 도구에서 지원하기 때문에 구현이 간편해요. 배포를 진행할 때 인스턴스마다 차례로 진행하기 때문에 상황에 따라 손쉽게 롤백이 가능합니다.
Rolling 배포의 단점: 배포 도중 서비스 중인 인스턴스의 수가 줄어들기 때문에 각 서버가 부담하는 트래픽의 양이 늘어납니다. 예를 들어 4개 서버에서 2개를 빼면, 남은 2개 서버에 트래픽이 몰리게 되는 거죠. 따라서 전체 트래픽의 양과 단일 서버가 처리할 수 있는 트래픽을 잘 파악해야 합니다. 또한 구버전과 신버전이 공존하는 시간이 있기 때문에 호환성 문제 가 발생할 수 있어요. 배포 중간에 어떤 사용자는 V1을 경험하고 어떤 사용자는 V2를 경험하게 되므로 균일한 서비스를 제공하지 못할 수 있습니다.
정리하자면, Rolling 배포는 비용 효율적이고 구현이 간단하지만, 배포 중간에 서버 부하가 증가하고 버전 호환성 문제가 발생할 수 있다는 점을 고려해서 사용해야 합니다.
🔵🟢 Blue/Green 배포: 한 번에 전환
Blue/Green 배포: 두 환경을 동시에 준비하고 한 번에 전환
Blue/Green 배포는 Rolling 배포와 완전히 다른 접근 방식입니다. Blue는 현재 운영 중인 안정된 환경(V1) 을 의미하고, Green은 새 버전을 배포하고 테스트할 환경(V2) 을 의미해요. 두 개의 독립된 배포 환경을 준비하고, 로드밸런서를 통해 모든 트래픽을 한 번에 신버전 쪽으로 전환하는 방식입니다.
배포 절차를 자세히 설명하면: 먼저 현재 운영 중인 서버(V1)는 Blue 환경에 있습니다. 새로운 V2 버전을 Green 환경에 배포하고, 충분한 테스트를 거쳐서 완벽하게 준비합니다. 문제가 없다고 판단되면 로드밸런서의 트래픽을 Blue에서 Green으로 한 번에 전환합니다. 이제 Green 환경이 운영을 담당하고, Blue 환경은 백업용으로 남겨둡니다. 만약 문제가 생기면 로드밸런서를 다시 Green에서 Blue로 빠르게 롤백할 수 있어요.
![]()
Blue/Green 배포 전후 상태
Blue/Green 배포의 장점: 가장 큰 장점은 완전한 무중단 배포 가 가능하다는 점입니다. 트래픽 스위칭만으로 새 버전을 적용하므로 사용자는 서비스 중단을 전혀 느끼지 못해요. 또한 구버전의 인스턴스가 그대로 남아있어서 빠른 롤백 이 가능합니다. 문제가 생기면 즉시 이전 환경(Blue)으로 전환할 수 있죠. 배포 중인 환경과 운영 중인 환경이 완전히 분리되기 때문에 배포 리스크를 최소화할 수 있고, 새 버전을 전체 테스트한 후에 실제 트래픽을 전환하므로 안정성이 높습니다.
Blue/Green 배포의 단점: 가장 큰 문제는 인프라 비용이 두 배 라는 점입니다. Blue와 Green 두 환경을 동시에 유지해야 하므로 필요한 서버 리소스가 두 배가 되는 거죠. 클라우드 환경에서는 필요 없는 인스턴스를 제거하면 되지만, 온프레미스 방식으로 서비스를 운영한다면 비용 부담이 클 수 있어요. 또한 DB나 캐시 같은 공유 리소스 간의 상태 충돌 우려가 있습니다. DB 스키마가 변경될 경우 롤백이 어려워질 수 있다는 점도 고려해야 합니다.
Blue/Green 배포는 실서비스 트래픽이 많고 다운타임이 절대 허용되지 않을 때 , 롤백 속도가 중요한 결제 시스템이나 사용자 데이터 변경 서비스 , 배포 전후 상태를 명확히 분리해서 테스트하고 싶을 때 사용하면 좋습니다.
🐦 Canary 배포: 위험 감지 배포
Canary 배포: 소수 사용자부터 시작해서 점진적으로 확대
Canary 배포의 이름은 흥미로운 역사에서 유래되었어요. 예전 광부들이 유독가스를 감지하기 위해 가스에 민감한 카나리아 새를 먼저 탄광에 들여보냈다고 합니다. 서비스에서도 마찬가지로, 일부 사용자가 초기 탐지자 역할을 맡는 거죠.
Canary 배포는 새로운 버전을 전체 사용자에게 한 번에 적용하지 않고, 일부 사용자에게만 먼저 노출시켜 테스트하는 배포 방식 입니다. 배포 초기에 발생할 수 있는 오류나 성능 이슈를 조기에 감지하고, 문제가 없을 경우에만 점진적으로 전체 트래픽을 옮겨가는 것이 핵심이에요.
배포 절차를 살펴보면: 먼저 전체 트래픽 중 일부만 새 버전(V2)이 배포된 서버로 전달합니다. 예를 들어 전체 요청 중 5%만 V2로 전송하는 거죠. 이 상태에서 새 버전의 동작을 모니터링 하면서 오류율이나 성능 저하 여부를 분석합니다. 로그, 메트릭, 사용자 반응 등을 기반으로 판단하는 거예요. 이상이 없다고 판단되면, 트래픽 비율을 점진적으로 증가 시킵니다. 5% → 25% → 50% → 100% 이런 식으로 말이에요. 모든 트래픽이 V2로 안전하게 전환되면 배포가 완료됩니다. 만약 문제가 발생하면 트래픽을 즉시 기존 버전(V1)으로 되돌리거나 배포를 중단할 수 있습니다.
Canary 배포의 장점: 가장 큰 장점은 리스크를 최소화 할 수 있다는 점입니다. 소수 사용자 대상으로 먼저 배포하기 때문에 문제를 조기에 탐지할 수 있어요. 또한 트래픽 제어가 유연 해서 점진적으로 트래픽을 조절하며 안전하게 배포할 수 있습니다. 무중단 배포가 가능하고, A/B 테스트로도 활용 할 수 있다는 장점이 있어요. 사용자 그룹별로 다른 버전을 경험하게 해서 실제 사용자 반응을 데이터 기반으로 분석할 수 있습니다.
Canary 배포의 단점: 운영 복잡도가 증가합니다. 트래픽 분기, 모니터링, 자동화 구성이 필요하기 때문이에요. 또한 Rolling 배포처럼 신구 버전이 공존하기 때문에 호환성 문제 가 발생할 수 있습니다. 세션, 데이터 구조 차이로 인한 문제가 생길 수 있다는 뜻이에요. 사용자마다 사용하는 버전이 다를 수 있어서 사용자 경험이 불일치할 수 있고, 트래픽 전환 중 문제 발생 시 복구 시나리오가 필수적으로 준비되어야 합니다.
Canary 배포는 새 기능에 대한 불확실성이 클 때 , 사용자 수가 많아서 일괄 배포가 부담스러울 때 , 데이터 기반 A/B 테스트를 병행하고 싶을 때 , 실시간 대응과 롤백 전략이 준비되어 있을 때 사용하면 좋습니다.
📊 세 가지 배포 전략 비교표
각 배포 전략의 특징을 한눈에 비교해보겠습니다.
💡 각 배포 전략 선택 가이드
🎯 Rolling 배포를 선택해야 할 때
Rolling 배포는 다음과 같은 상황에서 좋은 선택입니다:
- 서버가 여러 대인 경우
- 클라우드 환경이나 Kubernetes를 사용 중인 경우
- 점진적 배포와 모니터링이 중요한 서비스
- 비용 효율성을 중요시하는 팀
- 배포 시간이 조금 길어도 괜찮은 경우
예를 들어, 마이크로서비스 아키텍처를 Kubernetes에서 운영하는 팀이라면 Rolling 배포가 기본값으로 설정되어 있을 겁니다. 비용도 절감되고 구현도 간단하기 때문이에요.
🎯 Blue/Green 배포를 선택해야 할 때
Blue/Green 배포는 다음과 같은 상황에서 좋은 선택입니다:
- 실서비스 트래픽이 많고 다운타임이 절대 허용되지 않을 때
- 롤백 속도가 중요한 결제 시스템이나 금융 서비스
- 사용자 데이터 변경이 많은 서비스
- 배포 전후 상태를 명확히 분리해서 테스트하고 싶을 때
- 충분한 인프라 리소스가 있는 경우
예를 들어, 대규모 이커머스 플랫폼의 결제 시스템이라면 Blue/Green 배포가 최적입니다. 배포 중에도 사용자가 계속 결제할 수 있어야 하고, 문제 발생 시 즉시 롤백해야 하기 때문이에요.
🎯 Canary 배포를 선택해야 할 때
Canary 배포는 다음과 같은 상황에서 좋은 선택입니다:
- 새 기능에 대한 불확실성이 클 때
- 사용자 수가 많아서 일괄 배포가 부담스러울 때
- 데이터 기반 A/B 테스트를 병행하고 싶을 때
- 실시간 대응과 롤백 전략이 준비되어 있을 때
- 사용자 반응을 실시간으로 모니터링하고 싶을 때
예를 들어, 새로운 추천 알고리즘을 배포하는 경우라면 Canary 배포가 좋습니다. 먼저 5%의 사용자에게만 새 알고리즘을 적용해서 성능을 비교하고, 더 나은 결과를 보이면 점진적으로 확대할 수 있기 때문이에요.
⚡ 실무에서 알아두면 좋은 팁
🔧 헬스체크의 중요성
무중단 배포에서 헬스체크 는 매우 중요합니다. 새로운 버전이 배포되었을 때, 실제로 정상적으로 작동하는지 확인하는 과정이거든요. 헬스체크를 통과하지 못하면 로드밸런서가 트래픽을 보내지 않으므로, 문제 있는 버전이 사용자에게 노출되는 것을 방지할 수 있습니다.
🔧 모니터링과 알림
특히 Canary 배포를 사용할 때는 실시간 모니터링 이 필수입니다. 오류율, 응답 시간, CPU 사용률 등을 지속적으로 모니터링하면서 문제 징후를 조기에 발견해야 합니다. 이상 징후가 감지되면 자동으로 롤백하거나 알림을 보내는 시스템을 구축하는 것이 좋아요.
🔧 데이터베이스 마이그레이션
무중단 배포를 할 때 가장 까다로운 부분이 바로 데이터베이스 마이그레이션입니다. 특히 스키마가 변경되는 경우, 구버전과 신버전이 동시에 같은 DB에 접근할 수 있어야 합니다. 이를 위해서는 배포 전에 충분한 테스트와 계획이 필요해요.
🔧 롤백 계획 수립
배포 전에 항상 롤백 계획 을 세워야 합니다. 문제가 발생했을 때 얼마나 빠르게 이전 상태로 돌아갈 수 있는지가 중요해요. Blue/Green 배포는 롤백이 빠르지만, Rolling 배포는 롤백이 복잡할 수 있으므로 미리 준비해야 합니다.
🎓 마치며
무중단 배포는 현대적인 서비스 운영의 필수 요소가 되었습니다. 사용자 경험을 해치지 않으면서도 빠르게 새로운 기능을 배포할 수 있다는 것은 엄청난 경쟁 우위예요. 하지만 각 배포 전략마다 장단점이 있기 때문에, 자신의 서비스 특성과 팀의 역량을 고려해서 적절한 방식을 선택해야 합니다.
비용이 중요하다면 Rolling 배포, 안정성과 빠른 롤백이 중요하다면 Blue/Green 배포, 새로운 기능의 검증이 중요하다면 Canary 배포를 선택하세요. 그리고 배포 후에는 항상 모니터링을 통해 실시간으로 서비스 상태를 확인하는 것을 잊지 마세요. 완벽한 배포 전략이 있는 것이 아니라, 상황에 맞는 최적의 배포 전략이 있을 뿐입니다. 지금 당신의 팀에 가장 필요한 배포 전략은 무엇인가요?
#무중단배포 #Rolling배포 #BlueGreen배포 #Canary배포 #DevOps #배포전략 #CI/CD #무중단배포전략 #로드밸런싱 #인프라