Deploy CI/CD

holang-i·2023년 6월 5일
0

서비스의 규모가 복잡해지고 커질수록 서비스를 배포하는 과정이 복잡해지고 소요되는 시간이 늘어나게 되는데 서비스의 변경 사항이 생길 때 마다 배포 과정을 매번 수동으로 진행한다면 배포 과정에 많은 시간이 허비 될 것이다.
전체 배포 과정을 자동으로 진행되기 만들기 위해 배포 자동화 개념에 대해 알아볼 것이다.

CI/CD란?

CI: Continuous Integration

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

CI를 성공적으로 구현할 경우

  • 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 / 테스트되어 공유 레포지토리에 통합되므로 동시에 여러 명이 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

CD: Continuous Delivery / Continuous Deployment

CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미한다.

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


CI/CD 단계

일반적인 앱의 개발, 유지보수 단계는 아래 그림과 같다.

지속적 통합(CI: Continuous Integration)

개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code- Build - Test 단계에서 쓰일 수 있다.

단계설명
Code개발자가 코드를 원격 코드 저장소에 push 하는 단계
Build원격 코드 저장소로부터 코드를 가져와서 Unit 테스트 후 build 하는 단계
Test코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 단계
  • 이 과정에서 개발자는 원격 코드 저장소에 잦은 push를 하고, 테스트, 빌드를 하며 빌드 결과를 통해 빌드가 성공/실패 했는지를 확인한다.
  • 통합 테스트 결과를 통해 개선 방안을 찾고 CI 과정을 통해 버그를 초기에 발견할 수 있고, 테스트가 완료된 코드에 대해 빠른 전달이 가능해지기 때문에 지속적인 배포가 가능하다.

CI 정리

설명
지속적 통합은 모든 코드 변화를 하나의 레포지토리에서 관리하는 것부터 시작한다. -> 모든 개발자, 팀에서 코드의 변경된 사항을 확인할 수 있기 때문에 문제점 파악에 용이하다.
잦은 PR(Pull Request)와 Merge로 코드를 자주 통합한다. -> 이 과정에서 기본적인 테스트를 할 수 있다.
CI로 보안 이슈, 에러 등을 쉽게 파악할 수 있다. -> 지속적 통합이 적용된 개발팀은 코드를 머지 전, 빌드 오류나 테스트 오류를 확인하여 더 효율적인 개발을 할 수 있다.

지속적 배포(CD: Continuous Delivery/Deployment)

Release - Deploy - Operate 단계에서 쓰일 수 있다.

단계설명
Release배포 가능한 소프트웨어 패키지를 작성한다.
Deploy프로비저닝을 실행하고, 서비스를 사용자에게 노출한다. (실질적인 배포 부분)
Operate서비스 현황을 파악하고 생길 수 있는 문제를 감지한다.

지속적 배포의 경우 코드 변경 사항의 병합, 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로 테스트 자동화와 코드 배포 자동화가 포함된다.


배포 자동화

배포 자동화란 명령어 등을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻한다.

배포 자동화가 필요한 이유
수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약된다.
Human Error("행위자에 의해 의도되지 않았거나, 일련의 규칙 또는 외부 관찰자가 원하지 않았거나, 작업 또는 시스템이 허용 가능한 한계를 벗어나도록 유도한" 작업)를 방지할 수 있다. 여기서는 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수들을 뜻한다.
그 전에 했던 배포 과정과 비교하여 특정 과정을 생략 or 다르게 진행하여 오류가 발생하는 것을 휴먼 에러의 예로 들 수 있다.
배포 자동화를 통해 전체 배포 과정을 매번 일관되게 진행하는 구조를 설계하여 휴먼 에러 발생 가능성을 낮출 수 있다.

CI/CD 파이프라인

CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공한다.
이러한 구축 사례를 일반적으로 CI/CD 파이프라인이라 부른다.


CI/CD 파이프라인을 구성하는 기본 단계와 수행 작업

배포에서 파이프라인(Pipeline)이란 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻한다.

파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리한다.
각 단계는 파이프라인 안에서 순차적으로 실행되며, 각 단계마다 주어진 작업(Actions)들을 수행한다.

파이프라인을 여러 단계로 분리할 때 대표적으로 쓰이는 세 단계

각 단계의 이름설명
SourceSource 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
BuildBuild 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다.
Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.
DeployDeploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.

CI/CD 파이프라인 구성 요소 및 장점

구성 요소설명
빌드소프트웨어 컴파일
테스트호환성 및 오류 검사
릴리즈버전 제어 저장소의 애플리케이션 업데이트
배포개발에서 프로덕션 환경으로의 변환
규정 준수 및 유효성 검사

로 이루어져 있다.
위의 과정이 실무에서 반복적으로 쓰이는 프로세스이기 때문에 이 부분들이 일련의 자동화 단계로 만들어진다고 볼 수 있다.

장점
위 과정들로 구축된 파이프라인은 최신 버전의 소프트웨어 애플리케이션을 업데이트 하고, 제공하려는 일련의 처리 단계들이 걸리는 시간을 수동으로 하는 것보다 빠르고 안전하게 해주고, CI/CD 인프라와의 호환성과 효율성을 높여준다.
profile
🌿 주니어 프론트엔드 개발자입니다! 부족하거나 잘못된 정보가 있다면 알려주세요:)

0개의 댓글