일단 요약

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

CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제를 해결하기 위한 솔루션입니다.

개발부터 배포까지 모든 단계를 자동화 하는 것

 

CI/CD 파이프라인

애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프 사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공하는 구축 사례

 

-> 5줄 요약한다면,

 

  1. 개발자가 작은 단위로 코드를 짜고 메인 리포지토리에 merge를 하면,
  2. 자동으로 빌드되고,
  3. 자동으로 테스트되어,
  4. 릴리즈되고(배포준비완료),
  5. 배포된다.

 

CI/CD는 이 파이프라인으로 표현되는 실제 프로세스를 의미하고 지속적인 자동화 및 모니터링을 추가하는 것을 의미합니다.


CI (continuous Integration, 지속적 통합)

애플리케이션의 새로운 코드들이 자동으로 빌드 및 테스트 되어 레포지토리에 통합되는 것을 의미한다.

현상황: 

개발자들은 보통 동일한 애플리케이션의 각기 다른 기능을 동시에 작업합니다.

그러나 각자 작업한 코드를 merge day를 정해 모든 분기 소스 코드를 병합할 경우, 결과적으로 반복적인 수작업 많은 시간을 소모하게 됩니다ㅠ

왜냐면, 각자 작업하는 개발자가 애플리케이션에 변경사항을 적용할 때 다른 개발자가 동시에 적용하는 변경사항과 conflict가 일어날 가능성이 많기 때문입니다.

 

CI를 통해 개발자의 변경사항이 애플리케이션을 손상시키지 않도록 자동으로 구축하고 각기 다른 레벨의 자동화 테스트(단위테스트, 통합테스트) 실행을 통해 변경사항이 잘 적용됐는지를 확인합니다.

다시 말해, 클래스와 기능에서부터 서로 다른 모듈에 이르기까지 모든 것에 대한 테스트를 수행합니다.

이렇게 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 자주 수정할 수 있게 됩니다.

 

CI의 예시 ( Jenkins )

1. 개발자는 자신의 로컬에서 코드를 수정하고 Github에 push를 한다.

2. CI 도구에서 변경된 코드에 대한  Build, Test, Merge를 진행하고 결과를 피드백해준다.

빌드 & 테스트에 이상이 있는 경우 -> 실패
빌드 & 테스트가 이상 없이 수행되는 경우 -> 성공!

 

CI 도구

Jenkins , TravisCI, Github Actions


CD (continuous Delivery/Delploy, 지속적 제공/배포)

CI의 빌드 자동화, 유닛 및 통합 테스트 수행 후 이어지는 CD.

효과적인 CD를 실현하기 위해서는 개발 파이프라인에 CI가 먼저 구축되어 있어야 합니다 !

 

개발, 통합, 배포, 릴리즈, 테스트를 자동화하여 지속적으로 배포하는 것을 뜻합니다.

 

continuous Delivery ( 지속적 제공 )

배포 단계에서 release할 준비 단계를 거치고 문제가 없는지 수정할 만한 것들이 없는지 개발자가 검증을 합니다.

그 후에 나온 결론이 "이제 사용자들에게 서비스를 제공해도 되겠다!" 라고 정해져서 배포를 수동적으로 진행하는 것을 말합니다. 수동 검토와 배포시간을 고려해야 합니다.

 

continuous Delploy ( 지속적 배포 )

배포 단계에서 배포할 준비가 되자마자 자동화를 통해 사용자들에게 배포를 진행하는 것을 말합니다.

승인 주기가 필요가 없으므로 개발자는 테스트 사이트의 효과와 안정성을 보장해야 합니다.

최소한의 수동 작업으로 매우 짧은 시간 안에 여러 앱 또는 업데이트를 배포할 수 있다는 것이 장점입니다.

 


마무리.

CI의 장점

하나의 소프트웨어에 대해 수많은 개발자들이 동시에 개발을 진행하고 이 소스코드를 정기적으로 통합하는 회사라면 소스코드의 병합은 상당히 많은 공수를 요구하는 일이 될 것입니다.

CI를 적용한다면 소스코드의 변동이 생길 때마다 지속적으로 개발자들의 코드를 병합하고 테스트를 진행합니다. 변경한 소스코드가 문제가 발생하지 않는지 테스트를 실행하고 일련의 과정 중 코드의 충돌, 테스트의 실패 등이 발생하면 즉각적으로 알림을 전송합니다.

이 과정을 통해 아래 장점을 얻을 수 있습니다.

  • 개발의 편의성이 증가합니다.
  • 변경된 코드에 대한 즉각적 피드백과 검증이 가능합니다.
  • 소스코드의 통합과 검증에 들어가는 시간을 단축합니다.

CD의 장점

  • CD의 장점은 실제 배포할 애플리케이션의 서버가 여러 대일 때, 배포할 작업물이 여러 개일 때 나타납니다. 수작업으로 여러 작업물을 여러 서버에 배포할 때 발생하기 쉬운 실수를 방지할 수 있습니다.
  • '원클릭으로 빌드, 테스트, 배포 자동화'를 진행할 수 있습니다. 즉 소스코드 변경부터 배포까지의 작업을 자동화할 수 있기 때문에 수작업으로 할 때의 불편함을 줄일 수 있습니다.
  • 개발자는 개발에만 집중할 수 있게 됩니다.

 

 

참고, 출처:

https://llshl.tistory.com/50

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

https://deveric.tistory.com/106

https://jhleed.tistory.com/130

https://jud00.tistory.com/entry/CICD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

'엘리스 ai 트랙 > FE' 카테고리의 다른 글

this [모던 js 딥다이브]  (0) 2022.09.22
Javascript - ES11 ( ES2020 )의 특징들  (0) 2022.04.04
http 1.1 과 http 2 의 차이점  (0) 2022.03.31
HTTP  (0) 2022.03.13
기본값+rest+spread  (0) 2022.03.07

+ Recent posts