무중단 배포, CI/CD란?

2 분 소요

login();

안녕하세요, Log 입니다.

이번에 진행하던 Project에서 CI/CD와 무중단 배포를 적용하게 되었습니다.

이번 시리즈에서는 Nginx, Jenkins를 활용한 무중단 배포를 적용하기 까지의 과정을 담아보려합니다.

진행될 적용기에 앞서 이번엔 간단하게, 무중단 배포, CI, CD에 대해서 알아보겠습니다.


무중단 배포

무중단 배포란, 서비스를 지속적으로 제공하면서 새로운 기능이나 업데이트를 배포하는 것을 말합니다.

이를 위해서는 사용자의 요청에 응답하는 서비스가 지속적으로 제공되어야 합니다.

무중단 배포 방법

무중단 배포 의 방법에는 크게 3 가지,

블루 그린 배포, 카나리아 배포, 롤링 업데이트 방법이 있습니다.

블루 그린 배포

블루 그린 배포새로운 버전의 서비스를 새로운 환경에 배포하고,

트래픽 라우팅 규칙을 변경하여 새로운 환경에서 서비스를 제공하는 방식입니다.

이를 통해 서비스의 가용성과 안정성을 보장할 수 있습니다.

블루 그린 배포를 구현하는 방법에는 AWS ELB, Nginx 등 다양한 방법이 있습니다.

카나리아 배포

카나리아 배포새로운 버전의 서비스를 일부 사용자에게 먼저 제공하고,

성공적으로 제공되면 전체 사용자에게 제공하는 방식입니다.

이를 통해 새로운 버전의 서비스가 전체 사용자에게 영향을 미치지 않도록 보장할 수 있습니다.

카나리아 배포를 구현하는 방법에는 A/B 테스트, 로드 밸런서 등 다양한 방법이 있습니다.

롤링 업데이트

롤링 업데이트서비스를 서서히 업데이트하는 방식입니다.

이를 위해 서비스의 인스턴스를 차례로 업데이트하여 전체적으로 서비스가 중단되지 않도록 보장합니다.

롤링 업데이트를 구현하는 방법에는 컨테이너 오케스트레이션 도구, 쿠버네티스 등 다양한 방법이 있습니다.

무중단 배포 장,단점

무중단 배포를 채택 시 아래와 같은 장점을 얻을 수 있습니다.

  • 서비스 중단 시간을 최소화
  • 사용자의 요청에 응답하는 서비스를 지속적으로 제공
  • 서비스의 가용성과 안정성을 보장


반면 아래와 같은 단점도 고려해야 합니다.

  • 무중단 배포를 구현하는 데에는 추가적인 비용과 시간이 소요
  • 무중단 배포를 구현하는 데에는 복잡성이 증가
  • 원하는 시간대에 배포할 수 있게끔 사전에 배포 스케줄을 계획해 놓아야 하고,
    이를 제대로 수행하지 않을 경우 예기치 않은 장애가 발생 가능


무중단 배포 구성 요소

무중단 배포를 구성하는 요소는 아래와 같습니다.

로드 밸런서

로드 밸런서, LB는 서버에 분산되어 있는 트래픽을 분산시켜주는 역할을 합니다.

로드 밸런서를 통해 트래픽이 균등하게 분산되면서,

다수의 사용자가 동시에 서비스를 이용하는 경우에도 서비스의 가용성과 안정성을 보장할 수 있습니다.

Auto Scaling

Auto Scaling은 서버 자원을 동적으로 확장하거나 축소하여 사용자의 요구에 즉각적으로 대응할 수 있도록 해줍니다.

Auto Scaling을 사용하면 서버의 가용성과 확장성을 향상시킬 수 있으며,

서비스 이용량이 급증하는 경우에도 서비스를 안정적으로 제공할 수 있습니다.

데이터베이스

데이터베이스는 서비스에서 사용하는 데이터를 저장하고 관리하는 역할을 합니다.

무중단 배포를 위해서는 데이터베이스에 대한 고민도 필요합니다.

데이터베이스를 무중단으로 운영하기 위해서는 데이터베이스의 마스터-슬레이브 구성 등 다양한 방법을 사용할 수 있습니다.

모니터링

무중단 배포를 수행하기 위해서는 서비스의 상태를 지속적으로 모니터링하여,

서비스의 문제를 빠르게 발견하고 대응해야 합니다.

모니터링을 위해서는 로그 수집, 알람 설정 등 다양한 방법을 사용할 수 있습니다.



이번엔 CI, CD에 대해서 알아보겠습니다.

CI/CD

CI/CDContinuous Integration/Continuous Deployment 혹은 Continuous Delivery의 약어로,

소프트웨어 개발 프로세스에서 자동화된 빌드, 테스트, 배포를 지원하는 방법을 의미합니다.

CI/CD를 통해 소프트웨어의 품질 향상과 속도 향상을 동시에 달성할 수 있습니다.

CI/CD 구성 요소

CI/CD를 구성하는 요소에는 다음과 같은 것들이 있습니다.

소스 코드 관리 시스템

소스 코드 관리 시스템은 개발자들이 코드를 공유하고 관리하는 데 사용됩니다.

대표적으로는 Git이 있습니다.

소스 코드 관리 시스템을 사용하면 코드의 버전 관리와 협업이 용이해집니다.

빌드 자동화 도구

빌드 자동화 도구는 소스 코드를 컴파일하고 빌드하여 실행 가능한 어플리케이션으로 만드는 데 사용됩니다.

대표적으로는 Maven, Gradle 등이 있습니다.

테스트 자동화 도구

테스트 자동화 도구는 소프트웨어의 품질을 보장하기 위해 자동화된 테스트를 수행하는 데 사용됩니다.

대표적으로는 JUnit, Selenium 등이 있습니다.

컨테이너 오케스트레이션 도구

컨테이너 오케스트레이션 도구는 컨테이너 기반의 어플리케이션을 자동으로 배포, 스케일링, 관리하는 데 사용됩니다.

대표적으로는 Docker Swarm, Kubernetes 등이 있습니다.

배포 자동화 도구

배포 자동화 도구는 빌드된 어플리케이션을 서버에 자동으로 배포하는 데 사용됩니다.

대표적으로는 Jenkins, AWS CodeDeploy 등이 있습니다.

모니터링 도구

모니터링 도구는 배포된 어플리케이션의 상태를 지속적으로 모니터링하여, 장애 발생 시 빠른 대응을 할 수 있도록 도와줍니다.

대표적으로는 Nagios, Zabbix, Prometheus 등이 있습니다.


간단하게 무중단 배포, CI, CD에 대해서 살펴보았습니다.

다음 Post에서는 Nginx, Jenkins를 활용해,

Blue-Green 방식을 이용한 무중단 배포를 적용하는 과정에 대해 알아보겠습니다.

감사합니다.

logout();

댓글남기기