Backend 🖥️

CI/CD 란?

봄설날 2024. 8. 19. 22:41

#1 CI/CD 파이프라인이란!!

→ 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번하게 배포할 수 있는 것! DevOps의 핵심이라고 할 수 있다.

 

CI/CD에 대해 검색하면 이러한 그림을 자주 볼 수 있다.

#2 우선 용어 정리 부터!

  • Plan: 개발이나 배포를 시작하기 전에 이루어지는 초기 단계에서의 활동
  • Code : 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계
  • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정
  • Release : 배포 가능한 소프트웨어 패키지를 작성.
  • Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출 => 실질적인 배포
  • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지
  • Measure: 개발 및 배포 이후 후반부 단계에서 성과를 평가하고 개선하는 데 사용

 

그럼 이제 CI/CD에 대해 자세히 알아보자. 사용된 예시는 Github Action을 사용할 때의 예시이다.

 

#3 CI : Continuous Integration (지속적 통합)

 

Continuous Integration(CI)는 개발자들이 작성한 코드를 자주 중앙 저장소에 통합하는 소프트웨어 개발 방법!

주기적으로 빌드 및 테스트되면서 공유되는 레포에 머지되는 것이다.

 

우리는 개발하면서 Build 와 Test를 하는데, 기본적으로는 통합(merge) 해줄 때 마다 진행해야한다. 하지만 그렇게 되면 귀찮고 힘들다는 것을 우리는 경험으로 알고있다.

 

하지만 이 과정을 자동화 해 줄 수 있다면?

개발 과정이 편해지고 속도도 빨라질 것이다.

 

즉, CI를 사용할 경우 Github에 코드만 올리면 나머지 작업인 테스트와 빌드는 자동으로 해주는 것이다.

 

자동화를 사용하면 어떤 일이 벌어질까? 전체적인 흐름은 아래와 같다.

 

개발자들이 형상관리 툴(github)에 작업한 코드를 통합 → 빌드 및 테스트는 자동, 버그가 생기면 해결!

 

정말 간단해졌다!!

 

그리고 이러한 과정을 통해 아래와 같은 장점을 가질 수 있다.

코드 검증에 시간 소요 감소
개발 편의성 증가
메인 코드 유지

 

CD 에는 두가지 의미가 있다.

 

#4-1 CD : Continuous Delivery (지속적 제공)

 

CI에서 Build, Test 후, 배포 단계에서 release 할 준비 단계를 거친 후에 문제가 없는지 수정 할 만한 것들이 없는지 개발자가 검증하는 팀이 검증한다.

 

그 후 나온 서비스를 제공해도 괜찮다 라는 결론이 나오면 배포를 수동적으로 진행한다. 이러한 진행이 지속적인 제공의 CD 이다.

 

즉, Continuous Delivery(CD)는 CI를 확장한 개념으로, 코드를 항상 배포 가능한 상태로 유지하는 것이다. 모든 코드 변경이 빌드, 테스트 및 릴리스 파이프라인을 통해 자동으로 검증되며, 필요한 경우 수동 승인 후 실제 운영 환경에 배포할 수 있다.

 

이번에도 전체적은 흐름을 살펴보면

 

자동화된 테스트(CI 테스트 외에도 성능 테스트, 보안 테스트 등 다른 테스트) → 배포 자동화(배포 파이프 라인을 통해 다양한 환경에 자동으로 배포) → 수동 승인

 

이러한 과정을 거치는 것이다.

 

이렇게 하면 다음과 같은 장점을 가지게 된다.

배포 속도 향상
테스트 된 코드만 배포되므로 안정적
언제든지 배포 할 수 있는 유연성

 

#4-2 CD : Continuous Deployment (지속적 배포)

Continuous Deployment(CD)는 Continuous Delivery에서 한 단계 더 나아가, 수동 승인 단계 없이 모든 검증된 코드 변경을 자동으로 운영 환경에 배포하는 것이다.

 

4-1의 CD와는 최종 단계가 자동화가 되었냐 안되었냐 차이이다.

 

최종 단계가 자동화 되었으므로 당연히 매우 빠른 배포 주기를 가질 수 있다!!

 

장점을 정리해 보자면

빠른 배포 주기 : 코드 변경이 즉시 운영 환경에 반영
개발자 생산성 향상 : 배포 프로세스가 자동화되어 개발자가 배포에 소요되는 시간을 줄이고 개발에 집중
빠른 피드백 : 사용자로부터 빠르게 피드백을 받을 수 있다.