[CI/CD] CI/CD란? 지속적 통합(Continuous Integration)/지속적 배포(Continuous Delivery/Deployment)

우리가 일상생활에서 자주 쓰는 앱들은 모두 눈에 띄지 않게 계속해서 업데이트가 되고 있다. 이러한 앱들을 운영하는 회사는 모두 새로운 트렌드를 따라가야 하고 고객들의 피드백을 받으며 점차 개선해나가야 한다.

하지만 이렇게 앱을 업데이트 할때마다 매번 개발자들이 코드를 수정한뒤에 직접 빌드, 테스트 그리고 배포까지 한다면 상당히 많은 시간이 소요될 것이다.

근데 이때 코드를 커밋만 했을 뿐인데 누군가가 빌드, 테스트 그리고 배포까지 다해준다면 필요없는 시간들을 단축시켜주고 더욱더 개발에 효율적으로 시간을 쓸 수 있게 된다.

이를 위해 사용하는 것이 CI/CD이다.

CI/CD란?


Continuous Integration/Continuous Delivery(or Deployment)의 약자로 지속적인 통합, 지속적인 서비스를 제공하는 방법이다.

앞서 말했듯이 개발 및 운영팀에서 새로운 기능 추가, 구현 등으로 통합 지옥(integration hell)이라는 문제가 발생하게 된다.

기존의 것과 새로운 것을 다시 통합하여 아무런 문제없이 정상적인 앱을 완성해내야하지만 마음처럼 쉽게 되지 않는 경우가 많다.

이때 CI/CD는 앱의 통합 및 테스트 단계에서부터 제공/배포까지 하나의 앱에 다한 라이프사이클 전체에 걸쳐서 지속적인 자동화 모니터링을 제공해준다.

한마디로 앱의 지속적인 버전업과 유지보수를 위한 전체적인 프로세스를 현명하게 도와주는 방법이다.

CI란?


CI(Continuous Integration)를 간단히 요약하자면 빌드 및 테스트 자동화 과정이라고 볼 수 있다.

CI는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다.

CI를 성공적으로 구현할 경우 앱에 새로운 코드를 적용할게 생겼다면 이에 대한 변경사항이 정기적으로 빌드 및 테스트되어 공유 repository에 통합된다.

이로 인해서 여러 명의 개발자가 동시에 앱 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있게된다.

CI의 실행은 소스 및 버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일한 작업 환경을 제공하는 것으로 시작한다.

매번 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장한다.

CI는 그 자체로 유익하지만 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계이기도 하다.

CD란?


CD를 간단히 요약하자면 배포 자동화 과정이라고 볼 수 있다.

CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다.

두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때론 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.

지속적인 제공(Continuous Delivery)

개발자들이 테스트를 거쳐 적용한 변경 사항이 자동으로 repository에 업로드되는 것을 뜻하며 운영팀이 이 repository에서 앱을 배포한다.

지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.

지속적인 배포(Continuous Deployment)

개발자들의 변경 사항을 repository에서 고객이 사용하는 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미한다.

지속적인 배포는 파이프라인의 다음 단계를 자동화함으로 지속적인 제공이 가진 장점을 활용한다.

cicd

CI/CD 종류


  • Jenkins

  • CircleCI

  • TravisCI

  • Github Actions

  • etc



마무리


오늘은 CI/CD에 대해서 알아보았다.

CI/CD 적용 전과 후를 비교해본다면 코드의 양에 비례해서 CI/CD의 유무로 굉장히 많은 시간을 낭비할 수도 절약할 수도 있을 것이다.

본인같은 경우에는 전회사에서 SmartBuilder라는 툴을 이용하여 Jira 이슈단위로 서버에 배포하는 방식의 CI/CD를 사용하였고 현재회사에서는 Jenkins를 사용하여 dev/stg/live 서버에 배포하는 방식의 CI/CD를 사용하고 있다.

오늘 알아본 내용에서 보듯이 큰 서비스를 운영하는 회사에서는 CI/CD를 적용하는 것이 거의 필수라고 볼 수 있을 것 같다.

Categories:

Updated: