배포 전략에 대해서
웹 개발 혹은 어떤 개발을 하더라도 서버가 있고 그곳에 나의 애플리케이션을 구동시킨다면 배포라는 것을 피할 수 없습니다. 그리고 배포의 방식의 차이는 잠깐의 서비스 중단을 만들 수도 있고 배포 시간이 길어지는 리소스적인 측면과도 관계가 있습니다.
이에 맞춰서 개발자들은 여러가지 배포 전략을 구상했습니다. 서비스의 멈춤 없이 무중단 배포를 진행하기 위해서 혹은 배포 후 오류가 났을 때 관리하기 위해서 같이 여러 이유에서 말이죠.
아래에서 가장 많이 사용하는 배포 전략들에 대해 간단히 알아보겠습니다.
여러 가지 배포 전략
- Rolling Update Deployment (롤링 배포)
- Blue Green Deployment (블루-그린 배포)
- Canary Deployment (카나리 배포)
Rolling Update Deployment (롤링 배포)
롤링 배포란 매우 단순하게 순서대로 배포를 진행하는 방식입니다.
장점
- 서버 수가 적더라도 사용할 수 있는 방법
- 배포 방식이 단순
- 한 번에 배포되는 서버 수를 조정할 수 있다
- 롤백이 쉽다
단점
- 배포 중에는 유효한 서버가 줄어들어서 처리 용량에 유의해야 한다
Blue-Green Deployment (블루-그린 배포)
블루 그린 배포는 레드-블랙 배포와 헷갈리는 부분이 있습니다. 사람들마다 얘기하는 것도 제각각인 것 같습니다.
아래 그림과도 조금의 차이가 있지만 정확한 순서는 아래와 같습니다.
- Blue 서버에서 구버전이 구동되고 있다.
- Blue와 똑같은 환경을 Green에 만들고 신버전을 Green에 배포한다.
- Blue(구버전)과 Green(신버전)이 동시에 구동된다.
- 이후 Blue(구버전)은 구동을 중단한다.
아래의 그림에서는 blue와 green 둘 중에 하나만 사용하는 것처럼 보이는데 제가 봤을 때는 잠시라도 구버전과 신버전이 같이 작동하는 위의 방식이 맞는 것 같습니다.
장점
- 신버전에 대한 테스트가 가능하다.
- 구버전과 신버전이 공존하는 시간을 짧게 할 수 있다.
- 구버전이 구동되는 시간까지는 롤백이 매우 쉽다.
단점
- 사용되는 서버의 2배를 보유하고 있어야 한다. (시스템 리소스가 많이 필요하다.)
Canary Deployment (카나리 배포)
카나리 배포의 이름은 위험을 감지하는 카나리 새에서 비롯됐습니다. 블루-그린 배포와 유사하지만 실제 트래픽을 일부 조절해 테스트를 해볼 수 있다는 장점이 있습니다. 트래픽을 조절하여 신버전과 구버전을 동시에 구동하면 성능 관련 테스트를 해볼 수 있습니다.
장점
- A/B 테스트가 가능하다. (+신버전 테스트 가능)
- 성능 테스트에 유용하다.
- 20% 트래픽을 보냈을 때 성능이 이 정도라면 문제가 있다..!
단점
- 실제 구동되는 서버의 2배의 리소스가 필요하다.
정리
위에서 설명드린 배포 방식들 외에도 있지만 가장 많이 사용되는 배포 방식들입니다. 그리고 무중단 배포를 위한 방식들이기도 합니다. 무중단 배포가 필요 없다면 그냥 서버 다 내리고 한 번에 올리는 게 편하겠죠.
그리고 위의 여러 방법을 조합해서 사용할 수 있습니다. Blue-Green 방식을 기반으로 트래픽을 조절해서 배포한다던지 롤링 배포 시에 하나의 서버만 Canary 배포처럼 활용해서 테스트하고 이후 롤링을 진행하는 방식도 가능할 것 같습니다.
따라서 배포 방식은 자유롭게 필요한 대로 맞춰서 사용하면 되는 것 같습니다.