CI/CD
배경
기존에 비해 프로젝트/코드의 규모가 매우 커졌고, 형상관리나 배포 등을 수동으로 하기 어려워졌다.
때문에 개발자가 직접 코드를 통합하고 관리하는 것보다는 자동화시키는 것이 필요해졌다.
CI/CD
CI/CD = Continuou Integration (지속적인 통합) + Continuous Delivery/Deployment (지속적인 배포)
CI/CD는 앱 개발을 자동화해서
더 짧은 주기로 고객에게 서비스를 제공하는 방법이다.
한번에 모든 기능을 테스트하는 것이 아니라,
분할하여 테스트를 진행함으로써 이를 도모한다.
장점
더 작은 단위로 더 자주 빌드~배포하기 때문에 아래와 같은 이점을 얻을 수 있다.
- 빌드 타임 ↓
- 품질 ↑, 고객 만족도 ↑
- 실패율 ↓
- 개발자 생산성 ↑ : 빌드/배포에 드는 시간을 줄임으로써 가능
주요 특징
- 빌드/테스트/배포의 과정을 분리한다.
- 적절한 public cloud를 사용함으로써 비용이나 자원을 줄일 수 있다.
- IaC(Infra as Code)를 이용할 수 있다.
- 인프라에 대한 형상관리가 가능하다.
- 코드이기 때문에 재사용이 가능하고 인프라 변경에 유연하다.
- Webhook을 이용하면 자동 빌드할 수 있고, 빠른 피드백이 가능하다.
- 빌드 실패/오류 발생 시 자동 롤백이 가능하다.
- 테스트 자동화
- 가장 오래 걸리는 단계이며, 배포 속도를 좌우한다.
- 단위 테스트, E2E 테스트, API테스트 등을 수행할 수 있다.
다양한 도구들
MSA, 컨테이너, 클라우드 등의 기술과 연계하여
배포 사이의 공백 시간을 줄이거나 지속적인 서비스를 제공할 수 있다.
요즘은 아래와 같이 다양한 도구들과 결합하여
각 파트를 자동화하고 모니터링 하고 있다.
DevOps & Agile
"빠르게 실패하고 수정하여 빠르게 이상향으로 가자"는 문화에 비롯된 개념들로,
Agile은 개발에 초점을 둔 방식이자 문화이고,
DevOps는 개발 뿐 아니라 지원, 관리 등까지 포괄하는 방식이자 문화이다.
이러한 문화로 인해 CI/CD의 중요성이 더 커지고 있다.
개발~배포의 빈도수가 잦아지며 매번 사람이 빌드하고 배포하기 힘들어졌기 때문이다.
주요 특징 : CALMS
- Culture
- Do not fail < Fail early
- 실패하기 보다는 빠르게 실패하고 수정하여 빠르게 이상향으로 가는 것을 원한다.
- 오류를 빠르게 발견한다면 이후 과정에서 발생할 비용(돈, 인력, 시간 등)을 줄일 수 있다.
- Automation : 최대한 자동화하여 규모가 크더라도 빠르게 작업할 수 있다.
- Lean : 작은 배치 사이즈, 작은 단위 개발을 통해 빌드~배포를 빠르게 할 수 있다.
- Measurement : 모니터링
- Share
- 원활한 의사소통의 문화를 지향한다.
- functional 조직 < 서비스 중심의 셀 조직
참고
댓글