서론
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 …
서비스를 배포할 때 고려해야할 점
- 새로운 서비스를 배포하기 위해서는, 먼저 기존 서비스를 종료한다
- 기존 서비스가 종료되면 새로운 서비스를 기존 서비스에 통합한다
- 새로운 서비스를 시작한다
기존 서비스가 종료되고, 새로운 서비스가 시작되는 중간 과정이 다운 타임 이라고 한다
- 서버가 정상적으로 요청을 수행할 수 없는 시간인 다운 타임을 해결하기 위하여 나온 것이 무중단 배포이다
이를 구현하는 여러 방법이 존재한다
- 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배로 필요하다는 단점이 있다
댓글