(SEB_FE) Section4 Unit7 CI/CD

PYM·2023년 6월 5일
0

(SEB_FE) SECTION4

목록 보기
22/24

💚CI/CD

🦖CI

개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)

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

🦖CD

지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)

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

💚CI/CD의 단계

일반적인 앱의 개발 및 유지보수 단계는 아래와 같다.
여기서 지속적 통합 및 지속적 전달을 단계별로 꾀할 수 있다.

🦖지속적 통합(Continuous Integration, CI)

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

  • Code
    : 개발자가 코드를 원격 코드 저장소 (Ex. 깃헙 레포)에 push하는 단계
  • Build
    : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • Test
    : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 과정

이 과정에서 개발자는 코드를 잦게 원격 코드 저장소에 push하고, 테스트 및 빌드를 하며 빌드 결과를 통해 빌드가 성공했는지 실패했는지 확인을 하고, 통합 테스트 결과를 통해 개선 방안을 찾는다.

이 지속적인 통합 과정을 통해 개발자는 버그를 일찍 발견할 수 있고, 테스트가 완료된 코드에 대해 빠른 전달이 가능해지며 지속적인 배포가 가능하다.

지속적 통합은 모든 코드 변화를 하나의 리포지토리에서 관리하는 것부터 시작한다.

  • 모든 개발팀이 코드의 변화를 확인할 수 있기 때문에, 투명하게 문제점을 파악할 수 있다. 또한 잦은 풀 리퀘스트(pull request)와 머지(merge)로 코드를 자주 통합한다. 이때, 기본적인 테스트도 작동시킬 수 있다.

    • 이렇게 지속적 통합을 통해 개발팀은 각자 개발한 코드를 이른 시점에 자주 합치고 자주 테스트 해볼 수 있다.
  • 지속적 통합으로 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선할 수 있다.

    • 이전에는 각자 개발자가 작성한 코드를 합치고 난 후, 모두 모여서 빌드를 시작하고 나서야 문제점을 파악할 수 있었으나, 지속적 통합이 적용된 개발팀은 코드를 머지하기 전, 이미 빌드 오류나 테스트 오류를 확인하여 훨씬 더 효율적인 개발을 할 수 있게 된다.

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

지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 두 용어는 상호 교환적으로 사용된다. Release - Deploy - Operate 단계에서 꾀할 수 있다.

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

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

이 프로세스를 완료하면 프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 배포할 수 있기 때문에 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 된다.

최근에는 클라우드 기술 발전과 맞물려 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어서 다루는 경우가 점차 증가하고 있다.

  • 예를 들어, 이전에는 배포 자체가 상당히 오래 걸리고 힘든 일이어서 배포 이전 단계에서 많은 고민을 하곤 했다. 서버를 전부 재시작해야 한다거나, 일부 기능을 제공하지 못하는 경우도 많았기 때문.
    하지만, 요즘은 고객의 피드백을 빨리 받기 위해서라도, 서비스를 중단하지 않기 위해서라도 릴리스만 잘 기록해 두고 바로바로 배포하는 사례가 증가하고 있다.

🦖지속적 배포 사례

지속적 배포의 가장 흔한 사례가 Github Page

지정해 둔 디렉토리에 정해진 방식에 따라 잘 커밋하기만 하면, Github Page가 알아서 해당 index.html 파일과 해당 디렉토리에 있는 파일을 잘 번들링 해서 Github Page 서버에 업로드한다.

이렇게 자동으로 인터넷에 배포가 되었고, 주변 가족이나 친구들에게 쉽게 만든 결과물을 공유할 수 있다.

💚CI/CD의 영역

CI/CD는 지속적 통합 및 지속적 제공(CD, Continuous Delivery)의 구축 사례만을 지칭할 때도 있고, 지속적 통합, 지속적 제공, 지속적 배포라는 3가지 구축 사례 모두를 의미하는 것일 수도 있다.

좀 더 복잡하게 설명하면 "지속적인 서비스 제공"은 때로 지속적인 배포의 과정까지 포함하는 방식으로 사용되기도 한다.

결과적으로 CI/CD는
파이프라인으로 표현되는 실제 프로세스를 의미하고, 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미!

이 용어는 사례별로 CI/CD 파이프라인에 구현된 자동화 수준 정도에 따라 그 의미가 달라진다.

대부분의 기업에서는 CI를 먼저 추가한 다음 클라우드 네이티브 애플리케이션의 일부로서 배포 및 개발 자동화를 구현해 나간다.

💚CI/CD 파이프라인

수없이 진행되는 배포 과정을 자동화시키는 방법

배포 자동화: 한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것으로, 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약되며 휴먼 에러(Human Error)를 방지할 수 있다.

위 그림은 배포 과정을 도식화한 것

  1. 개발자가 코드를 원격 저장소에 올리면,

  2. 그 코드가 빌드 및 테스트와 릴리스를 거쳐 배포 서버로 전달

  3. 배포 서버에 도달한 빌드된 코드는 애플리케이션 서버로 최종 배포가 완료되고, 그 결과물을 유저가 직접 확인하게 된다.

여기서 자동화를 꾀하는 부분은 보통 코드가 빌드되면서 최종적으로 배포가 되는 단계까지!

이 부분을 지속적인 통합 및 배포를 위하여 일련의 자동화 단계로 만드는데, 이것을 파이프라인을 구축한다고 표현한다.

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

파이프라인을 여러 단계로 분리할 때, 대표적으로 쓰이는 세 가지 단계를 알아보자.

  1. Source 단계
    : 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행

  2. Build 단계
    : Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.

  3. Deploy 단계
    : Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.

위 단계들은 더 세분화 되거나 간소화 되기도 한다. DevOps를 전문으로 하면, 더 세분화 하기도 한다. 또한 해당 툴을 소개하는 업체에 따라 용어를 미묘하게 다르게 사용하기도 한다. (통일 됐으면...)

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

🦖파이프라인 구성 요소

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

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

🦖장점

이렇게 구축된 파이프라인은 최신 버전의 소프트웨어 애플리케이션을 업데이트하고 제공하려는 일련의 처리 단계에 걸리는 시간을 수동으로 하는 것보다 더 빠르고 안정적이며 효과적으로 줄여주고 CI/CD 인프라와의 호환성과 효율성을 높여준다.

profile
목표는 "함께 일하고 싶은, 함께 일해서 좋은" Front-end 개발자

0개의 댓글