이 글에서는 GitLab과 GitHub의 핵심 차이점과 플랫폼별 지원 기능, 경쟁력 등을 다뤘습니다. Git 저장소로 ‘GitLab과 GitHub 가운데 무엇을 선택할지’ 고민하는 이들이 많은데요. 이 글에서는 총소유 비용(TCO), 보안, 클라우드 전략, 도입 편의성, 대규모 리포지터리 지원 측면에서 두 플랫폼 차이점을 알아보고요. 두 플랫폼의 보안 검사, 언어 지원 현황을 비교했습니다. 또 두 플랫폼의 경쟁력을 각각 살펴봤는데요. 이 콘텐츠가 DevSecOps 플랫폼 선택지를 두고 고심하는 이들에게 유용한 가이드가 됐으면 합니다.
GitLab VS GitHub 핵심 차이점 5가지
GitLab과 GitHub은 총소유 비용(TCO), 보안, 클라우드 전략, 도입 편의성, 대규모 리포지터리 지원 측면에서 다음과 같은 차이점이 있습니다.
첫째, GitLab은 단일 DevSecOps 플랫폼으로, GitHub보다 TCO가 더 낮습니다. TCO(Total Cost of Ownership)는 회사에서 전산 시스템을 도입할 때 드는 초기 투자 비용과 도입 후 운영, 유지 보수 비용 등을 포함한 비용인데요. GitHub을 사용하면 고객이 서드 파티 파트너 공급업체에서 추가 도구를 조달하고, 유지 관리하며, 업데이트해야 합니다. 이에 GitHub 사용에 따른 TCO는 높아지고, 운영하기도 복잡해지죠.
그러나 GitLab은 단일 DevSecOps 플랫폼으로 툴체인(tool chain) 통합을 지원하고요. 기본 기능을 충분히 제공해 서드 파티 파트너 공급업체에 도구를 의존하지 않아도 됩니다. GitLab을 사용하면 GitHub처럼 ‘여러 솔루션을 결합하며 생기는 숨은 비용’이 들지 않고요. 다른 도구를 추가했을 때 발생하는 장애 위험, 업무 중복, 지연 등 문제도 없습니다. 이로써 관리 부담 비용과 컨텍스트 스위칭을 방지할 수 있죠. 이에 GitLab의 TCO는 GitHub보다 더 적고, 플랫폼도 간편하게 이용할 수 있습니다.
둘째, GitLab은 플랫폼 전체에 보안이 통합돼 있으며, 다양한 보안 기능을 기본 제공(built-in)합니다. GitHub에는 주요 보안 검사 기능이 GitLab만큼 많지 않은데요. GitHub에는 GitLab의 DAST(Dynamic Application Security Testing), Container Scanning, API 보안 기능, Fuzz Testing이 없습니다. 또 GitHub에는 보안 취약점을 관리•심사하고, 다른 사람과 협업하는 방법이 불충분하죠. 특히 안전하지 않은 코드•라이선스가 merge 되는 걸 차단하는 ‘기본 제공’ 보안 정책이 GitHub에 부족합니다. 그나마 GitHub은 최근에 pull request가 merge 되기 전에 취약점 유무를 확인하는 기본적인 시스템을 선보이긴 했습니다.
반면에 GitLab은 소프트웨어 라이프사이클의 모든 단계에 보안을 통합한 단일 애플리케이션을 지원하는데요. 특히 GitHub에 없는 보안 검사 기능이 GitLab에 많습 니다. DAST, Container Scanning, API 보안, Fuzz Testing 등이 그 예죠. 일례로 DAST는 애플리케이션 서버의 잘못된 구성이나 배포된 환경에서 보안 제어의 부정확한 가정 같은 취약점과 관련해 애플리케이션을 검사합니다. API 보안은 API를 통해 실행 중인 애플리케이션을 스캔하는 솔루션인데요. API 보안을 파이프라인에 통합하고 리뷰 앱을 활용해 애플리케이션을 동적으로 테스트하면 실행 중인 애플리케이션의 코드 보안 영향을 이해하고, 기능을 merge 하기 전에 문제를 해결할 수 있죠. 이 밖에 GitLab은 안전하지 않은 코드가 프로덕션으로 포함되는 걸 차단하는 정책도 제공합니다.
셋째, GitLab은 클라우드 애그노스틱(Cloud agnostic) 운영방식을 취하는데요. 클라우드 애그노스틱은 애플리케이션, 도구, 서비스가 서비스 중단 없이 멀티 클라우드 플랫폼 간, 또는 하이브리드 모델에서 온프레미스와 클라우드 간에 원활하게 마이그레이션 되도록 설계한 클라우드 설계 전략입니다. GitHub은 Azure에만 의존해 하나의 클라우드에 종속돼 있죠. 그러나 GitLab은 하나의 클라우드에 매이지 않고요. 이는 멀티 클라우드 전략을 실행하는 곳 어디서나 배포하도록 지원합니다. GitLab은 지금도, 앞으로도 클라우드 애그노스틱 전략을 취하기에 고객이 여러 클라우드 플랫폼을 유연하게 오가며 GitLab을 활용할 수 있고요.
넷째, GitLab은 독점 importer로 고객이 GitHub에서 GitLab으로 쉽게 마이그레이션 하도록 지원합니다. GitHub에는 이러한 importer가 없죠. 아울러 GitHub은 사용자의 Git 리포지터리 마이그레이션만 지원하는데요. 이를 위해 고객은 새 시스템에서 모든 관리 설정, 규칙, 정책을 다시 생 성해야 합니다. 그러다 보면 비즈니스에 중요하고 감사에 필요한 토론과 코멘트의 모든 과거 컨텍스트를 잃을 수 있는데요. 팀은 기초를 재건할 필요가 없는데도 이 작업에 시간을 낭비할 우려가 있죠. 그러나 GitLab에서는 독점 importer로 마이그레이션을 간소화하는데요. 이로써 고객은 점진적으로 또는 한 번에 쉽게 GitLab을 도입할 수 있습니다.
다섯째, GitLab은 고객에게 대규모 리포지터리를 충분히 지원합니다. GitHub Enterprise Cloud는 50MB가 넘는 파일에 경고를 보내며 100MB를 초과하는 푸시를 차단하는데요. 고객이 그보다 큰 파일을 추적해야 하면 LFS(대용량 파일 저장소)를 사용해야 하죠. 아울러 GitHub은 리포지터리가 1GB보다 더 작도록 권장하며, 크기가 5GB를 넘는 리포지터리에 경고를 보냅니다. 팀이 50MB가 넘는 파일을 정기적으로 작업하면 성능이 저하되는데요. GitHub은 사용자가 성능을 최적화하기 위해 리포지터리를 작게 유지하도록 권장하죠. 그러나 GitLab은 대규모 리포지터리로 작업할 때 고객의 작업 흐름을 차단하거나 금지하지 않습니다.
GitLab VS GitHub 지원 기능 비교
아래는 GitLab과 GitHub이 각각 지원하는 보안 검사와 언어를 비교했습니다.
1)보안 검사 지원 현황
검사 종류 | GitLab | GitHub |
---|---|---|
Secret Detection | ✅ | ✅ |
SAST | ✅ | ✅ |
Dependency Scanning | ✅ | ✅ |
Container Scanning | ✅ | ❌ |
Operational Container Scanning | ✅ | ❌ |
License Compliance | ✅ | ❌ |
Mobile Scanning | ✅ | ❌ |
DAST | ✅ | ❌ |
API Testing | ✅ | ❌ |
Coverage-Based Fuzzing | ✅ | ❌ |
API Security | ✅ | ❌ |
IAC Scanning | ✅ | ❌ |
Code Quality | ✅ | ❌ |
2)언어 지원 현황
언어 | GitLab | GitHub |
---|---|---|
C/C++ | ✅ | ✅ |
C# | ✅ | ✅ |
Go | ✅ | ✅ |
Java | ✅ | ✅ |
Kotlin | ✅ | ✅ (제한적) |
Javascript/TypeScript | ✅ | ✅ |
Python | ✅ | ✅ |
Ruby | ✅ | ✅ |
Swift(iOS) | ✅ | ❌ |
Ruby on Rails | ✅ | ❌ |
.NET | ✅ | ❌ |
Apex(Salesforce) | ✅ | ❌ |
Elixir(Phoenix) | ✅ | ❌ |
Groovy | ✅ | ❌ |
PHP | ✅ | ❌ |
Node.js | ✅ | ❌ |
Objective C(iOS) | ✅ | ❌ |
Scala | ✅ | ❌ |
React | ✅ | ❌ |
Kotlin(Android) | ✅ | ❌ |
Java(Android) | ✅ | ❌ |