개요
CI/CD는 지속적 통합 및 지속적 제공/배포를 의미합니다.
지속적 통합(CI: Continuous Integration)
지속적 제공/배포(CD : Continuous Delivery/Deployment)
지속적 통합이란?
지속적 통합은 개발자들이 코드를 자동으로 빌드, 테스트하여 통합하는 것을 의미합니다.
그렇다면 왜 지속적 통합이 필요할까요?
이를 이해하기 위해서는 기본적인 기능 개발 → 테스트의 과정을 이해할 필요가 있습니다.
작업자 3명이 기능 수정을 하게 될 경우, 실제 테스트는 3회보다 훨씬 많이 진행합니다.
작업자 수가 늘어날수록 테스트 횟수는 기하급수적으로 증가하게 됩니다.
이 경우, 기능 테스트를 자동화하지 못한다면 생산성이 기하급수적으로 떨어집니다.
시나리오
1명의 개발자는 공통 모듈 A를 개발하고 나머지 2명의 개발자가 각각 기능 a, b를 개발하고 있습니다. 기능 a, b는 내부에서 모듈 A를 사용하고 있습니다. 모든 코드는 수동으로 테스트하고 있습니다.
이 경우, 모듈 A의 변경으로 인해 a, b의 안정성이 떨어지지 않았음을 어떻게 보장할까요?
예를 들어, a → A → b 순서로 커밋(commit)을 하면 최소 몇 번의 테스트가 필요할까요?
1. 기능 a에 대한 테스트 진행
2. 기능 A에 대한 테스트 진행
3. 기능 A의 변경으로 인한 기능 a에 대한 테스트 진행, 사이드 이펙트 테스트
4. 기능 b에 대한 테스트 진행
하지만 기능 수정에 대한 안정성을 보장할 수 있고 이를 자동화할 수 있다면, 0번의 테스트로 이를 줄일 수 있습니다.
지속적 통합 과정에서 DevOps는 개발자와 함께 각각 다음의 역할을 담당합니다.
빌드 테스트
DevOps가 지속적 통합 중에 앱을 빌드함으로써, 빌드 결과물의 에러를 탐지
기능 테스트
개발자는 테스트 코드를 단위, 통합, E2E 테스트를 작성하여 이를 통해 코드 수정으로 인한 사이드 이펙트를 측정하고 제한할 수 있습니다.
DevOps는 지속적 통합 중에 테스트 코드를 실행함으로써, 안정성을 보장합니다.
즉, 제품은 지속적 통합을 통해 어플리케이션의 정상 작동에 대한 안정성을 보장해줍니다.
하지만 이 과정은 테스트 코드를 대한 팀의 문화가 필요하며, 동시에 개발자 분들과의 협업이 필요합니다.