현재 재직 중인 회사는 사실 아직 무중단 배포 환경이 아니다.
빌드 후 생성된 jar나 war를 직접 수동으로 배포하기 위해 서비스의 중단이 필연적인 상황이다.
서비스 이용자가 늘어나고 비즈니스 로직 추가 및 수정에 빈번하게 일어나며 무중단 배포에 대한 필요성을 더욱 절실히 느끼고 있다.
기회가 된다면 무중단 배포 환경을 만들어보고 싶은데..우선 공부를 해야한다.(당연히)
우선 무중단 배포에 대해서 알아보자.
무중단 배포란?
무중단, 말 그대로 서비스의 중단 없이 새로운 버전의 소프트웨어를 배포하는 것을 말한다.
앞서 말했듯 서비스를 운영 중일 때 새로운 버전을 배포하기 위해서는
- 기존의 서비스를 종료하고
- 새로운 서비스를 시작하는
과정이 필요하다.
이렇게 서비스가 중단되는 시간, 즉 시스템을 이용할 수 없는 시간을 다운타임(Downtime)이라고 한다.
운영 중인 서비스가 중단되어 이용할 수 없다는 것은..큰 문제이다.
이를 해결할 수 있는 방법이 바로 무중단 배포이다.
무중단 배포 방식
무중단 배포에는 Rolling, Blue Green, Canary 라고 하는 3가지 방식이 있다.
Rolling 배포
Rolling 배포는 사용 중인 인스턴스들에 새 버전의 서비스를 점진적으로 배포하는 방법으로 무중단 배포의 가장 기본적인 방식이다.
서비스 중인 인스턴스 하나를 로드 밸런서에서 라우팅하지 않도록 한 뒤, 새로운 버전의 서비스를 적용하여 다시 라우팅하도록 한다.
이를 반복해 모든 인스턴스에 새 버전의 서비스를 배포한다.
장점
- 인스턴스마다 차례로 배포를 진행하기 때문에 에러 등 이슈 발생 시 쉽게 롤백 가능하다.
- 기존의 인스턴스에 추가적인 인스턴스를 늘리지 않아도 된다.
- 관리에 용이하다.
단점
- 새 버전을 배포할 때 라우팅되어 있는 인스턴스의 수가 감소하기 때문에 정상 동작 중인 인스턴스에 트래픽이 몰릴 수 있다.
- 라우팅되어 있는 인스턴스들의 서비스 처리 용량을 고려해야 하는 이유이다.
- 배포가 진행될 때 기존의 버전과 새로운 버전이 함께 존재하기 때문에 호환성 문제가 발생할 수 있다.
Blue Green 배포
Blue는 기존 버전, Green은 새로 배포될 버전을 의미한다.
신 버전을 배포하고 일제히 전환하여 모든 연결이 신 버전을 바라보게 하는 전략이다.
운영 중인 구 버전과 동일한 신 버전의 인스턴스를 나란히 구성한 후 배포 시점에 로드 밸런서를 통해 모든 트래픽이 일제히 전환된다.
장점
- 구 버전의 인스턴스가 그대로 남아있어서 빠른 롤백이 가능하다.
- 운영 환경에 영향을 주지 않고 새 버전 테스트가 가능하다.
- 구 버전의 환경을 다음 배포에 재사용할 수 있다.
단점
- 시스템 자원이 두 배로 필요해 비용이 더 많이 발생한다.
Canary 배포
카나리 배포에 대해 설명하기 전 카나리에 대한 어원을 알아보자.
Canary의 사전적 의미에는 카나리아라는 새가 있다. 이 새는 유독가스에 민감해 옛날 광부들이 광산에서 가스 누출 위험을 감지하는 용도로 사용했다고 한다.
여기서 유래한 카나리 배포 또한 잠재적 문제 상황을 미리 발견할 수 있는 배포 전략이다.
지정한 서버 또는 특정한 유저에게만 배포했다가 정상적이면 전체를 배포한다. 서버의 트래픽을 일부 신 버전으로 분산시켜서 오류 여부를 확인할 수 있는 것이다.
블루 그린 배포와 유사한 듯 보이지만, 블루 그린과 같이 트래픽을 한 번에 바꾸는 것이 아니라, 단계적으로 전환한다.
장점
- 문제 상황을 빠르게 감지할 수 있어, 성능 모니터링에 유용하다.
- A/B 테스트가 가능하다.
- A/B 테스트 : 대조군과 실험군으로 나누어서 특정한 UI나 알고리즘의 효과를 비교하는 방법론
단점
- 네트워크 트래픽 제어에 부담이 될 수 있다.
'etc.' 카테고리의 다른 글
[Design Pattern] 싱글톤 패턴(Singleton Pattern)이란? (+ Java 예제) (0) | 2023.03.26 |
---|---|
[etc.] 티스토리 블로그 시작합니다 (1) | 2022.07.19 |