Verity's Daily Logs_

[CI/CD환경구축-1]CI/CD에 대하여 본문

GIT & Jenkins

[CI/CD환경구축-1]CI/CD에 대하여

johye0 2020. 6. 3. 09:17
반응형

CI/CD 환경 구축썰에 대한 이야기를 하기 전에, CI/CD가 대체 무엇을 의미하는지 정리하려고 한다.

 

아래 기재할 내용들은 https://itholic.github.io/qa-cicd/ 를 참고했다.

(다른 사이트도 많지만 DevOps 초심자가 이해할 수 있도록 아주 쉽게 설명되어있다. 감사합니다......)

 

소프트에어 개발 및 유지보수의 단계는 소스 수정/빌드/배포로 이루어져 있다. 특히 서비스 오픈 후에는 무수한 버그와 개선사항이 터져 나올 것이며, 이때마다 위 과정이 반복되기 마련이다.

소스 수정이 있을때마다 컴파일, 빌드, 배포를 매번 개발자가 직접 수행하는 것은 매우 비효율적이다. 이러한 활동을 지원하는 기법 중 하나가 바로 CI (Continuous Integration) / CD (Continuous Deploy 또는 Delivery)이며, 이는 오래전부터 소프트웨어 개발에 있어서 위험을 줄이는 방식으로 사용되고 있다. 

 

 

CI (Continuous Integration) 

CI는 지속적 통합으로, 

모든 개발이 끝난 이후에 코드 품질을 관리하는 고전적 방식의 단점을 해소하기위해 나타난 개념이다. 말 그대로 개발을 하면서 ‘코드에 대한 통합’을 ‘지속적’으로 진행함으로써 품질을 유지하자는 것이다.

 

인원이 10명 이상인 개발팀에서 각자 소스를 수정한 후 그 누구도 중앙 저장소에 코드를 올리지 않는다면, 개발이 끝난 후 각자의 소스를 통합하여 릴리즈 가능한 최종본으로 만들어내는 순간이 너무 힘들어질 것이다. 소스량이 많으면 많아질수록 통합과정은 복잡해지고 신뢰도도 떨어질 수밖에 없다. (사람인지라)

 

중앙 저장소에 코드만 제대로 올려놓으면 알아서 테스트와 빌드를 수행하고, 그 결과를 잘 정리해 개발자에게 자동으로 알려주는 프로그램이 있다면 좋지 않을까?라는 생각에서 따라오게 된 것이 CI이며, 그렇기 때문에 CI를 이야기할 때 항상 '자동화'라는 키워드가 함께 나타난다. 

 

 

 

CD (Continuous Deploy/Delivery)

CD란 지속적 배포(Continuous Deploy 또는 Delivery)로써,

소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리하자는 개념이다.

 

CI 프로세스를 통해 개발중에 지속적으로 빌드와 테스트를 진행하고, 이를 통과한 코드에 대하여 테스트서버와 운영서버에 곧바로 그 내용을 배포해 반영하는 것이 지속적 배포(CD)라고 할 수 있다. 이상적인 환경이라면 테스트와 빌드가 ‘지속적’으로 이루어지기 때문에, 배포 또한 자연스럽게 ‘지속적’으로 이루어지게 된다.

 

사실상,

    CI = 빌드 및 테스트 자동화

    CD = 배포 자동화

라고 기억해도 무방하다.

 

다행히도 CI/CD 자동화를 조금이나마 쉽게 구현할 수 있도록 도와주는 괜찮은 솔루션들이 이미 몇 가지 있다. 가장 대표적인 솔루션이 바로 Jenkins이다.

 

우리 팀은 최근에 Git과 Jenkins를 도입 중인데, 다음에는 우리 팀에게 적절한 CI/CD 환경을 만들려면 어떤 것을 고려해야 하는지에 대해 정리할 생각이다.

 

반응형
Comments