CI/CD에 대해서 정리하며, 맨 위에서 바라보는 CI/CD의 전체 밑그림을 파악하기를 기원하며 작성해본다.
개발자가 중앙 저장소
(Git)
에 코드를 자주 Commit 시,
자동으로 코드를Build
및Test
후,통합
하는 것
즉, 개발자가 코드를 한개의 공유 Branch에 하루에도 여러번 Merge하는 것.
Merge하면 자동으로Build
및Test
를 수행하는 것
1. 지속적인 Merge 없이 개발하면, 후반부에서 Merge시 충돌 가능성이 매우 높아진다.
2. 작은 단위로 코드를 변경하고, 자주 Git Repo에 반영하여 충돌 최소화한다.
3. 이렇게 Merge 전/후에 자동으로 Build 및 Test 수행하여 안정성 확보한다.
4. 만약 Build 및 Test 실패 시, 이 사실을 개발자에게 즉시 알린다.
작은 단위로 자주 통합하여 Merge 예방
작은 단위로 변경점 빠르게 중앙 저장소에 통합 및 문제점 빠르게 해결
즉, 개발 생산성 및 코드 품질 향상이 중요
앞서
CI
로 통합된 중앙 저장소(Git)의 코드를
자동으로 사용자에게 배포되는 운영 환경으로 전달/사용자에게 배포하는 것
현업에서는 두 용어를 딱히 구분하지 않는 편이라고 함.
이상적으로는 배포까지 자동화하는 것이다.
현업에서는 Build 및 Test까지 끝낸 코드는 동작 상 문제는 없다.
다만, 사용자가 알 수 있는 퀄리티에 대해서 QA를 알아봐야 하므로 대체로 운영환경까지 전달하고 이후에는 수동으로 배포하는 것이 보편적이라고 들었다.
필수적 3개의 부분으로 나눌 수 있다.
Git
, Github
, GitLab
, Mercurial
과 같은 Version Control Tools
Maven
, Gradle
, Selenium
과 같은 Tools
통합
하고 배포환경까지 전달
Jenkins
, Github Action
, Ansible
, ArgoCD
로 알려진 CI/CD Tools
CI/CD 작업에 도움을 주는 추가 요소들
Terraform
, Pulumi
, AWS CloudFormation
등과 같은 IaC Tools
ELK Stack
, Datadog
, Promethous
, Grafana
등과 같은 Tools
Jenkins나 Github Action을 사용한다고 해서 CI/CD를 구현한 것이 아니다.
DevOps는 더더욱, 아니다.
통합 가능성
확장성
가격
복잡한 환경
보안 이슈
높은 비용
DevOps를 학습하면서, 가장 중요한 요소인 자동화를 실현하기 위한 CI/CD를 정리한 문서.
이전에는 단순하게 Jenkins를 사용해서 코드 Commit하면 자동으로 사용자에게 배포되는 구조라고만 생각했는데, 자동화 파이프라인에 대한 전반적인 구조를 바라볼 수 있게 되었다.
단순히 도구라기 보단, 개발과 운영의 효율성 및 조직 문화 전체에 영향을 끼치는 광범위한 요소임을 확인했다.
DevOps Engineer는 개발과 운영에 있어 전반적인 기술스택을 다 알고 있어야 함을 깨달으며, 꾸준하게 공부해야겠다고 다짐한다.