# 무중단 배포

  • 서비스에 다운 타임이 발생하지 않으면서 새로운 버전의 애플리케이션을 서버에 배포하는 것
    • 롤링 배포 : 순차적으로 배포하는 방법
    • 블루/그린 배포 : 전체 서버를 통째로 바꾸는 방법
    • 롤링 배포 : 트래픽을 순차적으로 이동시키는 방법

# 롤링 배포

  • 서버를 한 대씩 순차적으로 업데이트하는 방식
  • 특정 시점에는 두 가지 버전이 공존하기 때문에 하위 호환성에 신경써야 함
  • 새로운 버전을 배포하기 위해 새로운 서버를 생성하지 않음
  • 배포가 진행 중인 서버는 요청 처리가 불가능하기 때문에 다른 서버에 가는 트래픽이 증가할 수 있음

# 블루/그린 배포

  • 기존 서버와 동일한 스펙의 서버를 준비하고, 신규 버전을 배포한 이후에 기존 서버는 폐기하고 트래픽을 신규 서버로 이전시키는 방식
  • 이전 버전의 서버를 가지고 있기 때문에 가장 빠르게 롤백 가능
  • 배포 과정에서 새로운 서버를 미리 준비해야 하기 때문에 비용이 발생할 수 있음

# 카나리 배포

  • 기존 버전의 서버와 새로운 버전의 서버들을 구성한 후, 전체 트래픽의 퍼센티지로 관리하는 방법
  • 예를 들어 트래픽을 기존 70%, 신규 30%으로 나누고 점점 신규 서버로 트래픽을 보내어 신규 서버가 100%가 되면 배포 완료
  • 롤링 배포처럼 특정 시점에 버전이 다른 두 서버가 공존하기 때문에 하위 호환성에 신경써야 함

# 배포 전략 선택

# 롤링 배포

  • 배포를 위해 새로운 서버를 생성하는 비용을 감수하기 어려운 경우
  • 서버 개발 중 버그가 발생했을 때 개발 서버에서 충분히 테스트한 이후 상용에 올려보고 싶을 때
    • 서버 10대 중 1대만 버그를 수정해서 배포하고 디버그 레벨로 로깅을 하면서 수정한 버그가 해결되었는지 확인
    • 문제가 없다면 롤링 배포 진행

# 블루/그린 배포

  • 대규모 업데이트가 있을 경우
  • 전면적으로 기술 부채가 해결되거나 중요한 변화가 있는 경우 비용을 감수하고 블루/그린 배포를 채택하는 것이 유용할 수 있음

# 카나리 배포

  • 통계적으로 무언가 확인하고 싶은 것이 있을 때 (오류율, 성능)
  • A/B 테스트를 하고 싶을 때

# A/B 테스트

  • 웹사이트나 앱의 사용자 그룹을 두 그룹으로 나누어, 각기 다른 버전(A와 B)을 노출한 뒤 어떤 버전이 더 나은 성과를 내는지 측정하는 방법
  • 이를 통해 전환율, 이탈률 등 주요 지표를 기반으로 가장 효과적인 디자인, 문구, 알고리즘 등을 결정 가능