본문 바로가기
개발관련

CI/CD 란 무엇인가 ?

by 수바니 2024. 8. 19.

CI/CD

CI 
1. 개발자가 변경한 코드를 자주 통합하고, 이 코드가 전체 시스템과 잘 어우러지는지 자동으로 테스트하는 프로세스
2. 코드변경이 발생할때마다 빌드 및 테스트를 수행하여 코드 품질을 유지하고 문제를 조기에 발견할 수 있습니다.

CD 
1. CI의 결과물을 사용자에게 자동으로 배포하는 프로세스를 포함합니다. 코드변경이 통합되고 테스트를 통과하면, 이를 자동으로 스테이징 환경 또는 프로덕션 환경에 배포합니다.
2. 지속적인 배포는 CI/CD의 확장 개념으로, 승인 절차 없이 자동으로 프로덕션 환경에 배포하는 것을 의미합니다.


장점
1. 빠른피드백
코드 변경 후 즉각적인 빌드 및 테스트 결과를 확인할 수 있어, 개발자가 문제를 빠르게 인지하고 수정할 수 있습니다.
2. 자동화된 프로세스
빌드, 테스트, 배포과정이 자동화되어 수동 작업을 줄이고, 인적 오류를 방지 할 수 있습니다. (인적오류를 방지한다 중요!)
3. 일관된 배포
동일한 배포 프로세스를 통해 모든환경(개발, 테스트, 스테이징, 프로덕션)에서 일관된 결과를 보아합니다.
4. 높은품질유지
코드 품질을 지속적으로 검증하고, 잠재적인 문제를 조기에 발견하여 품질을 유지할 수 있습니다.
5. 개발속도향상

CI를 설명하자면, 
작업을 할때마다 레파지토리에 push를 한다고 가정 ( = 이전의 기능과 현재의 기능이 다르다는 의미)
이코드가 제대로 되었는지 확인 -> 테스트로 돌린다. (코드가 이상이 있는지 없는지 ~ )
이런것들을 코드변경을 할 때 마다 이루어지게 하면 코드품질이 빠르게 향상된다.
여러가지 업데이트 상황들을 마지막에 Test를 한다면, 2번째 업데이트  상황에서 에러가 났을경우 2번째 업데이트상황을 수정하고 또  test를 돌렸을때 2번째 이후에 있는 업데이트 상황들이 다시 에러가 뜨고 다시 또 수정하고 시간이 오래걸린다.

따라서, 이 단점을 보완하고자 CI/CD를 활용한다 (지속적인 통합! )
지속적인 통합이 가능하다! 코드 변경후 즉각적인 빌드 및 테스트 결과를 확인하면 코드 품질이 높아진다 

 

 


CD는 CI를 포함하여 배포까지 포함하는것이 CD
CI 지속적인통합 / CD 지속적인 배포

라고 생각하면 됩니다.


도구
1. GitHub Actions
github저장소와의 강력한통합
풍부한 커뮤니티 및 Marketplace(파이프라인에대한 예제가 종류별로 많다.) 지원
예제가 많다는뜻은 구축하기가 쉽다는 뜻.
2. Jenkins 는 오픈 소스 
높은 커스텀마이징 가능
대규모 프로젝트에 적합
3. GitLab CI


GitLab CI는 GitLab과 통합된 CI/CD 도구로, GitLab 저장소를 기반으로 CI/CD 파이프라인을 설정할 수 있습니다.
1. GitLab과의 통합
2. 강력한 파이프라인 편집기 제공
3. 자동화된 DevOps 수명주기관리
4. 클라우드 및 온프레미스 모두 지원