CI/CD?

CI란, CD란? CI/CD란?
Sep 14, 2023
CI/CD?
CI랑 CD? 나는 자동 배포 자동이 붙는거라고 얼핏 들었던 것 같지만 이번 기회에 제대로 이해하고 넘어가려고한다…
회사에서 코드를 작성하면 고객이나 다른 사람에게 만들어낸 웹 페이지를 보여줘야 하는 일이 많다.
어떻게 하면 사용자에게 우리의 코드를 보여줄 수 있을까?에서 출발한다.
 

1. 컴파일

첫 번째로 우리가 만든 코드를 컴파일 한다.
컴파일이란 우리가 만들어낸 코드를 컴퓨터가 읽을 수 있는 기계의 언어로 번역하는 것이다.

2. 빌드

다음은 컴파일 된 기계의 언어를 사용자에게 보여주기 위해 빌드하여 완성된 상품, 소프트웨어 가공물로 만들어낸다.

3. 배포

이렇게 만들어진 산출물을 각각의 서버에서 동작하도록 하여 상품을 사용자들에게 공개하는 것이 배포 이다.
 

CI/CD

사용자에게 우리가 만들어낸 프로젝트를 배포했는데 어떠한 동작이 올바르게 동작하지 않아 문제가 발생했다고 가정해보자.
 
일단 개발자는 비상이다. 컴파일 → 빌드 → 배포 → 테스트 → 검증을 또 진행해야한다. 이러한 과정은 시간도 오래 걸리고 실수도 많다.
 
수정된 코드에 문제가 발생하면 또 일련의 과정을 반복해야 하기에 이를 위해서 CI/CD가 생겨났다.
 
대서사였다.
 

CI (Continuous Integration)

CI는 지속적 통합 이라는 뜻으로 개발을 진행하면서도 품질을 관리할 수 있도록 하는 것으로 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다.
즉 여러명이 하나의 코드에 대해 수정을 진행해도 지속적으로 통합해서 관리
 
CI가 나오기 전까지는 위와 같이 개발을 끝마치고 배포가 되어야만 코드에 오류가 있는지 없는지를 알 수 있어 검증까지 오래걸렸다…
 
CI를 적용하게 되면 각자의 개발자가 자신의 구현해야 할 기능을 구현하면 된다.
이 후 완성이 되면 main 브랜치와 통합하고 코드가 잘 빌드되는지 보고, 올바르게 동작하는지 테스트하며 코드에 버그가 있다면 해결한다.
 
하지만 개발자가 직접 코드를 병합하고 빌드, 테스트를 검증하는 것은 시간이 많이 소요될 뿐만 아니라 귀찮고 그 양도 프로젝트의 크기가 커질수록 많아질 수 밖에 없다.
 
이를 자동화하면 개발자가 빌드와 테스트를 직접 하지 않고도 수정한 코드를 브랜치에 병합만하면 자동으로 빌드와 테스트를 검증할 수 있다.
 
개발자가 단위별로 구현한 부분을 병합할 때마다 자동화된 빌드와 테스트가 트리거되어 실행된다. 결과를 통해 우리는 어떤 부분에서 문제가 있었는지 배포 전에 확인할 수 있고, 배포가 완성된 후에야 버그를 수정할 수 있던 기존의 문제를 빠르고 정확하게 해결할 수 있다.

요약

  1. 개발자가 구현한 코드를 기존 코드와 병합한다.
  1. 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.
  1. 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포를 진행한다.

CD(Continuous Deployment)

이제 지속적으로 통합을 거친 코드에 대해서 신뢰할 수 있고 바로 배포할 수 있다.
 
CD는 지속적 배포로 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념으로 지속적 제공(Continuous Delivery)로 사용되기도 한다.
 
지속적 제공은 CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 github과 같은 저장소에 업로드하는 것을 의미한다.
 
지속적 배포는 이렇게 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것을 의미한다.
 
지속적 배포에서는 지속적 통합을 통해 빌드한 소스코드를 테스트 가능한 알파나 베타 버전으로 만든다. 이 버전에서 테스트를 수행해 문제가 발생하면 수정한 뒤 정식 버전으로 배포를 진행한다.
→ 아마 이거 예전에 한길에서 기획자 때 베타 버전 후 알파 후 정식 배포한 거랑 같은 구조인듯
notion image
대표적인 CI/CD 방법으론 Travis와 Jenkins가 있다.
 
Share article
RSSPowered by inblog