Dev/Computer Science

CI/CD, 무중단 배포

두넌 2024. 4. 7.

서론

CI/CD와 무중단 배포에 관한 지식들을 공부하고, 정리했던 내용을 바탕으로 글을 작성해 보았습니다

혹시나 틀린 내용이 있다면 지적해 주시면, 바로 반영하도록 하겠습니다

 

CI/CD 란?

어플리케이션 개발 단계부터 배포까지 모든 단계를 자동화를 통해 효율적이고 빠르게, 빈번히 배포할 수 있도록 하는 개발 프로세스

 

CI 란?

  • Continuous Integration (지속적인 통합)
  • 개발을 진행하면서도 품질을 관리할 수 있도록, 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있는 것을 의미
  • 통합을 위한 단계의 자동화
    • 코드 변경사항 이후에도 빌드, 테스트를 자동화
    • Main Repository 에 주기적인 Merge → 추가된 코드와 함께 Build, Test 를 자동으로 실행
    • 문제가 있는 경우는 알려줌
  • 고객들의 시시각각 변하는 요구사항을 발빠르게 대응할 필요성이 생겨 등장하였다
    • XP(Extreme Programming)의 실천 방안 중 하나이다

 

CI 의 장점

  • 주기적인 Merge 가 이루어지기 때문에, 개발의 생산성이 향상된다
    • 자동으로 Build, Test 되기 때문에 문제점을 빠르게 식별할 수 있다
  • 코드의 변경 사항이 작기 때문에, 작은 단위의 문제를 확인할 수 있어 고치기 쉽다

 

CD 란?

  • Continuous Delivery / Deployment
    • 이 둘의 차이는 Production Release 까지 자동화를 안한다 / 한다 의 차이이다
  • 빌드의 결과물을 배포하는 단계 (배포 준비 → 검증 → 배포) 의 모든 과정을 자동으로 하는 것
  • Code → Build → Test → Staging → Deploy
    • Code → Build → Test : CI
    • Staging : Continuous Delivery (이후 QA 후 수동 배포)
    • Staging → Deploy : Continuous Deployment
  • 개발자가 코드의 병합을 요청 → CI (통합) → CD (배포) 하는 자동화된 프로세스를 거친다

 

CI / CD Tools

  • Jenkins, Travis CI, GitHub Actions …

 

서비스를 배포할 때 고려해야할 점

  1. 새로운 서비스를 배포하기 위해서는, 먼저 기존 서비스를 종료한다
  2. 기존 서비스가 종료되면 새로운 서비스를 기존 서비스에 통합한다
  3. 새로운 서비스를 시작한다

기존 서비스가 종료되고, 새로운 서비스가 시작되는 중간 과정이 다운 타임 이라고 한다

  • 서버가 정상적으로 요청을 수행할 수 없는 시간인 다운 타임을 해결하기 위하여 나온 것이 무중단 배포이다

이를 구현하는 여러 방법이 존재한다

  • AWS Blue-Green
  • Docker
  • L4, L7
  • NginX

 

무중단 배포 방식

Rolling 배포

  • 서버를 차례대로 업데이트 시키는 방식이다
  • 업데이트 할 첫번째 서버로 라우팅하지 않도록 설정하고, 새로운 버전으로 업데이트 한다
  • 업데이트가 완료되면, 라우팅하도록 설정한다
  • 두번째 서버, 세번째 서버도 이와 같은 방식으로 업데이트를 진행한다

장/단점

  • 차례대로 업데이트를 시켜주기만 하면 되기 때문에 관리가 간편하다
  • 사용중인 인스턴스에 트래픽이 몰릴 수 있다(순차적으로 업데이트가 되기 때문)
  • 구버전과 신버전이 공존하여 호환성의 문제가 발생할 수 있다

 

Canary 배포

  • 잠재적인 문제들에 대해 미리 대비할 수 있는 방식이다
  • 신버전을 소수의 사용자들에게만 배포하여 실제 환경에서 테스트해볼 수 있다
  • 문제가 없으면 점진적으로 사용자들에게 배포

장/단점

  • 문제 상황을 빠르게 감지 가능하며, A/B 테스트로도 활용이 가능
  • 모니터링 관리 비용, 구버전과 신버전 공존으로 인한 호환성 문제
A/B 테스트 : 새 서비스가 기존 서비스보다 좋은지를 정량적으로 평가할 수 있는 방식



Blue Green 배포

  • 예시
    • Blue, Green 에는 각각 3대의 서버가 존재한다
    • Blue 는 구버전의 서버(대기중인 서버) 이고, Green 은 신버전의 서버(현재 서비스되고 있는 서버) 이다
    • 새로운 버전을 Blue에 업데이트 시킨다. Blue는 대기중인 서버이기 때문에 아무런 문제가 없다
    • 업데이트가 완료되면, Green으로의 요청 전송을 중단하고, Blue로 보내도록 한다
    • 다음 업데이트 시에는 Green 에 업데이트 시키고, 위와 같은 작업을 수행한다

장/단점

  • 배포 속도가 빠르고 신속하게 롤백이 가능하다
  • 남아있는 환경을 다음 배포에 재사용 할 수 있다
  • 다만, 시스템의 자원이 2배로 필요하다는 단점이 있다

댓글