CI/CD 배포 전략 정리

겔로그·2023년 10월 14일
0
post-thumbnail

개요

회사에 처음 입사한 뒤 처음으로 힘들었던 부분은 업무 용어에 대한 이해도가 떨어진다는 것이었습니다. 어떤 이야기를 해도 '어 이게 뭐지..?' 하는 용어들이 많아 대화 내용을 이해하는데 많은 어려움을 겪었습니다.

그런 대화 중 하나였던 것이 배포 전략에 대한 내용이었습니다. 학생 때와 다르게 회사에서는 서비스의 변경 사항을 반영하기위해 배포라는 업무를 진행해야 하는데요. 오늘은 어떤 배포 전략이 존재하고 각 배포 전략의 특징과 주의사항에 대해 이야기해보고자 합니다.

배포 전략이란?

우리는 요구사항이 빠르게 변화하는 시대에 살고 있습니다. 서비스 또한 이러한 변화에 알맞게 빠르게 변화해야 합니다.

배포란, 이러한 요구사항을 서비스에 반영해 고객에게 제공하는 일련의 행위를 의미합니다. 과거에는 이러한 배포가 몇 달 간격으로 진행된 반면, 최근에는 애자일(Agile)과 같이 변화하는 요구사항에 빠르게 대응하는 다양한 방법론이 트렌드가 되었습니다.

하지만 배포가 빠른 주기로 변화함으로 인해 운영 안정성에서 부정적인 측면이 증가하기 시작합니다. 위험을 최소화하고 안정적으로 수행할 수 있는 배포 방식을 찾게 되었고, 아래와 같은 다양한 배포 전략이 생기기 시작했습니다.

배포 전략 목록

  • 인플레이스 배포 (In-place Deployment)
  • 롤링 배포(Rolling Update Deployment)
  • 블루/그린 배포(Blue/Green Deployment)
  • 카나리 배포(Canary Deployment)

인플레이스 배포 (In-place Deployment)

인플레이스 배포란, 현재 운영중인 인프라에서 변경 사항이 있는 애플리케이션을 그대로 변경하는 방식입니다.

배포 순서

롤링 배포(Rolling Update Deployment)

롤링 배포는 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체하는 것으로 무중단 배포의 가장 기본적인 방식입니다. 운영중인 인스턴스를 순차적으로 재배포 함으로 서비스 운영간 중단없이 기능을 제공할 수 있습니다.

장단점

장점

  • 서비스 중단이 없습니다.(무중단 배포)
  • 추가 인프라를 구성하지 않고 배포가 가능합니다.

단점

  • 배포 중간 단계에서 기존 버전/신규 버전이 함께 운영되어 일부 상황에서는 문제가 발생할 수 있습니다.

블루/그린 배포(Blue/Green Deployment)

블루/그린 배포는 동일한 구성의 새로운 인프라를 활용해 변경 사항이 있는 애플리케이션을 실행하는 방식입니다.

  • Blue: 기존에 운영되던 인프라
  • Green: 새로운 변경사항이 적용된 인프라

로드밸런서의 트래픽을 그린 인프라로 옮겨 변경사항이 적용된 인프라로 트래픽을 한 번에 이동하는 방식입니다.

장단점

장점

  • 서비스 중단이 없습니다. (무중단 배포)
  • 오류가 발생할 경우 빠르고 원활하게 롤백할 수 있습니다.

단점

  • 두 개의 인프라를 구축하여 사용해야 하기 때문에 서버 비용이 2배로 듭니다.
  • 두 개의 인프라를 관리해야 합니다.

카나리 배포(Canary Deployment)

카나리 배포는 일부 서버만 배포하여 기존 운영 환경과 공존시키는 배포 전략입니다.
일부 서버만 변경하므로서 변경 사항에 문제가 없는지 확인하고, 이상이 없을 경우 전체 서버를 배포하는 방식입니다.

장단점

장점

  • 문제가 있을 경우 변경한 특정 서버만 롤백하면 됩니다. (영향도 최소화)
  • API Gateway를 이용한 트래픽 유입 변경, A/B 테스트 등 카나리 배포를 통한 다양한 전략을 추가해 운영 환경에 적용할 수 있습니다.

단점

  • All-at-once가 아닙니다.
  • 기존 버전/신규 버전이 함께 운영되어 일부 상황에서는 문제가 발생할 수 있습니다.

실무에서는 어떨까?

다른 팀에서는 어떤 배포 전략을 사용하고 있을지 잘 모르지만 현재 제가 다니는 회사에서는 카나리 - 롤링 배포 전략을 사용하고 있습니다.

먼저 서버 한 대를 배포해보고 정상적으로 실행/기능 동작을 할 경우 전체 인프라에 대해 롤링 배포를 진행하는 방식입니다.

주변 지인들에게 배포 전략에 대해 물어보니 인플레이스 배포 방식을 제외하고 다양하게 사용하는 것을 알 수 있었습니다. (추가로 블루/그린은 확실히 인프라 비용이 부담이라고 하네요 ㅎㅎ..)

결론

배포 전략에는 여러가지가 있으며, '어떤 방식이 더 좋다!'라고 할 것 없이 상황에 알맞게 배포 전략을 짜는게 좋을 것 같습니다. 대표적인 예시는 아래와 같습니다.

배포간 구/신 버전이 동시에 공존하면 안되는 경우

  • 블루/그린 배포

무중단 배포

  • 롤링 배포
  • 블루/그린 배포
  • 카나리 배포

운영환경에서 최소한으로 테스트 해보고 싶은 경우

  • 카나리 배포

현재 개발/운영하고 있는 소프트웨어의 성격이 어떤지 확인하고 알맞은 배포 전략을 선택하시길 권장드립니다.

감사합니다.

Reference

EKS Blue/Green 배포 1부
매번 헷갈리는 CI/CD 배포 전략 정리해버리기
무중단 배포 아키텍처(Zero Downtime Deployment)- 글로벌 서비스 운영의 필수 요소

profile
Gelog 나쁜 것만 드려요~

0개의 댓글