✅ 사전 지식
1. CI/CD
CI
CI (Continuous Integration)는 지속적 통합이라는 뜻으로, 개발자를 위해 빌드와 테스트를 자동화하는 과정을 의미합니다. CI는 변경 사항을 자동으로 테스트해 애플리케이션에 문제가 없다는 것을 보장합니다. 그리고 코드를 정기적으로 빌드하고, 테스트하여 여러 명이 동시에 작업을 하는 경우 충돌을 방지하고 모니터링할 수 있습니다.
보통 코드 변경 사항이 깃허브와 같은 코드 저장소에 업로드되면 CI를 시작하고, CI 도중 문제가 생기면 실패하므로 코드의 오류도 쉽게 파악할 수 있습니다.
CD
CD는 CI 작업을 끝낸 다음 실행하는 작업으로, 배포 준비가 된 코드를 서버에 배포하는 작업을 자동화합니다. CI가 통과되면 개발자가 수작업으로 코드를 배포하지 않아도 자동으로 배포가 되어, CD는 지속적 제공과 지속적 배포라는 의미를 가집니다.
지속적 제공 (Continuous Delivery) :
애플리케이션에 적용한 코드의 빌드와 테스트를 성공적으로 진행했을 때 깃허브와 같은 코드 저장소에 자동으로 업로드하는 과정을 의미합니다. 최소의 노력으로 코드 배포를 쉽게 하는 것을 목표로 합니다.
지속적 배포 (Continuous Deploy) :
지속적 제공을 통해 성공적으로 병합한 코드 내역을 AWS와 같은 배포 환경으로 보내는 것을 의미합니다. 릴리즈(Release)라고도 하며, 지속적 배포는 지속적 제공의 다음 단계까지 자동화합니다. 즉 개발자가 애플리케이션에 변경 사항을 커밋한 후 애플리케이션을 자동으로 배포되어 적용됩니다.

2. 리버스 프록시 & 로드 밸런싱

리버스 프록시(Reverse Proxy) : 클라이언트 요청을 받아서 내부 서버로 전달하고, 응답도 대신 받아 전달
로드 밸런싱(Load Balancing) : 특정 알고리즘에 의해 여러 백엔드 서버로 트래픽을 분산시키는 역할, 로드밸런서에 의해 동작
최근에는 서버 앞단에 Nginx를 두어 리버스 프록시와 로드 밸런서 역할을 함께 수행하도록 구성하는 방식이 널리 사용되고 있습니다.
✅ 무중단 배포 방식
1. 롤링 배포

무중단 배포의 가장 기본적인 방식으로, 서버를 차례대로 업데이트시키는 방식입니다.
서비스 중인 인스턴스 하나를 로드밸런서에서 라우팅 하지 않도록 한 뒤, 새 버전을 적용하여 다시 라우팅 하도록 합니다. 이를 반복하여 모든 인스턴스에 새 버전의 애플리케이션을 배포합니다.
- 장점
- 인스턴스마다 차례로 배포를 진행하기 때문에 상황에 따라 롤백이 쉽다.
- 인스턴스를 추가하지 않아도 되므로 관리가 간편하다.
- 단점
- 새 버전을 배포할 때 인스턴스 수가 감소하기 때문에 서비스 처리 용량을 고려해야 한다.
- 배포가 진행되는 동안 구버전과 신버전이 공존하기 때문에 호환성 문제가 발생할 수 있다.
2. 블루-그린 배포

Blue(구버전)와 Green(버전) 두 환경을 준비해, 새 버전이 완전히 준비되면 트래픽을 한 번에 Green으로 전환하는 방식입니다.
- 장점
- 구버전과 동일한 운영 환경으로 신버전의 인스턴스를 구성하기 때문에 실제 서비스 환경에서 미리 테스트할 수 있다.
- 빠른 롤백이 가능하다.
- 배포가 완료된 후 남아 있는 기존 버전의 환경을 다음 배포에 재사용할 수 있다.
- 단점
- 시스템 자원이 두 배로 필요하다.
- 새로운 환경에 대한 테스트가 전제되어야 한다.
3. 카나리 배포

신버전을 소수의 사용자에게만 먼저 배포해 문제없음을 확인한 뒤 점진적으로 전체로 확장하는 방식입니다. 잠재적 문제 상황을 미리 발견하기 위한 방식으로, 신버전의 제공 범위를 늘려가면서 모니터링 및 피드백 과정을 거칠 수 있습니다.
- 장점
- 신버전의 배포 전에 실제 운영 환경에서 미리 테스트한다는 점이 블루-그린 배포와 비슷하지만, 카나리 배포는 단계적인 전환 방식을 통해 부정적 영향을 최소화하고 상황에 따라 트래픽 양을 늘리거나 롤백할 수 있다.
- 단점
- 롤링 배포와 마찬가지로 구버전과 신버전이 운영되기 때문에 버전 관리가 필요하다.