포스트

[이제와서 시작하는 GitHub 마스터하기 - 고급편 #1] GitHub Actions 입문: 첫 워크플로우 만들기

[이제와서 시작하는 GitHub 마스터하기 - 고급편 #1] GitHub Actions 입문: 첫 워크플로우 만들기

들어가며

“이제와서 시작하는 GitHub 마스터하기” 시리즈의 고급편 첫 번째 시간입니다. GitHub Actions는 코드 빌드, 테스트, 배포를 자동화하는 강력한 도구입니다.

💡 이 글은 누구를 위한 글인가요? GitHub의 기본 기능(Repository, Commit, PR)을 알고 있고, 이제 자동화를 시작하려는 분들을 위한 입문 가이드입니다.


1. GitHub Actions란? (⭐ 초보자 필수)

한 줄 정의

GitHub Actions = GitHub에 내장된 자동화 도구

코드를 푸시하면 자동으로 테스트하고, PR을 만들면 자동으로 검사하고, 메인 브랜치에 병합하면 자동으로 배포합니다.

실생활 비유

  • GitHub Actions 없이: 새로운 코드를 푸시할 때마다 수동으로 테스트 실행 → 빌드 → 배포
  • GitHub Actions 사용: 푸시하면 자동으로 테스트 → 빌드 → 배포 ✨

핵심 개념 (초보자는 이것만 알아도 충분합니다!)

용어 설명 쉬운 비유
Workflow 자동화 작업의 설계도 레시피
Job 독립적인 작업 단위 레시피의 한 단계 (재료 준비, 조리, 완성)
Step Job 안의 개별 명령 한 단계의 세부 동작 (양파 썰기, 볶기)
Event 워크플로우를 시작하는 트리거 요리 시작 신호 (손님이 주문함)
Runner 워크플로우가 실행되는 서버 주방

GitHub Actions 작동 흐름

graph LR
    A[코드 Push] --> B{Event 발생}
    B --> C[Workflow 시작]
    C --> D[Runner 준비]
    D --> E[Job 1 실행]
    D --> F[Job 2 실행]
    E --> G[결과 알림]
    F --> G

    style A fill:#f9f,stroke:#333,stroke-width:2px
    style G fill:#9f9,stroke:#333,stroke-width:2px
🚀 고급 개념 (나중에 배워도 됩니다)
고급 용어 설명 사용 시점
Action 재사용 가능한 작업 모듈 복잡한 워크플로우 구성 시
Matrix 여러 환경에서 동시 테스트 다중 플랫폼 지원 시
Context 실행 환경 정보 고급 조건부 실행 시
Artifact 빌드 결과물 저장 배포 파이프라인 구성 시

2. 첫 번째 워크플로우 만들기 (⭐ 초보자 필수)

5분 실습: Hello World

목표: GitHub Actions가 어떻게 작동하는지 직접 확인해보기

Step 1: 워크플로우 파일 생성

Repository에서:

  1. .github/workflows/ 폴더 만들기
  2. hello-world.yml 파일 생성
  3. 아래 코드 복사해서 붙여넣기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
name: Hello World

# 언제 실행할까요?
on:
  push:              # 코드를 푸시할 때
    branches: [ main ]
  workflow_dispatch: # 수동으로도 실행 가능

# 무엇을 실행할까요?
jobs:
  say-hello:
    runs-on: ubuntu-latest  # Ubuntu 서버에서 실행

    steps:
      - name: 인사하기
        run: echo "안녕하세요, GitHub Actions!"

      - name: 현재 시간 보기
        run: date

      - name: 여러 줄 명령
        run: |
          echo "첫 번째 줄"
          echo "두 번째 줄"
          echo "현재 위치: $(pwd)"

Step 2: 실행 확인

  1. Repository의 Actions 탭 클릭
  2. “Hello World” 워크플로우 클릭
  3. 실행 로그 확인

결과:

1
2
3
4
5
안녕하세요, GitHub Actions!
2025-08-01 10:00:00 +0000
첫 번째 줄
두 번째 줄
현재 위치: /home/runner/work/my-repo/my-repo

축하합니다! 첫 번째 GitHub Actions 워크플로우를 만들었습니다!

코드 설명 (한 줄씩 이해하기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
name: Hello World
# ↑ GitHub UI에 표시될 이름

on:
  push:
    branches: [ main ]
# ↑ main 브랜치에 푸시할 때 자동 실행

  workflow_dispatch:
# ↑ GitHub UI에서 수동으로 실행 가능 (테스트할 때 유용!)

jobs:
  say-hello:
# ↑ "say-hello"라는 이름의 작업

    runs-on: ubuntu-latest
# ↑ Ubuntu 최신 버전 서버에서 실행

    steps:
      - name: 인사하기
        run: echo "안녕하세요"
# ↑ 셸 명령어 실행

3. 실전 예제: Node.js 프로젝트 테스트 자동화 (⭐ 초보자 필수)

실습: 코드를 푸시하면 자동으로 테스트하기

.github/workflows/node-ci.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
name: Node.js CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      # Step 1: 코드 가져오기
      - name: 코드 체크아웃
        uses: actions/checkout@v4

      # Step 2: Node.js 설치
      - name: Node.js 설정
        uses: actions/setup-node@v4
        with:
          node-version: '20.x'

      # Step 3: 의존성 설치
      - name: 패키지 설치
        run: npm ci

      # Step 4: 테스트 실행
      - name: 테스트 실행
        run: npm test

코드 설명

uses vs run의 차이

키워드 설명 예시 언제 사용?
uses 미리 만들어진 Action 사용 actions/checkout@v4 복잡한 작업 (코드 가져오기, 환경 설정)
run 직접 명령어 실행 npm test 간단한 명령어

actions/checkout@v4가 하는 일

1
2
3
4
# 이 Action이 자동으로 해주는 일:
git clone https://github.com/your-repo.git
cd your-repo
git checkout main

💡 : @v4는 버전 번호입니다. 최신 안정 버전을 사용하세요!

실행 흐름

sequenceDiagram
    participant Dev as 개발자
    participant GH as GitHub
    participant Runner as Actions Runner

    Dev->>GH: 코드 Push
    GH->>Runner: 워크플로우 시작
    Runner->>Runner: 1. 코드 체크아웃
    Runner->>Runner: 2. Node.js 설치
    Runner->>Runner: 3. npm ci
    Runner->>Runner: 4. npm test
    Runner->>GH: 테스트 결과
    GH->>Dev: 알림 (성공/실패)

4. 트리거 이벤트 (⭐ 초보자 필수)

자주 사용하는 트리거

이벤트 언제 실행? 사용 예시
push 코드를 푸시할 때 CI 테스트
pull_request PR 생성/업데이트 시 코드 리뷰 전 검사
schedule 정해진 시간마다 매일 밤 백업
workflow_dispatch 수동 실행 긴급 배포

예시: 특정 파일만 변경되면 실행

1
2
3
4
5
6
on:
  push:
    paths:
      - 'src/**'        # src 폴더 안의 모든 파일
      - 'package.json'  # package.json 파일
      - '!src/**/*.test.js'  # 테스트 파일은 제외

예시: 매일 새벽 2시에 실행

1
2
3
on:
  schedule:
    - cron: '0 2 * * *'  # 매일 새벽 2시 (UTC)
📚 cron 표현식 가이드 (클릭하여 펼치기)
1
2
3
4
5
6
7
* * * * *
│ │ │ │ │
│ │ │ │ └─ 요일 (0-6, 0=일요일)
│ │ │ └─── 월 (1-12)
│ │ └───── 일 (1-31)
│ └─────── 시 (0-23)
└───────── 분 (0-59)

예시:

  • 0 9 * * * - 매일 오전 9시
  • 0 0 * * 0 - 매주 일요일 자정
  • */15 * * * * - 15분마다

5. 실습 과제

📝 초보자 과제 (필수)

  • Hello World 워크플로우 만들어보기
  • workflow_dispatch로 수동 실행해보기
  • Node.js CI 워크플로우 만들어보기 (본인 프로젝트에)
  • Actions 탭에서 실행 로그 확인하기

🚀 중급자 과제 (도전)

  • Python 프로젝트를 위한 CI 워크플로우 만들기
  • 테스트 실패 시 Slack 알림 보내기
  • 특정 파일 변경 시에만 실행되도록 설정하기
💡 Python CI 워크플로우 힌트 (클릭하여 펼치기)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
name: Python CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Python 설정
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: 의존성 설치
        run: |
          pip install -r requirements.txt

      - name: 테스트 실행
        run: pytest

6. 자주 묻는 질문 (FAQ)

Q1: Actions는 무료인가요?

A: Public 저장소는 완전 무료입니다! Private 저장소는 무료 플랜에서 월 2,000분까지 무료입니다.

플랜 Public Private (월 무료 시간)
Free 무제한 2,000분
Pro 무제한 3,000분
Team 무제한 10,000분

Q2: 워크플로우가 실행되지 않아요!

체크리스트:

  • 파일 위치가 .github/workflows/ 안에 있나요?
  • 파일 확장자가 .yml 또는 .yaml인가요?
  • YAML 문법이 올바른가요? (들여쓰기 확인!)
  • 트리거 이벤트가 올바른가요?

💡 : yamllint.com에서 YAML 문법을 검사할 수 있습니다.

Q3: 실행 시간을 줄이려면?

기본 팁 (초보자):

  1. 불필요한 step 제거
  2. 캐싱 활용 (다음 편에서 배웁니다!)
  3. 병렬 실행 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 빠름: 병렬 실행
jobs:
  test:
    runs-on: ubuntu-latest
  lint:
    runs-on: ubuntu-latest

# 느림: 순차 실행
jobs:
  test:
    runs-on: ubuntu-latest
  lint:
    needs: test  # test가 끝날 때까지 기다림
    runs-on: ubuntu-latest

7. 다음 단계

✅ 이번 편에서 배운 것

  • GitHub Actions의 기본 개념 (Workflow, Job, Step)
  • Hello World 워크플로우 만들기
  • Node.js 프로젝트 CI 설정
  • 트리거 이벤트 활용

📚 다음 편 예고

[고급편 #1-2] GitHub Actions: CI/CD 파이프라인 구축에서는:

  • 여러 언어별 CI 템플릿 (Python, Java, Go 등)
  • 자동 배포 (AWS, Vercel, GitHub Pages)
  • 환경 변수와 시크릿 관리
  • 캐싱과 아티팩트로 속도 최적화

8. 정리

GitHub Actions는 어렵지 않습니다! 기본만 알면 바로 실전에 활용할 수 있습니다.

초보자가 기억할 핵심 3가지:

  1. .github/workflows/ 폴더에 YAML 파일 생성
  2. on으로 트리거 설정, jobs로 작업 정의
  3. uses는 미리 만들어진 Action, run은 직접 명령어

다음 단계:

  • 본인 프로젝트에 CI 워크플로우 추가하기
  • PR마다 자동 테스트 실행되도록 설정하기
  • 다음 편에서 배포 자동화 배우기

📚 GitHub 마스터하기 시리즈

🌱 기초편 (입문자)

  1. GitHub 시작하기
  2. 프로필 꾸미기
  3. 보안 설정
  4. Repository 소개
  5. README 작성법
  6. .gitignore와 License
  7. 첫 커밋 만들기
  8. git add와 commit
  9. git push와 pull
  10. 기본 워크플로우
  11. 브랜치 기초
  12. Merge와 Rebase
  13. 브랜치 전략
  14. Fork와 Clone
  15. Pull Request

💼 실전편 (중급자)

  1. Issues 관리
  2. Projects (Kanban)
  3. Code Review
  4. Discussions
  5. Team 협업
  6. GitHub Pages

🚀 고급편 (전문가)

  1. [GitHub Actions 입문] (현재 글)
  2. GitHub Actions: CI/CD 파이프라인 ⬅️ 다음 편
  3. GitHub Actions: 고급 기능
  4. Webhooks와 API
  5. GitHub Apps 개발
  6. 보안 기능
  7. GitHub Packages
  8. Codespaces
  9. GitHub CLI
  10. 통계와 인사이트

“늦었다고 생각할 때가 가장 빠른 때입니다. 지금 시작하세요!” 🚀

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.