본문 바로가기
FrontEnd

[DevOps] CI/CD란?

by 푸고배 2022. 1. 15.

데브옵스(DevOps)

데브옵스는 소프트웨어 개발, 운영의 합성어로, 소프트웨어 개발자와 정보 기술 전문가 간의 소통, 협업, 통합을 강조하는 개발환경이나 문화를 말한다. 데브옵스란 개념은 클라우드와 함께 부상했다. 전통적인 인프라는 서비스 변화를 따라가기 어려웠으나, 클라우드로 인프라 구축과 관리가 쉬워지고 코드로도 관리가 가능해지면서 데브 옵스가 대두되기 시작했다.

 

'타임 투 마켓(Time to Market)'이 비지니스의 성패를 좌우하는 비지니스의 핵심 가치가 되면서 린스타트업이 떠오른다. 린스타트업은 프로토타입을 시장에 내놓고 고객 피드백을 받아 지속 개선하며 비지니스 방향을 수정해나가는 방법론이다. 린스타트업을 실천하기 위해서는 지속적 통합(CI), 지속적 배포(CD)가 가능해야 했고, 이는 개발과 운영을 하나로 통합하는 데브옵스로 이어진다.

 

Integration Hell(통합 지옥)

통합지옥은 전통적인 개발한 코드를 하나로 모아 빌드할 때의 어려움을 지옥에 빗대 표현한 말이다. 전통적인 개발 과정에서는 개발이 끝난 후 한꺼번에 통합을 하기 때문에, 통합 과정이 몇 시간 또는 며칠이 걸리기도 한다. 

 

Continuous Integration(CI)

지속적 통합, 한 번에 모아 통합하기는 어려우니 작은 단위로 코드를 자동으로 수시로 테스트하고, 통합하자는 것이다.

 

CI(지속적 통합)를 통해 개발자들은 코드 변경 사항을 공유 브랜치 또는 "트렁크"로 다시 병합하는 작업을 더욱 수월하게 자주 수행할 수 있다. 개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 각기 다른 레벨의 자동화 테스트(일반적으로 단위 테스트 및 통합 테스트) 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인한다. 다시 말해, 클래스와 기능에서부터 전체 애플리케이션을 구성하는 서로 다른 모듈에 이르기까지 모든 것에 대한 테스트를 수행한다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 자주 수정할 수 있다.

 

CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

 

CI의 대표 도구로는 젠킨스(Jenkins)가 있다.

 

Continuous Delivery/Continuous Deployment(CD)

지속적인 서비스 제공, 또는 지속적인 배포를 의미하며 이 두 용어는 상호 교환적으로 사용된다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다. 

 

지속적인 제공(Continuous Delivery)이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예:Github 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 뜻하며, 운영팀은 이 리포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있다. 이는 개발팀과 비지니스팀 간의 가시성과 커뮤니케이션 부족 문제를 해결해준다. 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.

 

지속적인 배포(Continuous Deployment)란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미한다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결한다. 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공이 가진 장점을 활용한다.

CI/CD는 지속적 통합 및 지속적 제공(CD, Continuous Delivery)의 구축 사례만을 지칭할 때도 있고, 지속적 통합, 지속적 제공, 지속적 배포라는 3가지 구축 사례 모두를 의미하는 것일 수도 있다. ("지속적인 서비스 제공"은 때로 지속적인 배포의 과정까지 포함하는 방식으로 사용되기도 한다.)

 

결과적으로 CI/CD는 파이프라인으로 표현되는 실제 프로세스를 의미하고, 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미한다. 이 용어는 사례별로 CI/CD 파이프라인에 구현된 자동화 수준 정도에 따라 그 의미가 달라진다.

 


Reference

 

오크부터 통합지옥까지...개발자 용어사전-2 - 테크잇

아리송한 IT 용어/은어 사전은 개발자 지망생, 신입 개발자 등이 뜻을 잘못 알거나 모르는 개발 용어를 설명하고 관련 도서나 글을 추천하는 콘텐츠입니다.오크(Oak) 오크(Oak)는 떡갈나무나 참나

techit.kr

 

DEVOPS, CI/CD란 무엇일까요?

뉴딜코리아 홈페이지 DEVOPS CI/CD란 무엇일까요? CI (continuous integration) : 지속적인 통...

blog.naver.com

 

CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정

CI/CD는 애플리케이션의 통합 및 테스트부터 제공 및 배포까지 전체 라이프사이클에서 지속적인 자동화와 모니터링을 제공합니다. 개념, 차이점, 학습방법(인강)을 보세요.

www.redhat.com

 

반응형

댓글