CI/CD, 개발 프로세스의 자동화

최호빈·2024년 1월 21일
0
post-thumbnail

🤔 CI/CD란?

많은 기업들이 현업에서 쓰고 있는 자동화된 소프트웨어 개발 프로세스로, 애플리케이션의 모든 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 사용자에게 제공하는 방법이다. 쉽게 말해, 개발, 테스트, 배포를 자동화하도록 지원하는 것이다. 애플리케이션 배포의 위험성을 줄여주므로 애플리케이션 변경 사항을 한 번에 모두 릴리스하지 않고 작은 조각으로 세분화하여 더욱 손쉽게 릴리스할 수 있다.


🤷🏻‍♀️ CI/CD를 쓰는 이유?

❓ 많은 기업들이 쓴다니까 좋은건 알겠는데, 그래서 왜 쓰는건데?

혼자서 개발을 한다면 사실 병합 충돌이 발생하지도 않고 배포하는 과정 또한 쉽게 진행할 수 있을 것이다. 하지만 여러 개발자들이 동시에 개발하고 코드를 병합하고 배포하는 과정을 자동화된 시스템이 아니라 수동으로 한다면 많은 문제가 발생하게 될 것이다.

예를 들어, 개발자 A가 코드를 수정하여 애플리케이션에 변경사항을 적용하여 배포했다고 해보자. 그 다음 개발자 B가 배포된 애플리케이션을 자신의 로컬 PC에서 구동시켰는데, 갑자기 정상적으로 작동되지 않는 것이다! 알고보니 개발자 A가 Test code를 작성하지 않고 코드를 병합하여 문제를 발견하지 못하고 배포포하여 발생한 상황이었다.

만약에 Test가 자동으로 이루어지고 통과한 후에 배포가 이루어졌다면 이렇게 치명적인 상황이 발생하지 않았을텐데... 이를 해결하기 위한 솔루션이 바로 〰️〰️
CI/CD인 것이다!


CI

Continuous Integration, 지속적인 통합

현대의 애플리케이션 개발에서는 여러 개발자들이 동일한 애플리케이션의 각기 다른 기능을 동시에 작업한다. 그렇게 각자 작업한 결과물들을 병합(merge)하는 과정에서는 충돌을 피하기 위해 반복적인 수작업에 많은 시간을 소모하는 경우가 발생하기도 한다. (따라서 코드를 작성하는 시간보다 머지 충돌을 해결하는 시간이 더 걸리는 비효율적인 상황을 피하기 위해서는 최대한 작은 단위로 개발하고 통합하는 것이 중요하다.)

☝🏻 이러한 작업을 수월하게 자주 수행할 수 있도록 하는 것이 바로 CI ❗️

CI를 통해 애플리케이션에 주기적으로 병합된 변경 사항들이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 단위 테스트 및 통합 테스트같이 자동화된 테스트 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인한다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되어도 이러한 버그를 더욱 빠르게 자주 수정할 수 있다.

CI의 장점

  1. 개발 생산성 향상
    ➡️ 주기적으로 Merge를 하기 때문에 Merge 충돌을 피할 수 있어 개발 생산성이 향상된다.

  2. 코드의 문제점을 빠르게 발견 가능 & 수정 용이

  3. 코드의 퀄리티 향상
    ➡️ CI를 위해 Unit Test가 될 수 있는 안정적인 코드를 구현하기 때문이다.


CD

CI를 통해 변경사항들이 자동으로 빌드되고 유닛 및 통합 테스트가 수행된 후 모든 배포 준비를 마치고 사용자에게 제공하기 위해 배포하는 과정이 수동이면 Continuous Delivery(지속적인 제공), 자동이면 Continuous Deployment(지속적인 배포)라고 한다.

  • Continuous Delivery(지속적인 제공)
    코드 변경 사항의 병합부터 프로덕션 준비가 완료하고 메인 Repository에 자동으로 릴리스하는 프로세스를 의미한다. 이를 완료하면 운영팀이 더욱 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있다.

  • Continuous Deployment(지속적인 배포)
    Continuous Delivery의 확장된 형태로 애플리케이션을 프로덕션으로 배포하는 작업을 자동화한 것이다. 애플리케이션에 적용한 변경 사항이 몇 분 이내에 반영되므로 사용자 피드백을 지속적으로 수신하고 통합하는 일이 훨씬 수월해진다. 하지만, 수동으로 확인하는 작업이 없으므로 Continuous Deployment가 안정적으로 이루어지려면 테스트 자동화가 제대로 설계되어 있어야 한다.


CI/CD Tool 종류

  • Jenkins

  • Buildkite

  • GitHub Actions

  • GitLab CI/CD

  • Bitbucket Pipelines

    등등,,



Reference

https://www.redhat.com/ko/topics/devops/what-is-ci-cd

https://www.youtube.com/watch?v=0Emq5FypiMM&list=PLSG_EhaEPAC4d_JRUYybhV438E3o-AgA1&index=1

https://www.youtube.com/watch?v=0Emq5FypiMM&list=PLSG_EhaEPAC4d_JRUYybhV438E3o-AgA1&index=2

https://www.youtube.com/watch?v=iLqGzEkusIw&list=PLSG_EhaEPAC4d_JRUYybhV438E3o-AgA1&index=3&pp=gAQBiAQB

0개의 댓글