들어가며
최근 모든 업계에서는 빠르게 서비스를 생산하고 소비자의 선택을 받는 것이 중요해졌습니다. 사회의 속도가 빨라진 만큼, 소비자들의 관심이 집중되고 흩어지는 속도 역시 그만큼 빨라졌기 때문인 것 같습니다. 이는 소프트웨어 역시 마찬가지입니다. 빠르게 새로운 기능, 서비스를 개발하고 고객들에게 선보이며 그 피드백을 반영하면서 발전하는 것이 곧 기업의 경쟁력이 되었습니다. 최고의 기업 중 하나인 아마존은 이미 2014년에 1초에 1.5회의 배포 주기를 가졌다고 합니다. 주 1회 배포하는 동일 산업의 기업과의 경쟁력은 말할 필요도 없겠죠.
하지만 배포는 쉬운 일이 아닙니다. 기존의 시스템을 중단하고, 새로운 버전의 시스템을 가동해야 합니다. 또한 운영 환경에서 충분한 테스트를 거쳐야 하고, 문제가 발생하면 다시 롤백을 해야 합니다. 그리고 이 과정에서 필연적으로 발생할 서비스 중단은 고객들의 불편함으로 다가올 것입니다. 하지만 ‘무중단 배포(Zero Downtime Deployment)’는 이런 문제를 해결해 주며 아마존이 빠르게 배포를 할 수 있는데 큰 기여를 했다고 볼 수 있습니다. 이 글에서는 ‘무중단 배포’에 대한 필요성과 개념, 그리고 이를 가능하게 하는 3가지 전략에 대해서 알아봅니다.
글의 목표
- 무중단 배포의 개념에 대해 이해한다.
- 무중단 배포의 필요성에 대해 이해한다.
- 무중단 배포 전략(롤링, Blue-Green, 카나리)의 특징에 대해 이해한다.
서비스 배포와 불편함
많은 사람들은 자신이 사용하는 서비스나 App이 점검으로 인해 사용하지 못했던 순간을 경험했을 겁니다. 이번 케이스와 완전히 관련된 경우는 아니지만 은행의 경우 자정 즈음에 송금을 하지 못합니다. 24시간 중 10분에서 20분밖에 안 되는 시간이지만, 그 순간에 내가 이용하려고 했다면 굉장히 불편한 경험으로 기억이 될 것입니다.
은행 외에도 게임의 경우 이런 일들이 자주 발생합니다. 고객이 반드시 시스템을 종료하고 클라이언트를 업데이트해야 하기도 하고, 배포 범위가 크기 때문에 시스템을 중단하고 배포를 하게 됩니다. 업계의 특성이긴 하지만, 매주 일정 시간 내가 원하는 서비스를 이용하지 못하는 경험은 크게 달갑지는 않습니다.
많은 기업들은 배포로 인해 발생하는 고객들의 불편한 경험을 줄이고자 했습니다. 그리고 이 문제를 해결하지 못하면 아마존처럼 1초에 1.5회 배포하는 것은 꿈도 꾸지 못하겠죠. 이런 것들이 가능하게 해 줬던 ‘무중단 배포’에 대해서 알아봅시다.
무중단 배포
무중단 배포는 단어 그 자체로 이해가 쉽습니다. 중단 없이 배포하는 것이라는 간단한 이야기입니다. 새로운 버전을 배포하는 과정에서도 고객들이 시스템을 지속적으로 이용할 수 있게 하는 방법입니다.
무중단 배포로 인해서 얻을 수 있는 장점은 크게 3가지로 볼 수 있습니다.
- 높은 가용성 : 서비스를 배포하는 과정에서조차 고객들이 서비스를 이용할 수 있습니다.
- 빠른 롤백 및 장애 대응 : 오류가 발생하더라도, 구 버전이 공존하기 때문에 빠르게 롤백이 가능합니다. 블루-그린 배포의 경우 로드 밸런서를 활용해 구버전으로 라우팅을 할 수 있고, 롤링 배포나 카나리 배포의 경우 신규 버전 그룹을 롤백시킬 수 있습니다.
- 작은 단위의 배포 가능 : 중단 시간이 없기 때문에, 배포에 대한 부담이 적어집니다. 이로 인해 작은 단위 배포로 배포가 가능하고, 이 과정에서 장애가 발생한다면 문제 식별이 상대적으로 빠를 수 있습니다.
무중단 배포가 가능하기 위해서는 2가지 조건이 있어야 합니다.
첫 번째로는 복수의 서버를 가지고 있어야 합니다. 무중단 배포의 기본적인 원리는 기존 버전을 유지하며 신규 버전을 배포하는 것으로 고객들이 서비스를 끊임없이 사용할 수 있기 때문입니다.
두 번째는 로드 밸런서입니다. 첫 번째 상황이라면 당연히 로드 밸런서가 필요하지만, 로드 밸런서를 활용해야 블루-그린 배포나 카나리 배포가 가능하기 때문입니다.
무중단 배포의 개념과 장점, 그리고 필요한 조건에 대해서 알아보았으니, 무중단 배포를 가능하게 하는 배포 전략 3가지에 대해서 알아보겠습니다.
3가지 배포 전략
무중단 배포를 가능하게 하는 전략은 롤링 배포, 블루-그린 배포, 카나리 배포가 대표적입니다. 각각의 방법과 특징에 대해서 알아보겠습니다.
롤링 배포
롤링 배포는 복수의 서버에 대해서 점진적으로 신버전으로 전환하는 방법입니다. 로드 밸런서를 활용해 일부 서버에 대해서 라우팅을 끊고, 해당 서버에 대해서 신버전으로 배포합니다. 배포가 완료된 이후 다시 라우팅을 연결합니다. 이 과정을 모든 서버들에게 적용되도록 하는 방법입니다.
롤링 배포의 특징을 다음과 같이 정리해 봤습니다.
장점
- 제한된 자원에서 사용하기 좋다.
블루-그린 배포나 카나리 배포의 경우 추가적인 자원(Green 서버, 복잡한 트래픽 관리)이 필요하지만, 롤링 배포는 그렇지 않습니다. - 배포 과정에서 오류 발생 시 빠르게 롤백이 가능하다.
점진적으로 배포하기 때문에, 신버전에 대해서만 롤백을 진행할 수 있습니다.
단점
- 점진적으로 배포하기 때문에, 모든 서버가 전환되는데 시간이 걸린다.
- 구버전과 신버전이 동시에 존재해 유저에게 혼란을 줄 수 있다.
- 신버전에서 발생하는 장애가 그대로 유저에게 노출될 수 있다.
Blue-Green 배포
Blue-Green배포는 2개의 서버 군을 가지고 기존 운영하는 서버군을 Blue, 신규 버전을 배포한 서버군을 Green이라고 부릅니다. Green에 신버전을 배포하고 테스트가 완료되면, 로드 밸런서를 조작해 Blue에서 Green으로 라우팅을 변경하는 배포 전략입니다.
Blue-Green 배포의 특징은 다음과 같습니다.
장점
- 실제 운영 환경에서 테스트가 가능하다.
- 라우팅 변경을 통해 빠른 복구가 가능하다. (Green에서 Blue로 다시 변경)
단점
- 서버 자원이 많이 필요하다 (Blue, Green을 모두 유지하기 때문)
카나리 배포
카나리 배포는 광부들이 광산의 위험성을 체크하기 위해 카나리아 새를 먼저 보내서 체크하던 방법에서 유래한 배포 전략입니다. 트래픽의 일부를 신버전 서버에 전송해 테스트를 거친 이후, 점진적으로 그 트래픽의 비율을 높입니다.
카나리 배포의 특징은 다음과 같습니다.
장점
- 실제 유저를 대상으로 테스트가 가능합니다.
- 오류 발생 시 일부 트래픽으로만 한정할 수 있다.
- 구버전으로의 신속한 롤백이 가능하다.
단점
- 트래픽 제어 과정이 복잡하다.
- 호환성 문제가 발생할 수 있다.
- 적은 양의 트래픽(10%, 30%)에서는 발생하지 않던 문제가 높은 트래픽(100%)에서 발생할 수 있다.
마무리
지금까지 무중단 배포의 필요성 및 개념과 전략에 대해서 알아봤습니다. 개념이나 그 특징 자체가 어렵지는 않았지만 실제로 구현하는 과정은 복잡할지도 모르겠습니다. 무중단 배포는 고객들의 불편한 경험을 해소하고, 조금 더 민첩한 서비스를 만드는데 도움이 될 것이라고 생각합니다. 이 글을 우연히 읽고 나서 서비스에 무중단 배포를 도입하고자 생각이 든다면 좋겠습니다.
이미지 출처
게임 4대 명검 이미지 : http://upload.inven.co.kr/upload/2014/04/03/bbs/i0829604244.jpg
토스 뱅크 송금 이미지 : https://x.com/hyunbinseo97/status/1638557447572029440
참고 자료
삼성 SDS, 무중단 배포 아키텍처(Zero Downtime Deployment)- 글로벌 서비스 운영의 필수 요소
내가 개발자라니, [DevOps/Infra] 무중단 배포란?(Rolling, BlueGreen, Canary)
박상민, ✏️ 무중단 배포 전략(Zero-downtime Deployment)
평범한 직장인이 사는 세상, 무중단 배포란 무엇인가? (롤링 배포, 블루-그린 배포, 카나리 배포)
SK(주) C&C's TECH BLOG, 아마존 비즈니스 민첩성의 비밀