기본개발지식

[CI/CD]CI/CD란 무엇인가?

석태 2024. 1. 24. 10:55
CI/CD에 대한 정보를 공부하기 전 CI/CD가 필요한 이유
요즘같이 빠르게 진화하고 변화하는시대에 어떻게 하면 시장과 고객의 요구에 빠르게 반응해서
제품을 출시,업데이트 할것인가 큰 과제로 존재한다.
바로 이것을 위해서 세계적으로 많은 기업이 CI/CD를 개발 프로세스로 사용하고있다.
대부분의 회사에서 CI/CD환경에서 일하고 있기 때문에 개발자 또는 sw제품 관련된 일을 하신다면 정확히 알아두는게 좋다.

 

CI/CD란?
간단하게 말해서 어플리케이션 개발 단계부터 배포때까지의 이 모든 단계들을 자동화를 통해서 조금 더 효율적으고 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 것을 말한다.

 

 

 


CI(Continuius Integration) 지속적인 통합

  • 버그수정이나 새로 만드는 기능들이 메인 repository에 주기적으로 빌드되고 테스트가 되어서 merge가 되는 방식
  • 이해하기 위한 2가지 포인트가 있다.
1. 개발자들은 그들의 코드 변경 사항을 main repository에 주기적으로 빈번하게 merge해야 한다.
→ 새로운 기능을 구현할 떄는 기능을 어떻게 작은 단위로 나눠서 내가 main repository에 반영하거나 또는 작은 단위로 나눠서 사용자에게 배포할 수 있을지 최대한 작은 단위로 나눠서 개발하고 통합해 나가는 것이 중요하다.

2. 주기적으로 merge된 코드의 변경사항이 자동으로 빌드가 되어서 코드 변경사항 이후에도 빌드가 성공적으로 되는지 확인이 되어야 되고 새로 추가된 이코드에 변경사항 뿐만 아니라 기존 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 되어야 한다.

 

 

  • CI원칙을 따를 때 장점
1. 주기적인 merge를 하기 때문에 merge충돌을 피할 수 있어서 개발 생산성 향상
2. merge되는 모든 코드는 자동으로 빌드되고 테스트 되기 때문에 코드의 결함과 문제점을 빠르게 발견될 수 있음
→ 빠르게 수정이 가능하다는 장점
→ 주기적인 merge를 하기 때문에 코드의 변경 사항이 작기 때문에 문제 수정이 조금 더 고립된 작은 단위 문제 해결로 버그 수정 용이
3. 1~2번 2가지를 하기 떄문에 조금 더 괜찮은 코드의 퀄리티 향상
4. 안정성이 있는 제품 개발 가능성이 높다.

 

 

 


CD(Continuous Delivery) 지속적 제공 / CD(Continuous Deployment) 지속적 배포

  • CD 두가지 모두 마지막 배포 단계에서 어떻게 하면 자동화해서 배포를 만들 수 있는지 고민하는 단계
  • 예시)
CI 를 통해서 주기적으로 merge된 코드의 변경사항들이 자동으로 build가 되고 test가 되었다면 이제 배포하는 단계에서 배포할 즉 Release할 준비과정을 거치고 여기에서 준비된 relaese가 괜찮은지 정상적인지 아무런 문제가 없는지 직접 개발자나 또는 검증팀이 검증을 한다음에 이제 최종적으로 사용자에게 배포해도 되겠다 결정이 되면 수동적으로 배포하는 이 단계를 continuous Delivery라고 한다. 또는 release가 준비가 되자마자 자동으로 사용자에게 배포할 수 있도록 만들 수도 있는데 이렇게 모든 과정을 자동화 해놓는 것을 continuous Deployment라고 부른다. 둘이 비슷하지만 최종 단계가 자동화유무에 따라 살짝씩 달라질 수 있다. 이런 모든 과정들을 어떻게 자동화 해두냐 어떻게 스크립트를 쓰느냐 그리고 이 자동화와 testing에 대해서 얼마나 자신감이 있느냐에 따라서 최종 단계를 수동이냐 자동으로 사용하는 경우가 있다. 회사마다 케바케 모든 회사가 같은 ci/cd 프로세스를 거치는 것이 아니다. 

 

CI/CD가 완벽히 분리된 것이 아니라 대부분 회사에서 CI와CD를 거쳐서 배포를 하기 때문에 CI/CD 묶어서 부르곤 한다.

 

 

CI/CD 파이프 라인

 

CI / CD

  • code → build → test → releae → deploy

⊙ CI / CD 파이프라인을 통한 과정

  1. 개발자가 작은 단위로 기능을 나누어서 code를 작성한다.
  2. 주기적으로 main repository에 merge를 하면 자동으로 build를 한다.
  3. 자동으로 build가 것을 이용하여 test과정을 거친다.
  4. release준비를 하고 여기서 수동적으로 또는 자동적으로 최종 배포를 거치게 된다.

 

CI/CD를 이용한 다양한 툴
  • Jenkins 
  • Buildkite
  • Github Action 
  • Gitlab CI/CD
  • 회사마다 다양한 툴을 사용한다.

 

참고 영상 : https://www.youtube.com/watch?v=0Emq5FypiMM

 

 

  • 드림코딩님 유튜브 다른 영상을 보고 공부할 때 참고할 내용이 있어서 메모
더보기

온라인 개발 공부 팁

  1. 공식문서를 읽어라(질문이 생길때마다 첫번째 해야할 일은 공식문서에서 답을 찾기)
  2. 제일 처음 공식문서로 기본기를 쌓고,실려고가 자신감이 향상 되면서 공식문서로 재확인, 주요 업데이트 내용을 공식문서에서 빠르게 얻어냄 -> 제일 빨리 앞서갈 수 있음, 개발자가 가져야할 제일 좋은 습관
  3.  기본지식을 제대로 익혀라
  4.  명성 있는 지식인들의 리스트를 만들어라.(gitNation)