Tech story/Container

DevOps의 친구 DevTools! - CI/CD(1/3)

KT Cloud Crew 2020. 11. 2. 13:07

CI/CD란 무엇인가?

안녕하세요, KT Cloud입니다.

오늘은 DevOps 엔지니어라면 꼭 알아야 하는 CI/CD에 대해서 소개하려고 합니다.

CI/CD라는 용어를 처음 접해 보신 분도, 들어는 보았지만 사용해본 적 없으신 분도 계실 텐데요

이번 글에서는, CI/CD가 나오게 된 배경에서부터, 개념까지 다뤄보겠습니다.

 

 

1. Background

수많은 앱과 서비스가 출시되는 요즘 시대에 소프트웨어 프로젝트는 점점 복잡해지고 거대해져 갑니다. 

사용자들의 요구에 맞게 더 많고, 편리한 기능을 제공하기 위해 꾸준한 업데이트와 신규 서비스가 출시되고 있지요. 

수많은 기능들이 요구됨에 따라, 각각의 기능을 분리하는 Micro Service Architecture가 유행하기 시작했습니다.

효율적인 생산성을 위해, 서로 다른 개발자들이 각자 맡은 기능을 구현하게 되고 이를 하나로 합쳐 론칭하게 되죠.

CI/CD 사용 전 개발 프로세스

그에 따라 유지/보수에도 많은 노력이 필요하게 됩니다.

각각 다른 환경에서, 다른 사람이 개발한 코드를 1) 합치고, 2) 빌드하고, 3) 테스트하는 과정은 번거롭고 시간을 많이 잡아먹습니다. 

개발자들은 귀찮은 것을 매우 싫어하는 사람들이기에 이렇게 생각했습니다.

이걸 굳이 사람이 일일이 해야 할까?
코드를 Commit 함과 동시에 통합, 빌드하고 배포까지 자동화할 수 없을까?

이를 바탕으로, 자동으로 그리고 지속적으로 통합하고(CI), 배포하는(CD) 기능들을 구축하기 시작합니다.

 

2. CI (Continuous Integration)

CI는 지속적인 통합을 의미합니다.

 

새로운 코드의 변경사항이 정기적으로 빌드, 테스트, Merge 하는 역할을 담당하죠

자동화된 CI는 개발자들 간의 코드 충돌을 방지하며 품질을 유지해 주기에 생산성을 증가시킵니다.

또한, 기존 코드와 신규 코드와의 충돌을 검사해 주기에, 문제가 일어날 경우 바로 알 수 있죠.

 

Trigger기능을 활용하여, commit과 동시에 build를 실행할 수도 있고, 

시간을 정해두어 주기적인 빌드를 실행할 수도 있습니다.

 

빌드와 테스트 결과를 리포트로 제공해 주어 개발자들에게 문제점을 알려주고, 빠르게 수정할 수 있도록 도와줍니다.

 

 

3. CD (Continuous Delivery / Deployment)

CD는 지속적인 전달, 배포를 의미합니다.

 

우선, Continuous Delivery는 서비스를 제공하고 전달하는 의미로 사용됩니다.

CI 과정을 통해 테스트에 통과한 버전을 테스트 서버에 자동으로 업로드하게 되죠.

운영팀은 이 테스트 서버를 통해 빠르게 새로운 버전을 확인할 수 있고, 이를 상용화 환경으로 배포할 수 있는지 점검합니다.

 

이후, Continuous Deployment는 서비스를 상용화하고 배포하는 과정을 의미합니다.

테스트 서버에서 검증된 코드를 상용화 서버로 자동 배포하는 기능이며, 운영팀에서 실시간으로 배포가 가능하죠.

테스트와 빌드가 지속적으로 이루어 지기에, 서비스의 중단 없이 배포가 가능합니다.

 

 

그래서 CI/CD 가 왜 좋은데?

결론적으로, CI/CD는 빌드와 테스트 그리고 배포하는 과정을 자동화시켜줍니다.

번거로운 작업들을 직접 하지 않고 컴퓨터에게 맡기기만 하면 되는 것이죠.

때문에 개발자들은 1) 개발에만 집중할 수 있고, 2) 버그가 발견되면 빠르게 수정할 수 있습니다.

CI/CD 사용 후 개발 프로세스

자동으로, 지속적으로 무중단 배포를 도와주기에, 고객들에게 항상 최신 버전을 제공할 수 있습니다.

또한, 변경사항을 실시간으로 적용할 수 있기에 피드백을 빠르게 반영하여 통합하기 수월해지고, 보다 짧은 주기로 고객에게 서비스를 제공할 수 있습니다.

 

CI/CD Pipeline

이러한 종합적인 구축 체계를  "CI/CD 파이프라인"이라고 하며, 애플리케이션의 LifeCycle전체에 걸쳐 지속적이며 자동화된 통합, 빌드(테스트), 배포를 제공하여 생산성을 극대화시킬 수 있게 지원해 줍니다.

 

다음에는 이러한 CI/CD를 쉽게 자동화하고 사용할 수 있는 Tool들을 소개해 보도록 하겠습니다.

 

 

 

 

이어지는 글

 

1. CI/CD 편

  • DevOps의 친구 DevTools! - CI/CD(2/3)
  • DevOps의 친구 DevTools! - CI/CD(3/3)

2. DevOps란?

3. 극한의 생산성 - Agile Project