요즘 소프트웨어 개발에 가장 큰 변화는 배포 빈도입니다. 운영팀은 릴리즈를 운영에 더 자주, 빠르게 배포합니다

달 혹은 년 릴리즈 주기는 드물어 지고 있습니다.

오늘날, 서비스 지향 아키텍처 및 마이크로서비스 접근 방식을 사용하여 코드 기반의 모듈을 설계할 수 있습니다.

이를 통해 소스 수정과 배포를 동시에 할 수 있습니다.

하지만, 이런 변화는 운영, DevOps팀에 새로운 문제를 만듭니다. 잦은 배포는 사이트의 신뢰도와 고객들에게 부정적인 영향을 미칠 수 있습니다. 그래서 리스크를 최소화하는 배포 전략이 중요합니다.

Big Bang Deployment

Big Bang 배포는 어플리케이션의 전체 혹은 대부분을 한번에 업데이트 합니다. 그래서 릴리즈 하기전 광범위한 개발과 테스트 수행을 필요로 합니다.

 

특징

  • 하나의 배포에 모든 중요 부분이 포함됨
  • 기존 소프트웨어 버전을 한번에 새로운 것으로 교체함
  • 오랜기간 개발 및 테스트를 거치고 배포함
  • 롤백이 불가능할 수 있으므로 실패를 최소로 가정한다.
  • 배포 완료 시간이 매우 오래걸린다.

Rolling Deployment

Rolling 배포는 어플리케이션의 버전을 점진적으로 교체하는 방식이다. 실제 배포는 오랜 기간동안 진행된다. 배포 동안 old, new 버전은 user experience, 기능에 영향을 주지 않으면서 동시에 존재하게 된다. 이러한 프로세스를 통해 새로운 component에 대해 더 쉽게 롤백할 수 있다.

즉, 서버를 한 대씩 구 버전에서 새 버전으로 교체해가는 배포전략이다. 이와 같은 방식은 서버 수의 제약이 있을 경우 유용하나 배포 중 인스턴스의 수가 감소하므로 서버 처리 용량을 미리 고려해야 한다.

Blue-Green

이 방법에서는 두개의 동일한 운영환경의 서버가 병렬로 동작한다.

하나는 현재 모든 트래픽을 받고 있는 운영 서버이고, 다른 하나는 운영 서버와 동일한 클론 서버다. 둘 다 모두 동일 환경, 설정을 가지고 있다.

새로운 버전 어플리케이션이 클론서버에 배포되고 기능 및 성능 테스트가 진행된다. 테스트 후 어플리케이션 트래픽을 기존 운영서버에서 새로운 클론서버로 전환한다.

만약 클론서버에서 문제가 발생할 경우 기존 운영서버로 트래픽을 전환하면 된다.

 

특징

  • 빠른 롤백이 가능하다.
  • 운영 환경에 영향을 주지 않고 실제 서비스 환경으로 테스트 할 수 있다.
  • 자원이 두배로 필요하다.

Canary Deployment

Canary

  • 우리가 흔히 알고 있는 카나리아 새를 의미한다. canary라 쓰는데 새 이름은 카나리아이다.
  • 탄광에서 유독가스의 누출 위험을 알리는 용도로 사용됨
  • 유독가스가 많이 누출되어 사람이 느낄 수 있게 되면 매우 위험한 상태
    • 유독가스에 민감한 카나리는 그 보다 먼저 반응하여 죽기 때문에, 누출을 사전에 인지 가능

새로운 어플리케이션 코드를 운영 인프라 일부에만 배포한다.

그리고 일부 트래픽을 새 버전으로 분산하여 영향을 최소화 한다.

오류가 없을 경우 새로운 버전의 코드는 점진적으로 나머지 인프라에 점진적으로 롤아웃한다.

Canary Deployment의 주요 챌린지는 일부 사용자를 새로운 어플리케이션으로 라우팅하는 것이다.

아래와 같은 방법으로 일부 사용자를 라우팅한다.

  • 외부 사용자가 접속하기 전에 내부 사용자에게만 라우팅한다.
  • Source IP ragnge를 기반으로 라우팅한다.
  • 특정 지역에만 어플리케이션을 릴리즈 한다.
  • 어플리케이션 로직을 사용하여 특정 유저, 그룹에게만 새로운 기능을 사용할 수 있도록 한다.

특징

  • 카나리 버전에 심각한 버그가 발생된다고 해도 사용하는 사용자가 적기 때문에 피해 최소화 가능
  • 안정적인 버전과 테스트 버전이 모두 배포된 상태이기 때문에 A/B 테스트, 블루그린 배포 가능

 

참고

- https://dev.to/mostlyjason/intro-to-deployment-strategies-blue-green-canary-and-more-3a3

 

Intro to deployment strategies: blue-green, canary, and more

With modern CI/CD and microservices, developers deploy more frequently, but they must avoid breaking production. We describe deployment strategies so you can deploy with confidence.

dev.to

- https://onlywis.tistory.com/10

 

배포 전략: Rolling, Blue/Green, Canary

예전에는 수 개월(혹은 수 년)에 한 번씩 서비스를 릴리즈 했었지만, 최근에는 서비스를 더 작게 만들고(마이크로서비스) 더 자주 배포(Deployment) 하는 방식으로 변화하고 있다. 이러한 트렌드에

onlywis.tistory.com

 

 

- https://itwiki.kr/w/%EC%B9%B4%EB%82%98%EB%A6%AC

 

카나리 - IT위키

 

itwiki.kr

 

'CI CD' 카테고리의 다른 글

Jenkins + SpringBoot + AWS EC2 배포 (3)  (1) 2021.11.30
Jenkins + SpringBoot + AWS EC2 배포 (2)  (0) 2021.11.28
Jenkins + SpringBoot + AWS EC2 배포 (1)  (0) 2021.10.28

+ Recent posts