Github Actions 배포시간 단축

곽향훈·2023년 5월 20일
1

Trouble Shooting

목록 보기
2/10

Issue

디자인 디테일을 자주 확인해야 하는 경우, 빠른 테스트를 위해 수시로 개발 서버에 배포해야 할 때가 있다. 그러나 이 과정에서 배포 시간이 오래 걸리는 불편함이 있었다. 이에 따라, 배포 시간을 단축할 수 있는 방법을 알아보게 되었다.


Problem

  • 해당 프로젝트(staypia admin)는 Github Actions을 사용
  • 워크플로우를 통해 ECS로 배포
  • 배포 시간이 17분 가량 소요

Solution

  1. 워크플로우에서 배포시간단축할 수 있는 방법을 구글링
  2. 아래와 같이 작업 안정성 확인 비활성화(wait-for-service-stability: false)
- name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: ${{ env.ECS_SERVICE }}
          cluster: ${{ env.ECS_CLUSTER }}
          wait-for-service-stability: false. # <--- default is true
          
# 무중단 배포할때
# ecs 드레인하고 종료되는 것까지 기다린다: true
# ecs 드레인을 기다리지 않는다: false
  1. 테스트 해보니 staypia admin의 경우 30~40%(17분 -> 6분) 가량 시간 단축
  2. 배포를 하면 기존 서버에서 새 서버로 트래픽을 옮김
  3. 기본 설정인 wait-for-service-stability: true 일 때는 기존 사용자들(기존 서버가 처리중)의 트래픽을 새 서버에 안정적, 점진적으로 이관
  4. wait-for-service-stability: false 일 때는 기존서버를 멈추고 새 서버에 트래픽을 쏠리게해 상대적으로 빠르게 처리
  5. 따라서, 개발서버에서만 사용하는 것이 좋음

What I Leand

  • wait-for-service-stability의 장단점에 대해 알게 됨
    • 장점
      • 안정성 향상 : 서비스 대기 다음 단계로 진행하기 전에 안정화되면 서비스가 완전히 작동하고 워크플로우의 다음 단계에서 사용할 준비가 되었는지 확인하는 데 도움이 될 수 있다. 이렇게 하면 워크플로우의 안정성이 향상될 수 있다.
      • 오류 처리 개선 : 서비스가 안정적이지 않으면 워크플로우의 다음 단계에서 오류가 발생할 수 있다. 계속하기 전에 서비스가 안정될 때까지 기다리면 오류 위험을 줄이고 워크플로우의 전반적인 오류 처리를 개선할 수 있다.
      • 향상된 성능 : 서비스 대기가 안정화되면 성능 문제 또는 작업 흐름의 실패 위험을 줄이는 데 도움이 될 수 있다. 진행하기 전에 서비스가 완전히 작동하는지 확인하면 워크플로우 속도를 저하시킬 수 있는 성능 문제를 방지할 수 있다.
    • 단점
      • 워크플로우 시간 증가 : 서비스가 안정화될 때까지 기다리면 전체 워크플로우 시간이 늘어날 수 있다. 이는 워크플로우를 빨리 완료해야 하는 경우 단점이 될 수 있다.
      • 리소스 소비 : 서비스가 안정화되기를 기다리는 동안 워크플로우는 CPU 주기와 같은 리소스를 계속 소비할 수 있다. 이는 리소스가 제한되어 있거나 워크플로우가 공유 인프라에서 실행 중인 경우 단점이 될 수 있다.
      • 거짓 긍정 : 서비스가 안정적으로 보일 수 있는 위험이 있다. 서비스가 안정될 때까지 기다리면 보안에 대한 잘못된 정보을 제공하여 나중에 워크플로우에서 예기치 않은 오류가 발생할 수 있다.

전반적으로 "wait-for-service-stability의 서비스 안정성"은 워크플로우의 특정 요구 사항과 사용 중인 서비스와 관련된 위험에 따라 달라진다. 워크플로우에 이 단계를 포함할지 여부를 결정하기 전에 잠재적인 장단점을 신중하게 고려하는 것이 중요하다.

0개의 댓글