오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-10 00:03
관리 메뉴

우노

[DevOps] CI/CD 란? 본문

DevOps/Concept

[DevOps] CI/CD 란?

운호(Noah) 2022. 5. 27. 01:55

DevOps 란?

  • 개발 및 운영을 관리하고
  • CI/CD를 위한 파이프라인을 구성하고 자동화하는 역할을 의미합니다.

CI/CD 란?

  • 애플리케이션 개발 단계를 자동화하여, 보다 빠른 주기로 고객들에게 서비스를 제공하는 개발 방식입니다.

CI 란?

  • Continous Integration(지속적 통합)으로, 빌드, 테스트, 머지를 자동화하는 것을 의미합니다.
  • 만약, 개발자가 하위 브랜치의 코드를 업데이트 했을 경우, 개발자가 직접 해당 브랜치를 빌드하고 테스트한 뒤, 문제가 없는지 확인하고 main 브랜치와 병합한다면, 시간이 많이 소요될 수 밖에 없습니다.
  • 하지만, CI 서비스를 사용한다면, 하위 브랜치의 코드를 업데이트 하는 것만으로도, 빌드와 테스트를 자동으로 트리거되어 검증할 수 있게 됩니다.
  • 결과적으로, 우리는 버그를 신속하게 찾아 해결할 수 있을 뿐 아니라, 소프트웨어 업데이트를 검증하고 릴리즈하는데에 걸리는 시간을 단축할 수도 있습니다.

CD 란?

  • Continous Delivery(지속적 제공) 또는 Continous Deployment(지속적 배포)로,
  • 개발자의 변경 사항이 반영된 애플리케이션을, 실제 사용 환경에 자동으로 배포하는 것을 의미합니다.
  • CI 에서, 업데이트 된 코드가 빌드 및 테스트되고, 배포가 준비되었을 경우,
  • 배포를 수동으로 진행하는 것이 Continous Delivery(지속적 제공) 이고,
  • 배포를 자동으로 진행하는 것이 Continous Deployment(지속적 배포) 입니다.

CI/CD 적용 예제

  • CI/CD 적용 전
    • 개발자들이 업데이트된 코드를 feature 브랜치에 push 합니다.
      • but, 에러가 발생한 부분을 눈치채지 못합니다.
    • feature 브랜치를 master 브랜치에 merge 합니다.
    • 에러가 발생했다면 에러를 해결하고, 위 과정을 다시 반복합니다.
    • 에러가 해결되었다면 배포를 시작합니다.
      • 배포과정 또한, 개발자가 직접해야하므로 많은 시간이 소요됩니다.
  • CI/CD 적용 후
    • 개발자들이 업데이트된 코드를 feature 브랜치에 push 합니다.
    • push 를 통해 CI 서버가 Trigger 되어 Build, Test 를 자동으로 실행하고 결과를 전송합니다.
    • 개발자들은 결과를 전송받고, 에러가 발생했다면 에러를 해결한 뒤, 위 과정을 다시 반복합니다.
    • 에러를 해결해, 정상적으로 feature 브랜치를 master 브랜치에 merge 할 경우,
    • CD 서버를 통해 자동으로 Deploy 과정을 진행합니다.

대표적인 CI / CD 툴

  • Jenkins
    • 무료입니다.
      • 단, 별도의 서버가 필요합니다.
      • 별도의 서버를 준비해 해당 서버에 설치하여 운영하는 방식이라, 무료지만 실제론 무료가 아닌 느낌입니다.
      • 규모가 작은 프로젝트의 경우, 리소스 낭비가 발생할 수 있습니다.
    • 다양한 플러그인, IDE를 지원합니다.
    • 많은 사용자와 많은 문서가 존재합니다.
    • 설정 및 운영이 불편하다는 평이 많습니다.
      • 지라와 연동이 불편하거나 완벽하지 않을 수 있습니다.
  • Github Actions
    • public 은 무료, private 은 매월 3000분 무료입니다.
    • 깃허브의 모든 이벤트에 대한 작업을 제공하고, 다양한 언어와 프레임워크를 지원합니다.
      • 복잡한 과정없이 바로 깃허브에서 사용할 수 있습니다.
    • 문서가 비교적 부족합니다.
    • 빌드 과정을 눈으로 확인하기 쉽습니다.
    • 젠킨스보다 빠릅니다.
    • 설정 및 운영이 불편하다는 평이 많지만, 젠킨스만큼은 아닙니다.
    • UI 에서 개별 워크플로우 실행을 삭제할 수는 없습니다.
    • 워크플로우에서 단일 작업만 다시 실행할 수는 없습니다.
    • 빠르고, 서드 파티가 필요 없기 때문에 요즘 대세입니다.
  • AWS CodeBuild / Travis CI / Circle CI / Bamboo / ETC

결론

  • 실무에서 개발자가 직접 빌드, 테스트, 배포하는 것은 리소스낭비입니다.
  • 따라서, 자동화 구축은 필수입니다.

참고

Comments