CI (Continuous integration) 란?
지속적 통합이라는 뜻이다. plan > code > build > test > release 까지의 과정이다. Test가 중심이 된다. 개발자들이 작성한 코드 변경 사항을 자주 통합하여 중앙 저장소에 업로드하는 과정이다. 코드 변경으로 인한 문제를 조기에 발견하고 해결하기 위함이다. > Test 가 중요하다.
주요 도구 : Jenkins, Travis CI, Circle CI 등 ...
CD (Continuous Delivery) 란?
지속적 제공이라는 뜻이다. 코드가 테스트를 통과하면 자동으로 프로덕션 환경에 배포되는 것을 의미한다. 소프트웨어의 배포 시간을 단축하고, 신속하게 사용자에게 새로운 기능을 제공하기 위함이다.
주요 도구 : Docker, Kubernetest, AWS CodeDeploy 등...

CI/CD 는 자동화된 빌드와 테스트를 진행하여 작업을 검증하고 게시하는 것이다. gitflow 와 같은 브랜치 병합 방법론에 따라 소스코드를 잘 관리해야 한다. CI는 필수이고, CD 는 옵션이다. 릴리즈 텀이 빠르면 필수고 아니면 굳이 필요하지 않다.
* 아래 두 가지를 구분하는 것이 중요하다.
CI : Image 👈 Container 를 실행할 수 있도록 하는 실행파일
CD : Containers 👈 실제
DevOps 란?
DevOps 는 개발을 하고 개발한 결과물이 Operation 으로 넘어가는 것까지 이해하고 개발하는 것이다. 컨테이너 환경까지 (배포 환경) 알고 개발할 필요가 있다. 서비스나 제품의 릴리즈를 위해서 개발팀과 운영팀 등이 협업하는 것이다. 더 빠르고 안정적으로 소프트웨어를 제공하기 위한 방법론이다.
DevOps의 핵심요소
협업
- 각 팀들 간의 원활한 소통과 협력이 중요하다. 서로의 역할을 이해하고, 공통 목표를 향해 함께 작업해야 한다.
자동화
- 빌드, 테스트, 배포 과정을 자동화하여 인간의 개입을 최소화하고, 오류를 줄이며, 효율성을 높인다. CI/CD 파이프라인이 대표적인 예이다.
모니터링 및 피드백
- 운영 환경에서 발생하는 문제를 실시간으로 모니터링하고, 이를 지속적으로 개선한다. 사용자의 피드백을 신속하게 반영할 수 있는 체계를 갖추는 것이 중요하다.
지속적 개선
- 프로세스와 문화의 지속적 개선을 추구한다. 소프트웨어 품질과 개발 속도를 향상시킨다.
DevOps 9 Metrics (DevOps 의 9가지 핵심 지표)
배포 빈도 (Deployment Frequency)
얼마나 자주 새로운 코드를 배포하는가. 6개월에 1번 배포하면 DevOps 는 필요하지 않다. 높으면 좋지만 부담된다.
변경 양 (Change Volume)
배포될 때 새롭게 추가되는 코드나 스토리 개수이다. 작을수록 좋다.
변경 리드 타임 (Lead Time for Changes)
새로운 코드가 개발되어 운영까지 적용되는데 걸리는 시간이다.
복구 시간 (Mean Time to Recovery, MTTR)
실패했을 때 복구까지 걸리는 시간이다.
변경 실패율 (Change Failure Rate)
현황을 파악할 수 있는 기능이라 중요하다.
서비스 가용률 (Service Availability)
성능 지표 (Performance Metrics)
고객 만족도 (Customer Ticket Volume)
많을수록 좋다. Customer Support Volume 이라고도 한다.
카나리 배포 : 일부만 배포한다. 네트워크 routing 만 변경한다. 대규모 서비스는 대부분 이렇게 변경한다. 전체 트래픽의 일부 %만 보내는 식으로 한다.
green/ value 배포 : 물리적 서버를 이용하여 배포한다. 두 개의 환경을 유지하며 두개를 동시에 스위치하여 사용자에게 새로운 버전을 배포한다.
새로 가입한 유저 수 (Change in User Volume)
코드 품질 (Code Quality)