안정적인 배포를 위한 다양한 배포 전략
서버에서 발생가능한 다양한 장애 상황
서비스 운영 과정 속, 서버에는 정말 다양한 장애 상황이 발생 가능하다.
서비스 회사라면 이런 장애 상황에 정말 민감하게 반응할 수 밖에 없을 것이다.
장애 발생으로 인해 고객에게 영향을 끼치게 된다면, 서비스에 대한 신뢰가 떨어지고 고객이 이탈할 수 있다.
그렇다면 장애 상황의 원인에는 어떤 것들이 있을까?
폭발적으로 늘어난 트래픽
가장 먼저 폭발적으로 늘어난 트래픽이 있을 수 있다.
수강신청이나 티켓팅을 할 때에 특정 시간에 사람이 급격하게 몰린다면 흔히 볼 수 있는 장애이다.
서버나 네트워크의 물리적 장애
다음으로는 서버나 네트워크의 물리적 장애가 있을 수 있다.
가장 대표적인 사례로는 22년 10월 15일, SK C&C 판교 데이터센터에 화재가 발생하면서 카카오의 일부 서비스에 장애가 발생한 사건이 있을 것이다. 카카오의 모든 기능이 정상적으로 복구되는 데에는 5일의 시간이 걸렸고, 카카오는 이를 계기로 ‘시스템 전체의 이중화’를 적용하였다.
잘못된 코드가 배포
또한 오류가 있는 잘못된 코드가 서버로 배포된 경우도 있을 것이다.
이러한 경우에는 빠르게 이전 버전으로 롤백을 하는 등, 신속한 대응이 필요할 것이다.
장애 상황을 예방하는 방법
그렇다면 이런 장애 상황을 예방하려면 어떻게 해야할까?
물리적인 장애나 외적인 요소로 인해 발생하는 장애를 예방하는 것은 정말 어려울 것이다.
그렇지만 잘못된 코드가 배포되는 경우는 어떨까?
어떻게 하면 문제가 있는 코드를 빠르게 알아내고 서비스에 영향을 최소화하며 대응할 수 있을까?
아마 적절한 배포 전략을 통해서 새로운 코드를 서버로 배포하고 문제를 확인한다면 이를 최소화할 수 있을 것이다.
그렇다면 서버의 안정성을 높일 수 있는 다양한 배포 전략들에는 어떤 것이 있을까?
상황에 맞는 배포 전략들
롤링 배포
롤링 배포는 전체 시스템을 중단하지 않고 새로운 버전을 점진적으로 배포, 업데이트하는 방식이다.
롤링 배포의 과정
가장 먼저 첫번째 서버에만 새로운 버전을 업데이트한다.
CD 테스트로 첫번째 서버의 배포에 문제가 있는지 확인하고 문제가 있다면 롤백한다.
문제가 없다면 다음으로 두번째 서버를 업데이트한다.
이렇게 순차적으로 서버를 업데이트하며 모든 서버의 업데이트를 진행한다.
롤링 배포의 장점
- 전체 시스템의 처리 능력을 대부분 유지할 수 있다.
- 아래와 같은 경우 75%의 처리량을 유지할 수 있게 된다.
- 서버의 개수가 더 많다면 처리량을 더욱 높게 유지할 수 있을 것이다.
점진적인 적용을 통해 리스크를 최소화할 수 있다.
롤링 배포의 단점
블루그린 배포
블루그린 배포는 전체 시스템을 중단하지 않고 새로운 버전을 별도 환경에 배포하고 즉시 전환하는 방식이다.
블루그린 배포의 과정
먼저 기존의 서비스는 블루 환경에서 운영한다고 가정한다.
- 다음으로 새로운 버전의 배포를 위해 사용자가 없는 그린 환경에 새로운 버전의 소프트웨어를 배포한다.
- 해당 그린 환경에서 CD테스트를 하거나 개발자가 직접 다른 여러가지 테스트를 하기도 한다.
- 그린 환경에서 배포가 문제 없다고 확인되면 블루에서 그린으로 전환하여서 실제 유저들이 그린 환경을 사용하도록 한다.
- 이때 보통 로드밸런싱 설정을 변경하면서 블루그린 환경을 변경하고, 즉각적으로 변화가 반영되어 사용자는 이를 거의 느끼지 못한다.
- 또한 혹시 모르는 서비스 장애에 대응을 위해 일정시간 블루 환경을 유지하고 실제로 문제가 발생하면 다시 블루 환경으로 롤백하여 대응한다.
블루그린 배포 장점
- 즉각적인 전환과 롤백이 가능하다.
- 즉각적으로 버전 업데이트가 가능하고, 문제시에도 바로 롤백이 가능해 서비스 중단 시간을 최소화할 수 있다.
- 새 버전을 실제 환경과 동일한 조건에서 테스트할 수 있다.
- 이를 통해 예상치 못한 문제 발생을 많이 줄일 수 있고 성능 테스트도 진행이 가능하다.
블루그린 배포 단점
- 리소스 사용량이 많다.
- 아래와 같은 경우에는 서버가 2배로 필요하기 때문에 그만큼 비용이 발생한다.
- 복잡한 설정과 관리가 필요하다.
- 로드밸런서 설정, 네트워크 구성, 모니터링 설정 등 복잡한 설정이 필요하다.
롤링 배포와 블루그린 배포 비교
| 롤링 배포 | 블루그린 배포 | |
|---|---|---|
| 배포 방식 | 하나씩 순차적으로 진행 | 동일한 서버군 생성 후 한방에 전환 |
| 배포 속도 | 느림 | 빠름 |
| 문제 발생시 | 배포된 서버만 영향 | 모든 사용자가 영향, 롤백은 간단 |
| 비용 | 추가적인 서버가 필요하지 않음 | 일시적으로 두배의 리소스 필요 |
| 복잡성 | 상대적으로 단순 | 상대적으로 복잡 |
카나리 배포
카나리 배포는 일부 서버, 혹은 일부 사용자에게만 수정된 내용 반영하고, 부분적으로 문제가 없는지 확인하고 문제가 없다면 전체 서버에 배포하는 방식이다.
카나리 배포 과정
- 일부 서버에 배포시
- 일부 서버에만 새로운 버전의 서비스를 배포하고, 배포한 서버에서 문제가 없는지 확인한다.
- 롤링 배포와 비슷해 보일 수 있지만, 베포 성공 후 바로 다음 서버에 배포하는 것이 아닌 사용자를 모니터링한다는 점에서 다르다.
- 일부 사용자에 대해 배포시
- 사용자를 기준으로 카나리 배포 대상을 지정하려면 사용자가 가진 속성(id, 지역, 연령대 등)을 활용할 수 있다.
- 요청마다 무작위로 고를거라면 로드밸런서에 의해 자동으로 처리하도록 설정한다.
- 카나리 배포에서 문제 발생시
- 이전 버전으로 롤백될 수 있도록 한다.
카나리 배포의 장점
카나리 배포의 단점
- 설정, 관리가 어렵고 복잡하다.
- 적용을 위해서는 보통 카나리 배포를 위한 툴을 활용한다.
- 사용자 경험이 일관되지 않는다.
- 새로운 기능이라면 사용자들의 불만이 있을 수도 있다.
배포 타이밍
위와 같은 배포 전략뿐만 아니라 어떤 시점에 배포를 하는지도 서비스의 안정성에 많은 영향을 준다.