CI / CD 란 무엇일까

Tony·2021년 7월 17일
0

CI/CD 란

CI : Continuous Integration
CD : Continuous Delivery / Continuous Deployment

CI/CD는 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법

CI : Continuous Integration

지속적 통합

어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되는 것을 의미

CI가 필요한 환경

  • 다수의 개발자가 형상관리툴(git, SVN 등)을 공유하여 사용하는 환경
  • MSA(Micro Service Architecture) 환경
    • Agile 방법론(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발 방법론) 이 적용되기 때문에 기능추가가 매우 빈번하게 발생 됨
    • 동작테스트도 중요
    • CI의 적용은 기능 충돌 방지 등의 Benefit을 제공할 수 있음

CI의 핵심 목표

  • 버그를 신속하게 찾아 해결
  • 소프트웨어 품질을 개선
  • 새로운 업데이트의 검증 및 릴리즈의 시간을 단축

CD : Continuous Delivery / Continuous Deployment

Continuous Delivery != Continuous Deployment

  • continuous delivery는 공유 레포지토리로 자동으로 Release 하는 것
  • continuous deployment는 개발자의 변경사항이 레포지토리를 넘어, Production 레벨까지 자동으로 deploy 하는 것을 의미

DevOps 란

  • 애플리케이션 개발 팀(development)과 해당 IT 운영 팀(
    operations) 간의 원활하고 지속적인 커뮤니케이션, 협업, 통합, 가시성 및 투명성을 장려하는 것
  • 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 "문화, 철방, 방식, 도구"의 조합
  • 기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있음
  • 이러한 빠른 속도를 통해 조직은 고객을 더 잘 지원하고 시장에서 좀 더 효과적으로 경쟁 할 수 있음

DevOps 목표

  • 문화, 자동화, 측정, 공유
  • 비즈니스 혁신을 추진하고 지속적인 프로세스 개선을 주도하도록 설계

DevOps 방법

  • 스크럼(Scrum) : 개발 및 QA 프로젝트를 가속하기 위한 팀원의 협력 방법
  • 칸반(Kanban) : Toyota 공장에서 얻은 효율에서 비롯된 용어.
    • 진행 중인 소프트웨어 프로젝트 작업 상태를 칸반 보드로 추적
  • 애자일(Agile) : 스크럼 및 칸반을 비록한 많은 DevOps 방법에는 애자일 프로그래밍 요소가 포함되어 있음

DevOps 툴체인

  • DevOps 단계별로 친화적인 툴을 사용
  • 툴의 목표는 소프트웨어 전송 워크플로(또는 파이프라인)의 다양한 단계를 추가로 간소화, 단축, 자동화 하는 것

계획

알려진 문제를 추적하고 프로젝트 관리를 수행

  • ex) Jira, Git

코딩

소프트웨어 설계 및 소프트웨어 코드 생성

  • ex) github, gitlab, bitbucket, stash

구축

소프트웨어 빌드 및 버전을 관리하고 자동화된 툴을 사용하여 코드를 컴파일하고 패키징하여 향후 제품 릴리즈에 제공

  • ex) Docker, Ansible, Puppet, Chef, Gradle, Maven, JFrog Artifactory

테스트

최적의 코드 품질을 보장하기 위해 지속적인 테스트(수동 또는 자동)를 수행

  • ex) JUnit, Codeception, Selenium, Vagrant, TestNG, BlazeMeter

배포

  • 제품 릴리즈를 운영 단계로 관리, 조정, 예약 및 자동화 하는데 도움이 되는 툴이 포함 될 수 있음
  • ex) Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker, Jira

운영

운영 중인 소프트웨어를 관리

  • ex) Anabilities, Puppet, PowerShell, Chef, Salt, Otter

모니터링

운영 환경의 특정 소프트웨 릴리즈에서 발생하는 문제에 대한 정보를 식별하고 수집

  • ex) New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios, Slack

DevOps 문화와 철학

  • DevOps로 전환하기 위해서는 문화와 사고방식의 변화가 필요
  • DevOps는 기존에 사일로에 묶여 있던 개발과 운영이라는 두 팀 간의 장벽을 없애 줌
    • 사일로(silo:곡식을 저장하는분리된 굴뚝 모양의 창고) : 조직 내 다른 부서는 접근 할 수 없는 분리된 정보, 부서 이기주의
  • 일부 조직에선 개발팀과 운영팀이 나뉘어 있지 않고 엔지니어가 두 업무를 모두 수행 할 수도 있음
  • DevOps에선 두 팀이 함께 작업하여 개발자의 생산성과 운영의 안정성을 모두 최적화함
  • 이를 통해 전체 개발 및 인프라 수명 주기를 스스로의 책임으로 간주하는 팀들로 구성 됨

DevOps 엔지니어란

  • DevOps 엔지니어는 프로세스, 툴, 방법론을 도입하여 코딩에서 배포, 유지, 관리 및 업데이트에 이르는 소프트웨어 개발 라이프사이클 전체에 걸쳐 요구 사항 간의 균형을 맞춤
  • 애자일 환경에서 개발자, 시스템 관리자, 프로그래머는 사일로화되어 동일제품을 개발하면서도 사용자에게 가치를 제공하는데 필수적인 정보를 공유하지 않을 수도 있는데 DevOps엔지니어는 이러한 복잡성을 줄여, 애플리케이션을 빠르게 변경하는데 필요한 작업과 안정성을 유지하는 태스크 간 격차를 해소

고찰

지금 회사에 시스템을 도입하려면 기존 개발자들의 마음가짐도 중요한 것 같다.
조금씩 개선하는 방향으로 시도해봐야겠다.

참고 문헌

profile
움직이는 만큼 행복해진다

0개의 댓글