[이제와서 시작하는 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에서:
.github/workflows/폴더 만들기hello-world.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
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: 실행 확인
- Repository의 Actions 탭 클릭
- “Hello World” 워크플로우 클릭
- 실행 로그 확인
결과:
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: 실행 시간을 줄이려면?
기본 팁 (초보자):
- 불필요한 step 제거
- 캐싱 활용 (다음 편에서 배웁니다!)
- 병렬 실행 활용
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가지:
.github/workflows/폴더에 YAML 파일 생성on으로 트리거 설정,jobs로 작업 정의uses는 미리 만들어진 Action,run은 직접 명령어
다음 단계:
- 본인 프로젝트에 CI 워크플로우 추가하기
- PR마다 자동 테스트 실행되도록 설정하기
- 다음 편에서 배포 자동화 배우기
📚 GitHub 마스터하기 시리즈
🌱 기초편 (입문자)
- GitHub 시작하기
- 프로필 꾸미기
- 보안 설정
- Repository 소개
- README 작성법
- .gitignore와 License
- 첫 커밋 만들기
- git add와 commit
- git push와 pull
- 기본 워크플로우
- 브랜치 기초
- Merge와 Rebase
- 브랜치 전략
- Fork와 Clone
- Pull Request
💼 실전편 (중급자)
🚀 고급편 (전문가)
- [GitHub Actions 입문] (현재 글)
- GitHub Actions: CI/CD 파이프라인 ⬅️ 다음 편
- GitHub Actions: 고급 기능
- Webhooks와 API
- GitHub Apps 개발
- 보안 기능
- GitHub Packages
- Codespaces
- GitHub CLI
- 통계와 인사이트
“늦었다고 생각할 때가 가장 빠른 때입니다. 지금 시작하세요!” 🚀
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.