CS & SW & IT 용어

[CI / CD] 란 무엇인가

Haksae 2022. 1. 5. 23:44
CI : Continuous Integration
CD : Continuous Delivery / Deployment
어플리케이션 개발 단계부터 배포 때까지 이 모든 단계들을 자동화를 통해서 조금 더 효율적이고 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 개발 프로세스

 

*CI (지속적인 통합)

  • 버그 수정, 새로 만드는 기능들이 매일 레포에 주기적으로 빌드되고 테스트가 되어서 머지되는 것을 말함
  • 이 방식은 1991년 Grady Booch에 의해서 사용되어지다가, 나중에는 extreme programming 개발 방법론에서 채택되어졌음
    • Graday Booch는 객체지향 프로그래밍에 관련된 아주 유명한 책을 쓴 저자

*Ci 포인트

1) 코드 변경 사항을 메인 레포에 주기적으로 빈번하게 머지해야한다.

- 머지 충돌을 방지하기위해 최대한 작은 단위로 나눠서 개발하고 통합하는 것이 중요

 

2) 통합을 위한 단계(빌드, 테스트,머지)의 자동화

  • 주기적으로 머지된 코드의 변경사항이 자동으로 빌드가 되어서 코드 변경 사항 이후에도 빌드가 성공적으로 되는지 확인이 되어야함
  • 추가된 변경 사항 뿐만 아니라 기본의 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 되어야함
  • 머지가 되면 자동으로 팀에서 만든 CI Script를 통해서 해당 레포를 여러가지 테스트를 거쳐 최종 배포된다.

 

* 장점

  • 개발 생산성 향상 : 주기적으로 머지를 하기 떄문에 머지의 충돌을 피할 수 있음
  • 문제점을 빠르게 발견 : 머지되는 코드들은 자동으로 빌드와 테스트 되기 떄문에 코드의 결함이 빠르게 발견될 수 있음
  • 버그 수정 용이 : 유기적으로 머지를 하기 위해서 코드의 변경사항이 작기 때문에, 버그를 수정할 떄도 보다 작은 단위를 수정하게 되기 때문ㅇ
  • 코드의 퀄리티 향상 : CI를 잘 운영하기 위해서는 각자 개발한 코드에 대해서는 유닛테스트를 포함해야함. CI를 사용한다면 대부분의 소스코드들이 자동으로 테스트가 되기 때문에 안정적인 프로덕트 생산 가능

*CD : 지속적 제공, 지속적 배포

  • 배포하는 단계에서 어떻게 자동화하여 배포할 수 있을지 고민
  • CI에서 자동으로 빌드와 테스트가 되었다면, 릴리즈할 준비 과정을 거치고, 릴리즈된 것을 직접 검증하여 배포하는지에 따라 CD 개념이 달라짐
    • 직접 검증 및 배포 : Delivery / 자동 : Deployment

  • CI / CD 파이프 라인

  • CI/CD Tool
    • Jenkins
    • GitHub Actions
    • GitLab CI/CD
    • Buildkite
    • Bitbucket Pipelines
    • circleci

 

출처 : https://youtu.be/0Emq5FypiMM