https://www.youtube.com/watch?v=sIPU_VkrguI
다음 강의를 듣고 CI/CD와 무중단 배포에 대해 정리해보았습니다.
CI란?
- Continuous Integration
- 지속적 통합
- 고객의 요구사항에 빠르게 대응하기 위해 나온 XP의 실천방안 중 1가지
- 개발을 진행하면서도 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미함.
- 과정: 개발자가 코드 병합을 요청 -> Jenkins와 같은 CI tool이 Build, Test 진행 -> 이때, 이상이 없으면 코드를 병합함. 문제가 발생할 경우, 개발자에게 빠르게 피드백해줌.
<마틴 파울러가 제시하는 CI의 4가지 규칙>
- 모든 소스코드가 살아 있고 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지할 것
- 빌드 프로세스를 자동화해서 누구든 소스로부터 시스템을 빌드할 수 있게 할 것
- 테스팅을 자동화해서 언제든지 시스템에 대한 건전한 테스트 수트를 실행할 수 있게 할 것
- 누구든 현재 실행 파일을 얻으면 지금까지 가장 완전한 실행 파일을 얻었다는 확신을 하게 할 것
CD란?
- Continuous Deployment
- 지속적 배포
- 빌드의 결과물을 프로덕션으로 릴리스하는 작업을 자동화하는 것을 의미한다.
CI/CD 흐름
개발자가 코드의 병합을 요청하면, CI/CD tool이 Build, Test를 진행함. (이때, 에러가 발생하면 개발자에게 빠르게 피드백을 줌,)
이상이 없다면 코드를 병합한다.
이후 CD 과정을 거쳐, 서버에 자동으로 배포할 수 있게 된다.
CI/CD tool
- Jenkins
- Travis CI
- Github Actions
무중단배포란?
- 다운타임 없이 서버를 운영할 수 있게 해주는 배포 방식
- Rolling, Canary, Blue-Green이 존재
무중단 배포 구현 방법
- AWS에서 Blue-Green 무중단 배포
- Docker를 이용한 무중단 배포
- L4, L7 스위치를 이용한 무중단 배포
- Nginx를 이용한 무중단 배포 -> 쉽고 저렴해서 많이 사용됨!
리버스 프록시란?
- 인터넷과 서버 사이에 위치한 중계 서버
- 클라이언트가 요청한 내용을 캐싱
- 서버 정보를 클라이언트로부터 숨길 수 있어 보안에 용
- 클라이언트의 요청을 대신 받아 서버에 전달하는 대리 서버
로드 밸런싱이란?
- 부하 분산
- 클라이언트의 요청을 여러 서버에 분산해주는 역할
- 하나의 서버가 멈추더라도 서비스 중단 없이 다른 서버가 서비스를 계속 유지할 수 있는 무중단 배포가 가능
무중단 배포 방식
- Rolling 배포
무중단 배포의 가장 기본적인 방식
서버를 차례대로 업데이트 시키는 방식
장점:
인스턴스를 추가하지 않아도 돼서 관리가 간편
단점:
사용중인 인스턴스에 트래픽이 몰릴 수 있음
구버전과 신버전의 공존으로 인한 호환성 문제 발생할 수 있음.
- Canary 배포
옛날 광부들이 유독 가스에 민감한 카나리아 새를 이용해 가스 누출 위험을 감지했던 것에서 유래
신버전을 소수의 사용자들에게만 배포
문제가 없는 것이 확인되면 점진적으로 다른 서버에 신버전 배포
장점:
문제 상황을 빠르게 감지 가능
A/B 테스트로 활용 가능
단점:
모니터링 관리 비용
구버전과 신버전의 공존으로 인한 호환성 문제
- Blue / Green 배포
- Blue를 구버전, Green을 신버전으로 지칭
- 구버전과 동일하게 신버전의 인스턴스를 구성
- 신버전 배포 시 로드 밸런서를 통해 신버전으로만 트래픽을 전환
장점:
배포하는 속도가 빠름
신속하게 롤백 가능
남아 있는 기존 버전의 환경을 다음 배포에 재사용
단점:
시스템 자원이 2배로 필요
'코딩 > Server' 카테고리의 다른 글
CI/CD 배포 자동화 구축 (github action 이용) - 2. CD (0) | 2023.11.01 |
---|---|
Docker를 이용한 서버 배포 (0) | 2023.10.11 |
CI/CD 배포 자동화 구축 (github action 이용) - 1. CI (0) | 2023.10.10 |
AWS 서버 배포 - 하 (0) | 2023.10.10 |
AWS 서버 배포 - 상 (0) | 2023.10.09 |