Zero downtime deployment

ou·2024년 1월 27일
0

basic

목록 보기
23/24

배포

"배포(deployment)"는 소프트웨어나 애플리케이션을 사용 가능한 상태로 만들어 사용자가 이용할 수 있도록 하는 과정을 말합니다. 이는 개발한 소프트웨어를 실제 운영 환경에 설치하고 실행하는 것을 의미합니다.

배포는 개발주기 마지막 단계로 안정적인 서비스 제공을 위해 중요한 과정이다. 배포와 테스트를 자동화해주는 다양한 툴들도 존재한다.
이 글에서는 배포 시 무중단 배포가 왜 필요한지, 어떤 방법들이 있는지 알아보자.

무중단 배포

무중단 배포가 왜 필요할까

무중단 배포를 하지 않는다고 생각해보자.
실시간으로 사용자 1억명이 나의 서비스를 사용중이다.
새 버전을 반영하기 위해서 서비스를 잠시 중지하고 업데이트 후 다시 가동해야한다.
이렇게 할수도 있겠지만 어느 서비스가 이렇게.. 나쁜 사용자 경험을 줄 수 있는 배포 방식을 택할까?

그래서 이런 다운타임을 최소화하거나 혹은 없도록하기 위한 무중단 배포가 필요하다.

전략

무중단 배포 전략에는 크게 3가지가 있다.

1. Rolling

롤링 배포란 새로운 버전을 점진적으로 적용하는 방식으로
로드 밸런서가 배포중인 서버에는 트래픽을 분배하지 않고 완료 후에 다시 연결하는 방식이다.
이 과정에서 일시적으로 구,신버전이 동시에 존재하므로 호환성에 문제가 있을 수 있으며 일시적으로 인스턴스가 줄어드는 점도 고려해야 한다.

장점

  • 많은 서버 자원이 필요하지 않음

단점

  • 인스턴스가 일시적으로 줄어드므로 트래픽 주의
  • 호환성

2. Blue/Green


이전 버전을 Blue, 새 버전을 Green이라 불러서 붙여진 이름이다.
아예 완전히 새로운 버전이 배포된 인스턴트를 구성하고 구성 완료되면 로드밸런서를 새로운 버전으로 넘긴다.

장점

  • 롤백이 원활하다
  • 호환성 문제가 없다
    단점
  • 2배의 인스턴스가 필요하므로 비용 문제

3. Canary

광산의 위험을 감지해주던 카나리아 새에서 따온 이름이다.
이름처럼 신버전의 오류를 미리 감지할 수 있다는 방식이다.

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

profile
경험을 현명하게 사용한다면, 어떤 일도 시간 낭비는 아니다.

0개의 댓글

관련 채용 정보