Section 4 - Unit 10 [Deploy] CI / CD

정호재·2023년 4월 3일
0

코드스테이츠

목록 보기
35/37

개발 프로레스

: s/w 및 시스템 개발 및 유지보수를 목적으로 수행되는 활동들의 절차를 의미하며, 전체적인 과정에 대한 가이드라인을 제공함 (SDLC)

SDLC

  • 요구분석 및 시스템 명세 작성
    : 문제분석 단계라고도 하며, 개발할 sw 기능, 성능, 기타 사항에 대해 사용자와 함께 정확히 정의하는 단계

  • 개발하고자 하는 소프트웨어의 성격을 정확히 이해하여 이를 토대로 개발 방법과 필요한 자원 및 예산 예측 후 요구명세 작성

  • 설계
    :계단계에서는 앞서 정의한 기능을 실제로 수행하기 위한 방법을 논리적으로 결정하며 크게 시스템, 프로그램, UI(User Interface) 설계로 나뉘며, 시스템 구조설계는 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조를 설계하고, 프로그램설계는 프로그램 내의 각 모듈에서의 처리 절차나 알고리즘 설계

  • 구현
    : 설계 단계에서 논리적으로 결정한 문제 해결 방법을 프로그래밍언어를 사용하여 실제 프로그램을 작성하며 이때 프로그래밍 기법은 구조화 프로그래밍과 모듈러 프로그래밍 두 개로 분류함

    • 구조화 프로그래밍
      : 조건문, 반복문을 사용하여 프로그램을 작성하고, 순차구조, 선택구조, 반복구조의 3가지 제어구조로 표현하며, 구조가 명확하여 정확성 검증과 테스트 및 유지보수가 쉬움
    • 모듈러 프로그래밍
      : 프로그램을 여러 개의 작은 모듈로 나누어 계층 관계로 구성하는 프로그래밍 기법으로, 모듈별로 개발과 테스트 및 유지보수 가능하며, 모듈의 재사용 가능
  • 테스트
    : 테스트 단계에서는 개발한 시스템이 요구사항을 만족하는지, 실행 결과가 예상한 결과와 정확하게 맞는지를 검사하고 평가하는 일련의 과정으로 미처 발견하지 못한 오류를 발견할 수 있기 때문에 매우 중요한 과정임

  • 배포 및 유지보수
    : 배포와 유지보수 단계는 시스템이 인수되고 설치된 후(배포) 일어나는 모든 활동을 지칭합니다. 이후 일어나는 커스터마이징, 구현, 테스트 등 모두 이 단계에 포함되므로 소프트웨어 생명주기에서 가장 긴 기간을 차지
    [유지보수 유형]

    • 수정형 유지보수 : 사용 중에 발견한 프로그램의 오류 수정 작업
    • 적응형 유지보수 : 시스템과 관련한 환경적 변화에 적응하기 위한 재조정 작업
    • 완전형 유지보수 : 시스템의 성능을 향상하기 위한 개선 작업
    • 예방형 유지보수 : 앞으로 발생할지 모를 변경 사항을 수용하기 위한 대비 작업

++ 실제 개발을 하는 단계는 '구현'부터 이며, 요구사항 단계는구현을 적합하게 하기 위함임

폭포수 모델 vs 애자일 모델

  • 폭포수 모델
    : 전통적인 개발 프로레스 형식으로 단계별로 순차적으로 개발을 진행하며, 선행 단계가 완료되고 결과 산출물이 도출되야 다음 단계로 진행이 되며, 유연하지 못한 방식이기에 사용자 피드백을 대응하기 어려움

  • 애자일 모델
    : 소프트웨어 구현과 변화 대응에 집중한 개발 모델로, sprint로 불리는 주기 단위로 개발을 짧고 빠르게 진행하며 여러번의 sprint를 진행하며 소프트웨어 크기를 점점 확대하는 방식

  • 위의 특징으로 인해 적극적이고 빠른 고객 피드백 수용에 용이함

DevOps

: 전통적인 IT 조직 구조에서 개발팀(Dev)과 운영팀(Ops)에서 프트웨어의 개발과 관리 및 유지보수를 각각 담당하는 방식의 비효율성과 불안정성을 해결하기 위해 나타난 개념으로, 개발 및 유지보수를 모두 담당할 수 있는 팀 혹은 부서를 의미

DevOps의 특징

  • 통환된 개발-운영 프로세스에서 시스템을 표준화하여 효율성을 확보해 코드 통합, 테스트, 배포의 과정을 자동화하며 이는 DevOps구조의 방식에서 핵심적인 원칙임(CI/CD)
  • 이를 통해 배포까지의 릴리즈 시간을 획기적으로 단축 가능

CI/CD

CI: CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
CD: 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미

지속적 통합(Continuous Integration, CI)

: 개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code - Build - Test 단계에서 사용 가능

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

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

: 지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 의미하며, 이 부분은 Release - Deploy - Operate 단계에서 사용가능

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

배포 자동화

: 하나의 명령어 혹은 하나의 입력으로 전체 배포 과정이 자동으로 진행되는 것으로, 수동적이고 반복적인 배포과정인 단축 및 휴먼 에러 방지등의 장점이 있음

CI/CD 파이프라인 도식화

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

Source stage -> Build stage -> Deploy stage

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

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

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

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

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

Proxy

: 클라이언트와 서버 사이에서 proxy server를 통해 우회 요청하여 서버로 하여금 동일한 출처에서의 요청으로 해석하게 끔 대리 응답 개념

-출처 코드스테이츠

profile
공부 일기장

0개의 댓글