개요
소프트웨어 개발에서 배포 전략은 서비스를 안정적으로 운영하기 위한 방법입니다. 배포 전략은 다양한 종류가 있으며, 각각의 특징에 따라 적합한 배포 전략을 선택하여 사용해야 합니다. 이번 블로그 포스트에서는 배포 전략의 종류와 사용법에 대해서 알아보도록 하겠습니다.
인플레이스 배포
인플레이스 배포(In-place deployment)는 금융기관이나 게임 업데이트처럼 유저에게 통지를 하고 그 시간에 서비스를 멈추고 업데이트하는 구조입니다.
- 운영중인 서버를 중지합니다.
- 새 애플리케이션을 배포합니다.
- 중지된 서버를 다시 시작합니다.
인플레이스 배포는 다음과 같은 장단점이 있습니다.
장점
- 모든 사용자는 항상 동일한 버전의 응용 프로그램을 사용합니다.
- 구버전, 신버전이 동시에 존재하지 않기 때문에, 호환성을 생각할 필요가 없고, 호환성을 지원하지 못해 발생하는 문제가 나올 가능성이 없다.
- 배포에 관한 인프라 구성이 필요없고, 배포도 간단하기 때문에 비용적으로 저렴하다.
단점
- 서비스를 일시 중지해야 합니다.
- 배포가 완료된 후, 문제가 있어 롤백할 필요가 있는 경우, 서비스를 멈춰야함으로 롤백하기 어렵다.
- 배포 도중 문제가 발생하면 서비스 중지 시간이 길어질 수 있습니다.
금융 기관처럼 배포 할 때 이전 버전과 새로운 버전에서 문제가 발생하면 중요한 문제(금전적 문제)가 되는 서비스, 또는 게임처럼 새로운 버전을 사용하지 않으면 새로운 아이템, 지도, 게임 시스템 사용할 수 없는 서비스는 인플레이스 배포 방법을 사용합니다.
롤링 배포
롤링 배포(Rolling-update Deployment)는 운용할 수 있는 서버 대수가 제한된 경우, 인플레이스 배포와는 달리 중단 없이 배포할 필요가 있는 경우, 사용하는 방법입니다.
- 현재 운영 중인 서버 중 하나를 외부(사용자)에서 액세스할 수 없도록 합니다.
- 액세스가 없는지 확인합니다.
- 액세스를 중지한 서버에 새 응용 프로그램을 배포합니다.
- 배포된 서버를 외부에서 액세스할 수 있도록 합니다.
- 새로 배포한 서버가 외부에서 액세스할 수 있는지 확인합니다.
- 모든 서버가 새 버전의 애플리케이션이 될 때까지 1~5를 반복합니다.
롤링 배포는 다음과 같은 장단점이 있습니다.
장점
- 중단 없이 배포할 수 있습니다.
- 여러 서버에 배포하기 때문에, 새롭게 배포한 서버에 문제가 발생하면 배포를 중단하거나 롤백할 수 있습니다.
- 여러 서버를 최대 이용 가능한 상황에서 배포하기 때문에 부하가 분산된다.
단점
- 서버 대수가 제한되어 있는 상태에서 서버 1대를 정지해 배포를 하기 때문에, 일시적 다른 서버에 부하가 걸릴 가능성이 있다.
- 1대씩 배포를 하기 때문에 전부 배포되기까지 상당히 시간이 걸린다.
- 구버전과 신버전이 동시에 운용되고 있으므로, 호환성이 있는 어플리케이션을 개발해 배포할 필요가 있다.
이 배포 방법은 운용 자금에 제한이 있어 서버를 늘릴 수 없는 서비스나 회사에서 사용하며, 중단 없이 서비스를 운용할 때 자주 사용합니다.
블루 그린 배포
블루 그린 배포(Blue/Green Deployment)는 서버의 제한이 없으며 서비스를 중단없이 배포하고 싶은 경우, 자주 사용하는 방법입니다. 새 버전의 어플리케이션을 프로덕션 환경에서 테스트하려는 경우에도 이 방법을 사용합니다.
- 새 버전을 배포하기 위한 서버(Green)를 만듭니다.
- 새로 만든 서버에 새 어플리케이션을 배포합니다.
- 새로운 액세스는 새로운 서버에 흐르게 하고, 기존의 서버(Blue)에는 새로운 액세스가 접근하지 못하도록 합니다.
- 새 서버에 액세스할 때 또는 새 어플리케이션에서 문제가 발생하면 새로운 액세스를 기존 서버로 흐르게 하여 롤백합니다.
- 새로운 서버의 액세스가 특별히 문제가 없으면 기존의 서버를 지웁니다.
블루 그린 배포는 다음과 같은 장단점이 있습니다.
장점
- 서비스를 중단 없이 배포할 수 있습니다.
- 새 버전을 배포할 때, 이전 버전의 서버가 아직 살아 있기 때문에 문제가 있었을 때 롤백이 빠릅니다.
- 새 버전과 이전 버전의 전환이 간단하기 때문에 프로덕션 환경에서 신버전을 테스트할 수 있다.
단점
- 새 버전과 이전 버전의 서버를 준비해야하므로 일시적인 비용이 두 배가 됩니다.
- 새 버전이 문제가 없는지 확인하고 이전 버전을 지우므로 배포를 완료하는 데 시간이 걸립니다.
- 배포를 완료하고 이전 버전의 서버를 삭제했다면, 롤백을 할 수 없습니다. 이 경우, 롤백하려면 이전 버전을 새로 배포해야 합니다.
새 버전과 이전 버전이 동시에 존재해도 문제가 없는 서비스로, 배포되는 도중에 기존 액세스를 강제적으로 끊지 않으므로, Session이나 Socket등을 사용하여 사용자의 액세스를 관리하는 서비스에서 사용합니다.
카나리 배포
카나리 배포(Canary deployment)는 A/B 테스트, 새로운 버전의 기능의 피드백이 필요한 경우, 서비스의 버전 업데이트를 신중하게 하고 싶은 경우, 개발중의 기능을 프로덕션 환경에서 테스트해 보고 싶은 경우에 사용할 수 있는 배포 방법입니다.
- 새 버전을 배포한 서버를 준비합니다.
- 서비스 액세스중 일부를 새 버전으로 돌립니다.
- 새로운 버전이 좋다고 판단되면 사용자의 액세스를 점진적으로 늘립니다.
- 좋지 않다고 판단되면 이전 버전의 서버에 사용자 액세스를 반환합니다.
- 모든 액세스가 새 버전의 서버로 돌아가면 이전 버전의 서버를 지웁니다.
카나리 배포는 다음과 같은 장단점이 있습니다.
장점
- A/B 테스트나 새로운 기능의 반응을 관찰하여 새로운 기능을 도입할지 여부를 결정할 수 있다.
- 롤백이 쉽습니다.
- 모니터링하면서 배포가 가능하므로 더 안전하게 배포가 가능하다.
단점
- 새 버전과 이전 버전의 서버를 준비해야하므로 일시적인 비용이 두 배가 됩니다.
- 새 버전이 문제가 없는지 확인하고 이전 버전을 지우므로 배포를 완료하는 데 시간이 걸립니다.
- 서비스를 사용하는 사람에 따라 보는 화면이 다르거나 새로운 기능을 사용할 수 없게 되기 때문에 UX 불일치 문제가 발생할 수 있습니다.
새로운 기능에 대해 A/B 테스트를 하고 싶은 경우, 사용자의 액세스가 많은 경우, 이 배포 방법을 사용합니다. 또는 개발 중인 기능을 프로덕션의 일부 트래픽을 받게 하여 문제가 없는지 확인할 때도 사용합니다.
완료
이것으로 소프트웨어 개발에서 서비스 배포 전략의 종류와 사용법에 대해서 알아보았습니다. 이 블로그 포스트가 현재 운영중인 서비스와 리소스에 따라 적합한 배포 전략을 선택하는데 도움이 되었으면 좋겠습니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.