"배포(deployment)"는 소프트웨어나 애플리케이션을 사용 가능한 상태로 만들어 사용자가 이용할 수 있도록 하는 과정을 말합니다. 이는 개발한 소프트웨어를 실제 운영 환경에 설치하고 실행하는 것을 의미합니다.
배포는 개발주기 마지막 단계로 안정적인 서비스 제공을 위해 중요한 과정이다. 배포와 테스트를 자동화해주는 다양한 툴들도 존재한다.
이 글에서는 배포 시 무중단 배포가 왜 필요한지, 어떤 방법들이 있는지 알아보자.
무중단 배포를 하지 않는다고 생각해보자.
실시간으로 사용자 1억명이 나의 서비스를 사용중이다.
새 버전을 반영하기 위해서 서비스를 잠시 중지하고 업데이트 후 다시 가동해야한다.
이렇게 할수도 있겠지만 어느 서비스가 이렇게.. 나쁜 사용자 경험을 줄 수 있는 배포 방식을 택할까?
그래서 이런 다운타임을 최소화하거나 혹은 없도록하기 위한 무중단 배포가 필요하다.
무중단 배포 전략에는 크게 3가지가 있다.
롤링 배포란 새로운 버전을 점진적으로 적용하는 방식으로
로드 밸런서가 배포중인 서버에는 트래픽을 분배하지 않고 완료 후에 다시 연결하는 방식이다.
이 과정에서 일시적으로 구,신버전이 동시에 존재하므로 호환성에 문제가 있을 수 있으며 일시적으로 인스턴스가 줄어드는 점도 고려해야 한다.
장점
단점
이전 버전을 Blue, 새 버전을 Green이라 불러서 붙여진 이름이다.
아예 완전히 새로운 버전이 배포된 인스턴트를 구성하고 구성 완료되면 로드밸런서를 새로운 버전으로 넘긴다.
장점
광산의 위험을 감지해주던 카나리아 새에서 따온 이름이다.
이름처럼 신버전의 오류를 미리 감지할 수 있다는 방식이다.
10% 유저에게만 신버전으로 이용하도록 하고 문제가 없을 경우 점진적으로 나머지 비율도 새 버전으로 넘겨간다.
장점
참고자료
https://2cloud.io/blog/zero-downtime-during-deployment
https://hudi.blog/zero-downtime-deployment/
https://velog.io/@roycewon/%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC%EC%99%80-Graceful-shutdown-Spring-boot-docker