"무료라며?" — CI/CD 요금 고지서를 처음 받은 날
결론부터 말하면, GitHub Actions와 GitLab CI 중 "무조건 싼 쪽"은 없습니다. 워크로드(월 실행 분)와 OS 조합, 그리고 셀프호스트 여부에 따라 두 배 이상 벌어집니다. 두 도구 모두 "무료 분(minutes)"을 크게 내세우지만, 실무에서 가장 자주 보고되는 상황은 "Windows/macOS 러너를 쓰기 시작한 달부터 청구서가 폭발했다"는 케이스입니다.
이 글은 기능 소개나 감상평이 아닙니다. 월 5,000분 / 2만분 / 10만분 세 가지 시나리오의 실제 금액을 계산 과정과 함께 보여주고, 셀프호스트 손익분기점, 동일 파이프라인의 YAML 대조, 그리고 마지막에 "이럴 땐 A / 저럴 땐 B" 의사결정표로 끝냅니다. 문서를 덮는 순간 결론을 내리는 것이 목표입니다.
⚠️ 요금 확인 시점: 아래 계산은 2026년 7월 기준 공개된 공식 가격 구조를 바탕으로 한 예시입니다. 두 벤더 모두 과금 체계를 자주 개편하므로, 실제 도입 전 GitHub Actions 가격 페이지와 GitLab 가격 페이지에서 반드시 재확인하세요. 특히 GitLab의 "컴퓨트 크레딧(구 CI/CD minutes)"과 GitHub의 대형 러너 단가는 변동 가능성이 높습니다.
가격 모델 직접 계산: 3개 시나리오 월 실청구액
핵심 판정: 월 2만분을 넘고 Windows/macOS 비중이 높아지면 클라우드 러너 요금이 급격히 불리해집니다. 왜 그런지 숫자로 봅시다.
계산에 쓸 기준 단가 (2026년 7월 확인 기준, 재확인 필수)
| 항목 | GitHub Actions | GitLab CI |
|---|---|---|
| 무료 포함 분(대표 유료 티어) | Team 약 3,000분/월 | Premium 약 10,000분/월 |
| Linux 초과 단가 | 약 $0.008/분 | 약 $0.008/분(1 크레딧≈1분) |
| Windows 배수 | ×2 | ×2 (러너 팩터) |
| macOS 배수 | ×10 | ×6~7 (러너 팩터) |
표의 무료 포함 분·배수는 티어와 시점에 따라 다릅니다. 아래 계산은 "유료 티어 1인 기준 포함분을 초과한 순수 초과 사용분" 을 단순화해 비교하기 위한 모델입니다.
시나리오 A — 월 5,000분, Linux 100%
- GitHub Actions(Team, 포함 3,000분): 초과 2,000분 × $0.008 = $16/월
- GitLab CI(Premium, 포함 10,000분): 초과 0분 = $0(초과요금)
포함분이 큰 GitLab이 이 구간에서 유리합니다. 단, 두 도구 모두 유료 티어 구독료(사용자 시트 요금)는 별도라는 점을 잊지 마세요.
시나리오 B — 월 2만분, Linux 70% + Windows 30%
과금 대상 "분"은 배수를 곱한 가중 분(weighted minutes) 입니다.
- Linux: 14,000분 × 1 = 14,000 가중분
- Windows: 6,000분 × 2 = 12,000 가중분
- 합계 가중분 = 26,000분
계산:
- GitHub Actions(Team, 3,000 포함): (26,000 − 3,000) × $0.008 = 약 $184/월
- GitLab CI(Premium, 10,000 포함): (26,000 − 10,000) × $0.008 = 약 $128/월
포함분 차이(3,000 vs 10,000)가 그대로 $56 격차를 만듭니다.
시나리오 C — 월 10만분, Linux 60% + Windows 30% + macOS 10%
- Linux: 60,000 × 1 = 60,000
- Windows: 30,000 × 2 = 60,000
- macOS: 10,000 × 10(GitHub) = 100,000 / × 7(GitLab 가정) = 70,000
- 가중분 합계: GitHub 220,000 / GitLab 190,000
계산:
- GitHub Actions: (220,000 − 3,000) × $0.008 = 약 $1,736/월
- GitLab CI: (190,000 − 10,000) × $0.008 = 약 $1,440/월
요약 비교표
| 시나리오 | 조합 | GitHub Actions | GitLab CI | 판정 |
|---|---|---|---|---|
| A (5,000분) | Linux 100% | ~$16 | ~$0 초과 | GitLab 유리 |
| B (20,000분) | Linux+Win | ~$184 | ~$128 | GitLab 유리 |
| C (100,000분) | Linux+Win+mac | ~$1,736 | ~$1,440 | GitLab 유리(단 셀프호스트 검토구간) |
시나리오 C 정도의 청구액이 나오면 클라우드 러너를 계속 쓸 게 아니라 셀프호스트를 진지하게 계산해야 합니다. 다음 섹션이 그 손익분기입니다.
셀프호스트 러너 vs 클라우드 러너: 곡선이 뒤집히는 지점
결론: 월 가중 실행분이 대략 3만~5만 분을 넘고, 러너를 관리할 인력이 확보되면 셀프호스트가 이깁니다. 다만 "고정 서버비 + 운영 인건비"를 빼먹으면 계산이 틀립니다.
손익분기 계산 모델
클라우드 러너는 순수 종량제이므로 비용 = 가중분 × 단가입니다. 셀프호스트는 무료분이 사실상 무제한이지만 고정비가 붙습니다.
셀프호스트 월 비용 = 서버비(인스턴스/온프렘 상각) + 운영 인건비 배분
예시)
- 상시 러너용 서버 2대: 약 $300/월
- 운영 공수 월 4시간 × 엔지니어 시급 환산: 약 $200/월
- 셀프호스트 고정비 합계: 약 $500/월
손익분기 가중분 = 고정비 / 클라우드 단가
= $500 / $0.008
≈ 62,500 가중분/월즉 위 가정에서는 월 약 6.25만 가중분을 넘으면 셀프호스트가 저렴해집니다. 서버를 이미 보유한 온프렘 팀이라면 상각비가 낮아 손익분기가 2만~3만 분대로 내려갑니다.
관리부담 비교표
| 항목 | 클라우드 러너 | 셀프호스트 러너 |
|---|---|---|
| 초기 구축 | 없음 | Runner 설치·등록 필요 |
| OS/보안 패치 | 벤더 담당 | 팀 직접 |
| 스케일링 | 자동 | 수동 or K8s 오토스케일 |
| 보안 격리 | 벤더 격리 | ephemeral runner 구성 필요 |
| 무료분 | 종량 과금 | 사실상 무제한 |
| 대표 실행기 | GitHub-hosted / GitLab SaaS | self-hosted / Docker·Kubernetes executor |
셀프호스트에서 가장 자주 지적되는 보안 이슈는 재사용 러너에 잔존하는 빌드 아티팩트·시크릿입니다. 퍼블릭 저장소나 외부 PR을 다룬다면 일회용(ephemeral) 러너를 기본값으로 두는 것이 권장됩니다. GitLab Runner는 Docker/Kubernetes executor로, GitHub는
--ephemeral등록 옵션과 Actions Runner Controller(ARC)로 구성합니다.
속도 & 러닝커브: 스핀업·캐시·매트릭스·시크릿
결론: YAML 문법의 러닝커브는 GitHub이 조금 더 완만하고, 캐시·아티팩트 제어의 세밀함은 GitLab이 강합니다. 스핀업 지연은 둘 다 클라우드 러너에서 수십 초 수준이 일반적이며, 셀프호스트 상시 러너로 없앨 수 있습니다.
캐시 & 병렬 매트릭스 대조표
| 항목 | GitHub Actions | GitLab CI |
|---|---|---|
| 캐시 | actions/cache (key/restore-keys) | cache: (key/paths/policy) |
| 산출물 전달 | actions/upload-artifact | artifacts: (자동 stage 전달) |
| 병렬 매트릭스 | strategy.matrix | parallel:matrix |
| 동적 파이프라인 | 제한적(리유저블 워크플로) | child pipeline·rules로 유연 |
| 조건 실행 | if: 표현식 | rules: / only/except |
동일 파이프라인, 양쪽 YAML 나란히
GitHub Actions:
# .github/workflows/ci.yml
name: ci
on: [push]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}
- run: npm ci && npm testGitLab CI:
# .gitlab-ci.yml
stages: [test]
test:
stage: test
image: node:${NODE_VERSION}
parallel:
matrix:
- NODE_VERSION: ["18", "20"]
cache:
key:
files: [package-lock.json]
paths: [.npm/]
script:
- npm ci --cache .npm --prefer-offline
- npm test예상 정상 결과: 두 파이프라인 모두 Node 18/20 두 개의 병렬 잡이 생성되고, 두 번째 실행부터 캐시 복원 로그(Cache restored / Restoring cache)가 찍히며 npm ci 시간이 눈에 띄게 줄어듭니다.
예상과 다를 때 분기:
- 캐시가 매번 miss → 캐시 key가 매 실행 달라지는 경우입니다. GitHub은
hashFiles(), GitLab은cache:key:files로 락파일 해시 기반 키를 쓰세요. - 병렬 잡이 1개만 생성 → GitHub은
matrix들여쓰기, GitLab은parallel:matrix값이 배열인지 확인하세요.
시크릿·환경 관리
| 항목 | GitHub Actions | GitLab CI |
|---|---|---|
| 시크릿 저장 | Repo/Org Secrets | CI/CD Variables (Masked/Protected) |
| 환경 분리 | Environments + 승인 규칙 | Environments + Protected branches |
| 참조 방식 | ${{ secrets.NAME }} | $NAME |
GitLab의 Protected/Masked 변수는 보호 브랜치에서만 노출되도록 세밀하게 제어할 수 있어, 컴플라이언스 요건이 강한 조직에서 선호되는 경향이 있습니다.
결론: 한국 팀 관점 + 의사결정 매트릭스
국내 환경 고려사항
- 리전/레이턴시: 두 SaaS 모두 해외 리전 중심이라 대용량 아티팩트 전송 시 지연이 체감될 수 있습니다. 국내 셀프호스트 러너를 두면 사내망·캐시 접근이 빨라집니다.
- 문서·커뮤니티: 두 도구 모두 한국어 자료가 풍부하지만, GitHub Actions 마켓플레이스 액션 생태계가 더 방대합니다.
- 온프렘 선호: 국내 대기업·공공에서는 망분리·데이터 주권 요건으로 GitLab Self-Managed(온프렘) 선호가 뚜렷하게 보고됩니다. 이 경우 라이선스(사용자 시트)와 서버 운영 요건을 함께 산정해야 합니다.
마이그레이션 체크포인트 (GitLab ↔ GitHub)
- YAML 변환: stages↔jobs,
rules↔if,parallel:matrix↔strategy.matrix매핑. - 시크릿 이전: CI/CD Variables ↔ Secrets 수동 재등록(자동 이관 불가, 값 재발급 권장).
- 러너 재구성: executor 방식 차이로 러너를 재등록해야 하며, ephemeral 옵션을 초기부터 설계.
- 아티팩트/캐시 정책: 보존 기간·경로 규칙 재검토.
최종 '이럴 땐 A / 저럴 땐 B' 의사결정표
| 조건 | 추천 | 이유 |
|---|---|---|
| 소규모 스타트업, Linux 위주, 오픈소스 생태계 활용 | GitHub Actions | 액션 마켓플레이스·러닝커브·GitHub 통합 |
| 월 실행분 큰데 포함분으로 커버하고 싶다 | GitLab CI | 유료 티어 포함분이 커 초과요금 방어 |
| 망분리·온프렘·데이터 주권 필수(공공·금융) | GitLab Self-Managed | 온프렘 운영·세밀한 변수 보호 |
| 월 6만 가중분 이상 + 운영 인력 확보 | 셀프호스트 러너(양쪽 공통) | 손익분기 초과, 종량제보다 저렴 |
| 코드가 이미 GitHub, CI만 고민 | GitHub Actions | 저장소-CI 통합 이점, 이관 비용 최소 |
| Windows/macOS 빌드 비중 높음 | 비용 재계산 필수 | OS 배수로 청구액 급증, 셀프호스트 검토 |
자주 묻는 질문 (FAQ)
Q. GitHub Actions와 GitLab CI 중 정말 더 싼 쪽은? A. 단정할 수 없습니다. 위 시나리오처럼 포함분이 큰 GitLab이 초과요금에서 유리한 구간이 많지만, 유료 티어 시트 요금·OS 배수·셀프호스트 여부를 모두 넣어야 실제 총소유비용(TCO)이 나옵니다. 반드시 팀 실제 가중분으로 재계산하세요.
Q. 셀프호스트 러너는 언제부터 이득인가요? A. 고정비(서버+인건비)를 클라우드 단가로 나눈 값이 손익분기입니다. 본문 예시(고정비 $500, 단가 $0.008)에서는 약 6.25만 가중분/월입니다. 온프렘 서버를 이미 보유하면 이 임계점이 크게 내려갑니다.
Q. 요금표 숫자를 그대로 믿어도 되나요? A. 아니요. 본문 수치는 2026년 7월 기준 공개 구조를 단순화한 예시입니다. 두 벤더 모두 과금 체계를 자주 바꾸므로 도입 전 공식 가격 페이지에서 포함분·배수·단가를 반드시 재확인하세요.
이 글은 AI 에이전트가 자료 조사와 1차 초안 작성을 담당하고, 사람 편집자가 사실관계·출처·톤과 맥락을 검토한 뒤 발행했습니다. 환경(OS·버전)에 따라 결과가 다를 수 있으니 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요 — 확인 후 신속히 정정합니다.
댓글
첫 번째 댓글을 남겨보세요.