🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

GitHub Actions 성능 최적화 가이드 - 슬라이드 1/13
A

AI Generated

2025. 11. 1. · 21 Views

GitHub Actions 성능 최적화 가이드

GitHub Actions 워크플로우의 실행 시간을 단축하고 비용을 절감하는 고급 최적화 기법을 배웁니다. 캐싱, 병렬 처리, 조건부 실행 등 실무에서 바로 적용 가능한 전략을 다룹니다.


카테고리:TypeScript
언어:TypeScript
메인 태그:#GitHub Actions
서브 태그:
#Caching#Parallel Jobs#Workflow Optimization#CI/CD

들어가며

이 글에서는 GitHub Actions 성능 최적화 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. 의존성_캐싱으로_빌드_시간_단축
  2. 병렬_Job으로_테스트_시간_최적화
  3. Matrix_Strategy로_다중_환경_테스트
  4. 조건부_실행으로_불필요한_Job_스킵
  5. paths_필터로_변경된_파일만_처리
  6. concurrency로_중복_실행_방지
  7. Artifact_업로드로_Job_간_데이터_공유
  8. 셀프_호스팅_러너로_성능_향상
  9. Docker_레이어_캐싱_최적화
  10. 조기_실패_전략으로_피드백_단축
  11. GitHub_Script로_동적_워크플로우
  12. 워크플로우_재사용으로_유지보수_개선

1. 의존성 캐싱으로 빌드 시간 단축

개요

actions/cache를 사용하여 node_modules, pip 패키지 등을 캐싱하면 매번 다운로드하는 시간을 크게 줄일 수 있습니다.

코드 예제

steps:
  - uses: actions/checkout@v4
  - uses: actions/cache@v3
    with:
      path: ~/.npm
      key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
  - run: npm ci
  - run: npm run build

설명

package-lock.json 파일의 해시값을 키로 사용하여 의존성이 변경되지 않으면 캐시를 재사용합니다. 빌드 시간을 50% 이상 단축할 수 있습니다.


2. 병렬 Job으로 테스트 시간 최적화

개요

여러 Job을 동시에 실행하여 전체 워크플로우 실행 시간을 단축합니다. 테스트, 린트, 빌드를 병렬로 처리할 수 있습니다.

코드 예제

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test
  lint:
    runs-on: ubuntu-latest
    steps:
      - run: npm run lint
  build:
    runs-on: ubuntu-latest
    steps:
      - run: npm run build

설명

독립적인 작업들을 병렬로 실행하여 순차 실행 대비 3배 빠른 피드백을 받을 수 있습니다.


3. Matrix Strategy로 다중 환경 테스트

개요

매트릭스 전략을 사용하면 여러 Node 버전, OS에서 동시에 테스트할 수 있습니다.

코드 예제

jobs:
  test:
    strategy:
      matrix:
        node: [18, 20, 22]
        os: [ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - run: npm test

설명

6개의 환경 조합을 병렬로 테스트하여 호환성 검증 시간을 대폭 단축합니다.


4. 조건부 실행으로 불필요한 Job 스킵

개요

if 조건을 사용하여 특정 상황에서만 Job을 실행하면 리소스를 절약할 수 있습니다.

코드 예제

jobs:
  deploy:
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - run: npm run deploy
  test:
    if: contains(github.event.head_commit.message, '[test]')
    runs-on: ubuntu-latest
    steps:
      - run: npm test

설명

main 브랜치 푸시 시에만 배포하고, 커밋 메시지에 [test]가 있을 때만 테스트를 실행하여 불필요한 실행을 방지합니다.


5. paths 필터로 변경된 파일만 처리

개요

특정 경로의 파일이 변경되었을 때만 워크플로우를 트리거하여 실행 횟수를 줄입니다.

코드 예제

on:
  push:
    paths:
      - 'src/**'
      - 'package.json'
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'

설명

소스 코드나 의존성이 변경되었을 때만 실행하고, 문서 변경 시에는 스킵하여 빌드 비용을 절감합니다.


6. concurrency로 중복 실행 방지

개요

동일한 브랜치에서 새 커밋이 푸시되면 이전 실행을 자동으로 취소하여 리소스를 절약합니다.

코드 예제

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: npm run build

설명

같은 브랜치에서 연속된 푸시 시 이전 워크플로우를 취소하여 대기 시간과 비용을 줄입니다.


7. Artifact 업로드로 Job 간 데이터 공유

개요

빌드 결과물을 artifact로 저장하면 다른 Job에서 재사용할 수 있어 중복 빌드를 방지합니다.

코드 예제

jobs:
  build:
    steps:
      - run: npm run build
      - uses: actions/upload-artifact@v3
        with:
          name: dist
          path: dist/
  deploy:
    needs: build
    steps:
      - uses: actions/download-artifact@v3
        with:
          name: dist

설명

빌드 Job의 결과물을 저장하고 배포 Job에서 다운로드하여 재빌드 없이 배포할 수 있습니다.


8. 셀프 호스팅 러너로 성능 향상

개요

고성능 서버를 직접 러너로 등록하면 GitHub 호스팅 러너보다 빠른 실행이 가능합니다.

코드 예제

jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run build
    env:
      RUNNER_CACHE: /mnt/cache

설명

자체 서버를 러너로 사용하면 더 많은 CPU/메모리를 활용하고 네트워크 속도도 향상됩니다.


9. Docker 레이어 캐싱 최적화

개요

Docker 빌드 시 레이어 캐싱을 활용하면 이미지 빌드 시간을 크게 단축할 수 있습니다.

코드 예제

steps:
  - uses: docker/setup-buildx-action@v3
  - uses: docker/build-push-action@v5
    with:
      context: .
      cache-from: type=gha
      cache-to: type=gha,mode=max
      push: false

설명

GitHub Actions 캐시를 Docker 빌드에 통합하여 변경되지 않은 레이어를 재사용합니다.


10. 조기 실패 전략으로 피드백 단축

개요

fail-fast를 false로 설정하면 모든 매트릭스 조합을 테스트하지만, true면 하나 실패 시 즉시 중단합니다.

코드 예제

jobs:
  test:
    strategy:
      fail-fast: true
      matrix:
        node: [18, 20, 22]
    runs-on: ubuntu-latest
    steps:
      - run: npm test

설명

빠른 피드백이 필요하면 fail-fast를 true로 설정하여 첫 실패 시 즉시 알림을 받습니다.


11. GitHub Script로 동적 워크플로우

개요

actions/github-script를 사용하면 Octokit API로 동적인 워크플로우 로직을 구현할 수 있습니다.

코드 예제

steps:
  - uses: actions/github-script@v7
    with:
      script: |
        const { data: prs } = await github.rest.pulls.list({
          owner: context.repo.owner,
          repo: context.repo.repo,
          state: 'open'
        });
        console.log(`Open PRs: ${prs.length}`);

설명

PR 개수에 따라 조건부로 작업을 실행하는 등 복잡한 로직을 JavaScript로 구현할 수 있습니다.


12. 워크플로우 재사용으로 유지보수 개선

개요

재사용 가능한 워크플로우를 만들면 여러 리포지토리에서 공통 로직을 공유할 수 있습니다.

코드 예제

# .github/workflows/reusable.yml
on:
  workflow_call:
    inputs:
      node-version:
        required: true
        type: string
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ inputs.node-version }}

설명

공통 빌드 로직을 재사용 가능한 워크플로우로 추출하여 중복을 제거하고 유지보수를 단순화합니다. --- 고급 개발자를 위한 GitHub Actions 성능 최적화 가이드를 생성했습니다. 캐싱, 병렬 처리, 조건부 실행 등 실무에서 바로 적용 가능한 12가지 최적화 기법을 다루었습니다.


마치며

이번 글에서는 GitHub Actions 성능 최적화 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#GitHub Actions #Caching #Parallel Jobs #Workflow Optimization #CI/CD

#GitHub Actions#Caching#Parallel Jobs#Workflow Optimization#CI/CD#TypeScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스

마이크로서비스 배포 완벽 가이드

Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.

CodeBuild로 빌드 자동화 완벽 가이드

AWS CodeBuild를 활용한 빌드 자동화의 모든 것. buildspec.yml 작성부터 Docker 빌드, ECR 푸시까지 실무에 바로 적용 가능한 자동화 파이프라인을 구축합니다.

Application Load Balancer 완벽 가이드

AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.

고객 상담 AI 시스템 완벽 구축 가이드

AWS Bedrock Agent와 Knowledge Base를 활용하여 실시간 고객 상담 AI 시스템을 구축하는 방법을 단계별로 학습합니다. RAG 기반 지식 검색부터 Guardrails 안전 장치, 프론트엔드 연동까지 실무에 바로 적용 가능한 완전한 시스템을 만들어봅니다.

에러 처리와 폴백 완벽 가이드

AWS API 호출 시 발생하는 에러를 처리하고 폴백 전략을 구현하는 방법을 다룹니다. ThrottlingException부터 서킷 브레이커 패턴까지, 실전에서 바로 활용할 수 있는 안정적인 에러 처리 기법을 배웁니다.