CI/CD

CHAN LIM·2024년 11월 20일
0

DevOps

목록 보기
2/6


CI/CD에 대해서 정리하며, 맨 위에서 바라보는 CI/CD의 전체 밑그림을 파악하기를 기원하며 작성해본다.


CI/CD?


CI : Continuous Integration - 지속적 통합

개발자가 중앙 저장소(Git)에 코드를 자주 Commit 시,
자동으로 코드를 BuildTest 후, 통합하는 것

즉, 개발자가 코드를 한개의 공유 Branch에 하루에도 여러번 Merge하는 것.
Merge하면 자동으로 BuildTest를 수행하는 것


CI의 원칙

1. 지속적인 Merge 없이 개발하면, 후반부에서 Merge시 충돌 가능성이 매우 높아진다.

2. 작은 단위로 코드를 변경하고, 자주 Git Repo에 반영하여 충돌 최소화한다.

3. 이렇게 Merge 전/후에 자동으로 Build 및 Test 수행하여 안정성 확보한다.

4. 만약 Build 및 Test 실패 시, 이 사실을 개발자에게 즉시 알린다.

작은 단위로 자주 통합하여 Merge 예방
작은 단위로 변경점 빠르게 중앙 저장소에 통합 및 문제점 빠르게 해결

즉, 개발 생산성 및 코드 품질 향상이 중요


CD : Continuous Delivery | Deployment - 지속적 전달/배포

앞서 CI로 통합된 중앙 저장소(Git)의 코드를
자동으로 사용자에게 배포되는 운영 환경으로 전달/사용자에게 배포하는 것

현업에서는 두 용어를 딱히 구분하지 않는 편이라고 함.

이상적으로는 배포까지 자동화하는 것이다.

현업에서는 Build 및 Test까지 끝낸 코드는 동작 상 문제는 없다.
다만, 사용자가 알 수 있는 퀄리티에 대해서 QA를 알아봐야 하므로 대체로 운영환경까지 전달하고 이후에는 수동으로 배포하는 것이 보편적이라고 들었다.



CI/CD 구조

필수적 3개의 부분으로 나눌 수 있다.

  • 기능 개발을 완료한 소스 코드를 중앙 저장소에 Commit
    • 즉, Git, Github, GitLab, Mercurial 과 같은 Version Control Tools

  • Build 및 Test
    • 즉, Maven, Gradle, Selenium과 같은 Tools

  • Build 및 Test로 검증된 코드를 통합하고 배포환경까지 전달
    • 즉, Jenkins, Github Action, Ansible, ArgoCD 로 알려진 CI/CD Tools

CI/CD 작업에 도움을 주는 추가 요소들

  • 사용자에게 배포되는 인프라 자체를 코드로 관리
    • 즉, Terraform, Pulumi, AWS CloudFormation 등과 같은 IaC Tools

  • CI/CD 파이프라인과 인프라 및 애플리케이션 모니터링 및 로깅
    • 즉, ELK Stack, Datadog, Promethous, Grafana 등과 같은 Tools

소결.

Jenkins나 Github Action을 사용한다고 해서 CI/CD를 구현한 것이 아니다.
DevOps는 더더욱, 아니다.


CI/CD Tools 선택 기준

  • 통합 가능성

    • 대부분의 CI/CD 도구는 다양한 플랫폼과 서비스와 통합될 수 있다.
    • 이러한 도구들이 서로 연결되는 것에 유의해야한다.
  • 확장성

    • 프로젝트나 팀이 성장함에 따라 CI/CD 도구도 확장 가능해야 한다.
    • 더불어 사용자 수, 빌드 및 배포 빈도 등에 따라 성능이 유지되어야 한다.
    • 클라우드 기반 도구들은 자동 확장되기에 편리하다.
  • 가격

    • 오픈소스를 기반으로 구성할 수도, 상용 도구로 설정할 수 있다.
    • 오픈소스로 구현하면 비용이 적게 들지만 유지 및 보수에 어려움이 있고, 상용 도구는 사용하기 쉽지만 비용이 만만치 않다.

CI/CD의 도전 요소 및 해결방안

  • 복잡한 환경

    • 다양한 기술 스택, 서비스, 플랫폼 간의 복잡한 통합이 필요할 수 있습니다.
    • 해결 방법
      • : 단계별로 파이프라인을 구축하고, 문서화를 철저히 하여 전체 프로세스를 명확하게 이해하는 것이 중요합니다.
  • 보안 이슈

    • CI/CD 파이프라인은 자동화되어 있기 때문에 보안 위협에 취약할 수 있습니다.
    • 해결 방법
      • : 시크릿 관리 도구 (예: HashiCorp Vault), 정적 코드 분석 도구, 및 보안 자동화 도구를 통합하여 파이프라인의 보안을 강화합니다.
  • 높은 비용

    • 클라우드 기반의 CI/CD 도구는 자주 빌드하고 배포할 때 비용이 증가할 수 있습니다.
    • 해결 방법
      • : 비용 관리 도구를 사용하거나, 비용 효율적인 CI/CD 전략을 세워서 리소스 사용을 최적화합니다.


결.

DevOps를 학습하면서, 가장 중요한 요소인 자동화를 실현하기 위한 CI/CD를 정리한 문서.

이전에는 단순하게 Jenkins를 사용해서 코드 Commit하면 자동으로 사용자에게 배포되는 구조라고만 생각했는데, 자동화 파이프라인에 대한 전반적인 구조를 바라볼 수 있게 되었다.

단순히 도구라기 보단, 개발과 운영의 효율성 및 조직 문화 전체에 영향을 끼치는 광범위한 요소임을 확인했다.

DevOps Engineer는 개발과 운영에 있어 전반적인 기술스택을 다 알고 있어야 함을 깨달으며, 꾸준하게 공부해야겠다고 다짐한다.

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글