[Deploy] CI/CD

Hyun Jin·2023년 4월 3일
0
post-thumbnail

1. 개발 프로세스


개발 프로세스

개발 프로세스, 즉 소프트웨어 개발 프로세스 모델은 소프트웨어 개발 생명주기(SDLC, Software Develpment Life Cycle)을 기반으로 만들어짐

Waterfall Model

전통적인 개발 프로세스. Maintenance 까지 완료되면 처음으로 돌아가 다시 시작함.

Agile Model

  • sprint(짧은 주기의 개발 사이클)을 반복하며 개발함.
  • 빠르게 문제를 해결해 하루에도 여러 번의 배포가 가능함
  • SaaS(Software as a Service, 서비스형 소프트웨어) 를 개발하는 데에 적합함.

SaaS

전통적인 Waterfall 개발 프로세스 vs 모던 Agile 개발 프로세스

2. DevOps


DevOps 란?

DevOps는 개발(development)과 운영(operations)의 합성어로, 소프트웨어의 개발부터 운영까지 전반에 걸친 과정을 통합하고 자동화하는 것을 목표로 하는 문화와 방식 및 도구

DevOps 특징

코드 통합, 테스트, 배포 과정을 자동화 시켜 지속적 통합 및 배포(CI/CD)를 하는 것.

DevOps 의 장점

  • 각 단계의 효율을 높이고 자동화함으로써 제품 개발과 출시에 걸리는 시간을 단축할 수 있고
  • 고객 만족도를 높여 높은 성과를 달성할 수 있음
  • 또한 새롭게 출시하는 제품의 오류를 사전에 방지해 안정성을 높이고,
  • 자동화된 파이프라인을 이용해 발생한 오류를 더욱 빠르게 복구할 수 있음

DevOps 사례

  • Netflix
  • Flicker
  • Spotify

DevOps 방법

  • 애자일(애자일 방법론의 일부로 스크럼과 칸반이 있음)
  • 스크럼 : 스프린트, 스탠드업, 회고와 같은 수단을 통해 팀이 지속적으로 개선할 수 있는 구체적인 방법을 정함
  • 칸반 : 카드를 통해 연속된 프로세스와 업무를 관리하는 시각적 방법

DevOps 참고사이트

https://www.netapp.com/ko/devops-solutions/what-is-devops/

3. CI/CD


1. CI/CD

1. 지속적 통합(Continuous Integration, CI)

  • CI : 빌드/테스트 자동화 과정
  • Code - Build - Test 단계의 지속적 통합(하나의 리포지토리로 코드 push, 테스트, 빌드, 개선)
  • 여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트하는 것
  • Github Action - 따로 CI 서버를 구축할 필요 없이 CI 를 구현하게 해주며, yaml 파일 생성을 통해 CI 전략을 설정할 수 있음
  • 장점 : 소스 코드가 변경될대마다 지속적으로 코드를 병합하고 테스트를 진행하여 코드 충돌/테스트 실패 시 즉각적으로 알려줌. ⇒ 개발의 편의성 증가, 변경된 코드에 대한 즉각적 피드백과 검증 가능, 소스코드의 통합과 검증에 들어가는 시간 단축

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

  • CD : 배포 자동화 과정
  • 지속적인 서비스 제공(Continuous Delivery) 및 지속적인 배포(Continuous Deployment)
  • Release - Deploy - Operate 단계(코드 변경사항 병함, 프로덕션에 적합한 빌드 제공에 이르는 모든 단계)
  • 테스트 자동화, 코드 배포 자동화 포함
  • 개발, 통합, 배포, 릴리즈, 테스트를 자동화하여 지속적으로 배포하는 것
  • 장점 :
    • 실제 배포할 애플리케이션의 서버가 여러대이거나 배포할 작업물이 여러 개일 때 배포시 발생할 수 있는 실수를 방지할 수 있음.
    • 빌드, 테스트, 배포 자동화 진행 가능
  • 지속적 배포 사례 : Github Page 로 배포해보기

2. 배포 자동화

  • 한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것 ⇒ 시간 절약, human error 방지 가능

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

3. CI/CD 파이프라인

  • CI/CD 파이프라인 : 배포 과정을 자동화시키는 방법

IT 대기업 및 스타트업에서의 CI/CD 사례

CI/CD 참고사이트

4. Github Action


Github Actions이란

Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼

  • 레포지토리에서 Pull Requestpush 같은 이벤트를 트리거로 GitHub 작업 워크플로(Workflow)를 구성할 수 있음
  • 워크플로는 하나 이상의 작업이 실행되는 자동화 프로세스로, 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행됨
  • 워크플로는 .yml (혹은 .yaml ) 파일에 의해 구성되며, 테스트, 배포 등 기능에 따라 여러개의 워크플로도 만들 수 있음
  • 생성된 워크플로는 .github/workflows 디렉토리 이하에 위치함
  • 비공개 레포지토리의 경우 Github Actions가 작동할 때의 용량과 시간이 제한되어있으며 공개 레포지토리는 무료로 사용 가능함
  • Github Actions 공식문서 : https://docs.github.com/en/actions

YAML 이란

Yet Another Markup Language의 약자로, 사람이 읽을 수 있는 데이터 직렬화 언어

  • YAML 파일 형식 및 문법
  • 예시 코드
  • 시크릿 키 설정하기
    name: Bare Minimum Requirements
    on: [push, pull_request]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Bare Minimum Requirements
            uses: actions/setup-node@v1
            with:
              node-version: '16'
          - run: npm install
          - run: npm test

YAML 사용법 및 실제 사용 사례

YAML은 일반적으로 설정 파일(configure file 등)에 사용하기에 좋아서 spring boot, github action 등 다양한 CI/CD 툴이나 프레임워크에서 사용되고 있음

GitHub Action 을 이용해서 AWS S3 배포 자동화 하기 실습

  • Github Action 으로 클라이언트 CI/CD를 구축한 배포 링크 : http://fe-75-lhj5924-s3.s3-website.ap-northeast-2.amazonaws.com/login
  • YAML 코드 예시(AWS S3를 통한 클라이언트 배포)
    # .github/workflows/client.yml
    name: client
    on:
    push:
    branches:
    - reference
    # Allows you to run this workflow manually from the Actions tab
    jobs:
    build:
    runs-on: ubuntu-20.04
    steps:
    - name: Checkout source code.
    uses: actions/checkout@v2
    - name: Install dependencies
    run: npm install
    working-directory: ./my-agora-states-client
    - name: Build
    run: npm run build
    working-directory: ./my-agora-states-client
    - name: SHOW AWS CLI VERSION
    run: |
    aws --version
    - name: Sync Bucket
    env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
    AWS_EC2_METADATA_DISABLED: true
    run: |
    aws s3 sync \
    --region ap-northeast-2 \
    build s3://fe-75-lhj5924-s3 \
    --delete
    working-directory: ./my-agora-states-client 
profile
새싹 프론트엔드 개발자

0개의 댓글