IT 기초/Application

CI/CD

데이터 세상 2021. 12. 27. 11:35

CI/CD

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

기본개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포

CI(Continuous Integration)

  • 개발자가 각각 개발한 소스코드를 모아서 한꺼번에 빌드하는 통합 빌드의 과정을 특정 시점 아니라 추가로 수행함으로써 통합에 발생하는 오류를 사전에 해결하고 이러한 과정들에 드는 시간을 줄이기 위한 기법
  • 빌드는 더이상 컴파일만을 의미하지 않습니다.
    • 소프트웨어가 거대해지고 복잡해지면서 팀 단위로 개발을 진행하게 되었고, 그 과정에서 분업과 협업이 필수적
    • 이러한 과정에서 SCM(Source Code Management)를 이용한 Merge (Pull Request) 과정이 까다로움
  • Agile 방법론이 표준화되고, 이를 통해 배포를 위한 빌드 단계, 테스팅 단계 등에서 시간을 절약할 수 있으며, 빠르게 변화하는 시장 변화 속도에 대응하여 속도와 품질을 보장할 수 있게 됩니다.


CI 핵심 구성 요소

CI Server

  • 빌드 프로세스를 관리하는 서버
    • Jenkins, Travis CI

SCM (Source Code Management)

  • 소스코드 관리 시스템으로 Git이 여기에 속한다고 할 수 있습니다. 소스코드의 개정과 백업 절차를 자동화 하여 오류 수정 과정을 돕습니다. 팀 프로젝트의 경우 각자 수정한 부분을 전체가 자동을 동기화 할 수 있는 시스템입니다.

Build Tool

  • 컴파일, 테스트 정적 분석 등을 실시해 동작가능한 소프트웨어를 생성하는 도구로 MavenGradle 등이 속한다고 할 수 있습니다.
  • 빌드는 형상 관리 시스템에 있는 소스코드를 가져와서 실행 가능한 파일로 만드는 일련의 과정을 뜻합니다.

Test Tool

  • 작성된 테스트 코드에 따라 자동으로 테스트를 수행하는 도구로 빌드 도구의 스크립트에서 실행되며 JUnitMocha등 해당합니다.

Martin Fowler가 제시하는 CI의 기본 원칙 

  • 모든 소스코드가 실행되고 있고 어느 누구든 현재의 소스를 접근할 수 있는 단일 지점을 유지해야 한다.
  • 빌드 프로세스를 자동화 시켜서 어느 누구든 소스로부터 시스템을 빌드하는 단일 명령어를 사용할 수 있어야 한다.
  • 테스트를 자동화하여 단일 명령어를 통해 언제든지 시스템의 대한 테스트를 실행할 수 있어야 한다.
  • 누구나 현재 실행 파일을 얻으면 지금까지의 최고의 실행파일을 얻었다는 확신을 가지게 만들어야 한다.

 

CD(Continuous Delivery  / Continuous Deployment)

Continuous Delivery

  • 소프트웨어가 언제든지 릴리즈 될 수 있는 방식으로 소프트웨어를 구축하는 소프트웨어 개발 분야를 의미합니다.
  • 지속적인 통합, 자동 테스트 및 자동 배포기능을 통해 고품질의 소프트웨어를 안정적이고 빠르게 개발하고 최소한의 오버해드로 배포할 수 있는 방법입니다.

Continuous Deployment

  • 코드 변경시 전체 파이프 라인을 통해 이동하고 생산에 투입되어 배포 결과가 매일 갱신됩니다.
  • 이를 통해 애플리케이션은 항상 릴리즈가 준비되어 있으며, 제품을 배포하기 위해서는 비즈니스 결정이 필요하기 때문에 수동으로 작업이 이루어 지게 됩니다.
  • 애플리케이션의 업데이트는 자동으로 푸시됩니다.

 

마이크로서비스 아키텍처와 CI/CD

  • 마이크로서비스 아키텍처의 기본원칙을 지키고 있다면 
  • 릴리스 프로세스는 문제가 발생한 팀에게만 제한적으로 동작해야 하며, 다른 팀은 문제가 발생한 팀에 대한 문제로 인해서 기다리는 시간을 최소화 할 수 있습니다.
  • 매일 여러 번 프로덕션에 릴리스하는 경우 이로 인한 서비스 중단 가능성이 적어야 하며, 잘못된 업데이트로 인한 문제 생성시 즉각적으로 기존 버전으로 롤백할 수 있는 신뢰성 있는 방법이 있어야 합니다.

References

반응형

'IT 기초 > Application' 카테고리의 다른 글

[Application] Node.js  (0) 2021.12.31
[Application] Spring  (0) 2021.12.31
[Application] React  (0) 2021.12.31
[Application] Web Application Framework  (0) 2021.12.29
3 Tier  (0) 2021.12.27