DevOps/CI|CD

[CI/CD] CI/CD에 관하여

나맘임 2024. 4. 14. 22:30

CI/CD 중요성

IT 기술이 발전함에 따라 프로그램의 규모는 점점 더 커지고 있습니다. 그에 따라 사람 혼자 프로그램을 개발하는 것이 불가능이라고 말할 수 있을 정도로 클라이언트가 요구하는 프로그램의 규모는 나날이 복잡해지고 있습니다.

 

이 때문에 개발자들은 협업을 진행합니다.

하지만 이런 생각을 해보신 적 있으신가요?

어느 한 회사에 100명의 넘는 개발자들이 있다고 해보겠습니다.

그러면 그 100명은 각각 자신들이 맡은 기능을 개발하겠죠.

당연히도 최종적으로 100개의 결과물이 나올 겁니다.

이 결과물들을 어떻게 합치고, 테스트를 하며, 빌드를 진행할까요?

 

그림 1. 개발자가 많은 회사 예시

 

위와 같이 개발자 수가 많은 회사들은 이 100개의 개발 결과물 관리에 큰 어려움을 겪을 겁니다.

결과물 관리를 편하게 하고 시간을 단축할 수 있도록 도와주는 것이 CI/CD 바로 지속적인 통합(Continuous Integration, CI), 지속적인 서비스 제공 및 배포(Continuous Delivery/Deployment) 입니다.

 


 

CI(Continuous Integration)란?

먼저, CI의 단어 그 자체의 의미를 따져본다면 "지속적인 통합" 이라고 할 수 있습니다.

이름에서 추론할 수 있듯이 애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 레포지토리에 통합되는 것을 의미합니다.

즉, CI는 빌드 및 테스트를 자동화한 과정을 뜻합니다.

 

CI가 성공적으로 구현이 됐을 경우, 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있게 됩니다.

 

이를 이해할 때 Github의 예시를 주로 듭니다.

우리는 Github를 사용할 때 공유 레포지토리를 만들고 Commit 및 Merge를 통해 레포지토리에 작업의 결과물을 모읍니다.

이를 일종의 CI라고 할 수 있는 것이고, 더 나아가 CI는 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장한다는 목적이 존재한다고 생각하면 됩니다.

 

CI의 장점

1. 코드 검증에 들어가는 시간이 줄어든다.

2. 자동으로 빌드 및 테스트를 하기 때문에 코드의 품질이 향상된다.

3. 모든 개발자가 동일한 빌드 및 테스트 환경에서 작업하기 때문에 협업이 강화된다.

 

등의 수많은 장점들이 존재합니다.

 

하지만 단점도 존재합니다.

CI의 단점

1. 초기 설정 및 유지 관리 비용이 든다.

CI 시스템을 구축하고 유지 관리하는 데는 초기 설정 및 시간과 비용이 소요되고 또한 새로운 툴을 배우고 통합하는 데 시간이 걸릴 수 있습니다.

2. 부정확한 테스트 존재 가능성

자동화된 테스트는 모든 측면을 완전하게 커버하지 못할 수 있습니다.

그렇기 때문에 테스트 코드를 상세하게 작성해야 합니다.

 


 

CD(Continuous Delivery/Deployment)란?

CD를 나타내는 말엔 크게 Continuous Delivery, Continuous Deployment 로 나누어집니다.

일반적으로는 이 두 단어는 같은 의미로 쓰이지만, 원론적으로는 다른 의미입니다.

 

지속적 제공(Continuous Delivery)

코드 변경 사항의 병합부터 프로덕션의 빌드 제공에 이르기까지 모든 단계에 테스트 자동화와 코드 릴리즈 자동화까지 포함되는 활동입니다.

 

즉, 릴리즈 준비 단계까지 자동으로 진행되고 이후 개발자 팀 & 운영(사업) 팀에서 사용자에게 서비스를 제공해도 될지를 판단 후에 수동으로 배포를 하는 것을 의미합니다.

 

이 경우 개발 팀과 운영(사업) 팀 간의 가시성 및 의사소통 부족 문제를 해결할 수 있고 언제나 프로덕트 배포 할 준비가 되어 있는 상황을 만들어주는 장점이 있습니다.

 

지속적 배포(Continuous Deployment)

지속적 배포는 앞선 설명한 지속적 제공의 확장으로, 개발자의 변경 사항을 레포지토리에 업로드, 프로덕트로 릴리즈까지를 자동화한 것을 의미합니다.

 

지속적 제공에서 있었던 수동적 작업이 삭제된 것으로 수동 프로세스로 인한 운영(사업) 팀의 업무 과다 문제 & 애플리케이션 업데이트 지연 문제 등을 해결할 수 있습니다.

 

하지만, 수동 작업이 없어졌다는 뜻은 잘 설계된 자동화 테스트에 크게 의존한다는 말이므로 초기 투자 비용(시간 포함)이 매우 높다는 특징을 가지고 있습니다.

 

그림 2. CI/CD 파이프라인 도식화

 


 

대표적인 CI/CD 툴

1. Jenkins

CI에서 끝나지 않고 CD까지 해주는 자동화된 오픈 소스 서버를 제공하는 소프트웨어

무료에다가 기능이 다양하다는 장점이 있습니다.

2. CircleCI

컨테이너 또는 가상 머신을 사용하고 간단한 디버깅과 빠른 테스트가 특징입니다.

3. TeamCity

유명한 제트브레인사의 소프트웨어로 사용자 정의, 상호 작용 및 서버 확장에 도움을 줍니다.

4. GitLab

문제 모니터링, 보고, 위키 같은 기능을 갖춘 웹 중점의 Git 저장소 관리자입니다.

Git 기반으로 커밋, 푸시를 통해 빌드를 트리거하고 테스트 실행 및 코드 배포 가능합니다.

 

 


참고 문헌

블록체인 플랫폼별 풀타임 개발자 수 TOP 10 | Talken Community

 

블록체인 플랫폼별 풀타임 개발자 수 TOP 10 - Talken

"" (https://storage.cobak.co/uploads/1642489922397342_5e0d3a52a3.jpg)

talken.io

CI/CD란 무엇일까? — 개발자 Miro (tistory.com)

 

CI/CD란 무엇일까?

오늘은 CI/CD에 대해서 작성해보겠습니다. 앞으로는 글을 작성하는데 편한 글씨체로 작성할 생각입니다 :) CI/CD란? CI/CD는 개발자라면 한 번쯤은 다들 들어봤을 만한 단어일 것이다. CI/CD는 애플리

jud00.tistory.com

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이 (redhat.com)

 

CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이

CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.

www.redhat.com

Top 7 Best CI/CD Tools you should get your hands on in 2020 | by Praful Dhabekar | DevOps Dudes | Medium

 

Top 7 Best CI/CD Tools you should get your hands on in 2020

Startups and Enterprises are moving towards DevOps methodologies and Agile culture to speed up delivery and ensure product quality. A…

medium.com