CI/CD란
CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.
CD는 지속적인 서비스 제공(Continuous Delivery) 및 배포(Deployment)를 의미한다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
CI/CD의 개념만을 두고 보자면 자동화와 직접적으로 관련이 있지는 않다. 하지만 그럼에도 자동화라는 키워드는 CI/CD라는 단어에 항상 따라붙으며, CI/CD는 DevOps 엔지니어의 핵심 업무라고 불리기도 한다.
CI (지속적 통합, Continuous Integration)
애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 필드 및 테스트되면서 공유되는 레포지토리에 통합되는 것을 의미한다.
1. 코드 변경사항을 주기적으로 merge
여러 명이 동시에 진행하고 있는 하나의 프로젝트를 생각해 보자.
각자 개발한 코드들을 merge 하지 않고 며칠 동안 코드를 작성한 뒤에 한 번에 merge를 한다면 충돌되는 많은 코드들이 생겨날 것이다.
이렇게 되면 새로운 기능의 코드를 작성하는 시간보다 충돌하는 많은 코드들을 수정하는 시간이 더 오래 걸릴 수 있을 것이며, 어떤 개발자라도 원하는 상황이 아닐 것이다.
그렇기 때문에, 가능한 작은 단위로 나누어서 주기적으로 빈번히 개발하고 계속해서 통합하여 나가는 것이 중요하다.
흐름
개발자들은 계속해서 github 등의 관리 시스템에 통합한다.
→ 통합된 코드가 제대로 동작하는지 테스트를 진행
→ 통합된 코드가 제대로 빌드되는지 테스트를 진행
→ 버그가 발생하면 다음에 해야 할 목록에 정리해 두고 이후에 버그를 해결한다.
2. 통합 단계의 자동화
빌드와 테스트 과정은 굳이 사람이 하지 않아도 되는 작업이다.
위의 1번 과정을 빈번하게 merge 할 때마다 Build 하고 Test를 해야 하기 때문에, 한 번에 몰아서 하는 것보다 시간이 더 오래 소모될 수 있다.
만약, 개발자가 github에 코드를 올리기만 하고 Build와 Test는 자동으로 된다면 똑같이 반복되는 귀찮은 작업을 하지 않을 수 있으며, 문제도 더 적어지는 편한 방법일 것이다.
이렇기 대문에 자동화라는 키워드가 CI/CD가 개념적으로는 직접적인 관련이 없어도, 항상 떨어지지 않는 이유이다.
흐름
개발자들은 github 등의 관리 시스템에 통합한다.
→ 빌드 및 테스트는 자동으로 진행되므로, 버그가 생기면 보고 받아서 해결한다.
CI의 장점
- 코드의 검증에 들어가는 시간이 줄어든다
- 개발 편의성이 증가한다
- 항상 테스트 코드를 통과한 코드만이 레포지토리에 올라가기 때문에, 좋은 코드 퀄리티를 유지할 수 있다.
CD (지속적 제공 및 배포, Continuous Delivery & Deployment)
CI에서 빌드되고 테스트된 후에, 배포 단계에서 release 할 준비 단계를 거치고 문제가 없는지 최종적인 검증을 한다.
검증을 통해 release 할 준비를 마치고 배포를 수동적으로 진행하는 것이 "Continuous Delivery, 지속적 제공"이다.
또한 위와 같이 배포할 준비가 되자마자 자동화를 통하여 배포를 진행하는 것을 "Continuous Deployment, 지속적 배포"이다.
흐름
CI를 적용하여 코드를 검증한다.
→ 배포 환경과 비슷한 곳에서 검증을 진행한다.
→ 검증된 소프트웨어를 실제 프로덕션 환경으로 배포한다.
CD의 장점
- 개발자는 배포보다는 개발에 더욱 신경 쓸 수 있도록 도와준다.
- 개발자가 원클릭으로 수작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있다.
CI/CD 파이프라인
배포에서 파이프라인(Pipeline)이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻한다.
파이프라인은 전체 배포 과정을 여러 단계(Stage)로 분리하는데 대표적으로 쓰이는 세 가지 단계가 존재하고, 각 단계마다 주어진 작업(Actions)들을 수행한다.
- Source 단계 : 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
- Build 단계 : Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다. 또한 생성된 빌드 결과물을 다음 단계로 전달하는 작업을 수행한다.
- Deploy 단계 : Builde 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.
실전
Q. CI/CD에 대해 설명해 주세요.
A. CI/CD는 자동화를 통해 개발자들이 코드를 작성하는 데에 더 집중하게 해 주며, 개발 시간을 단축시켜 주는 역할을 합니다. CI는 Continuous Integration, 지속적 통합이라는 뜻으로 여러 명의 개발자들이 Github과 같은 협업 툴에서 각자가 개발한 코드를 지속적으로 빈번하게 merge 하여 충돌하는 코드를 줄이고, 오류를 줄이는 것을 말합니다. 이때 merge를 할 때마다 빌드하고 테스트하는 과정이 필요한데, 이 과정을 자동화 함으로써, 개발자는 좀 더 편리하게 개발을 진행할 수 있습니다.
CD는 Continuous Delivery, Deployment 즉, 지속적 제공, 배포라는 뜻입니다. CI의 작업을 거친 후, 레포지토리에 자동으로 업로드되는 것을 지속적 제공이라고 하며, 업로드된 애플리케이션을 최종 검증을 통해 수동을 배포할 수 있습니다. 지속적 배포는, 레포지토리에 자동으로 업로드되고 나서 배포까지 자동화해 두는 것을 지속적 제공이라고 합니다.
참고
https://jud00.tistory.com/entry/CICD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
IT 커리어 성장 코스 항해99, 개발자 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr