GitHub와 GitLab의 프로젝트 폴더 구조를 비교하여 그 차이점을 살펴보자.
Organization (조직) > Repository (리포지토리)
Organization (조직)
: GitHub에서 상위 레벨은 Organization입니다.
GitHub Organization은 GitLab의 Group과 유사하며, 여러 개의 repository를 하나의 Organization 아래에 둘 수 있습니다.
Repository (리포지토리)
: Organization 또는 개인 사용자 계정 아래에 repository를 두어 프로젝트를 관리합니다.
각 repository는 독립적인 Git 저장소이며, 버전 관리, 이슈 트래킹, GitHub Actions(CI/CD) 등을 관리할 수 있습니다.
GitHub 구조 예시
Organization
├── Repository 1
├── Repository 2
└── Repository 3
.github/workflows/
: GitHub은 GitHub Actions로 CI/CD를 처리합니다.
GitHub Actions의 워크플로우 설정 파일은 repository 내의 .github/workflows/ 디렉터리에 정의됩니다.
GitHub에서는 프로젝트마다 독립적으로 워크플로우를 설정합니다.
Group (그룹) > Project (프로젝트)
Group (그룹) > Subgroup (하위 그룹) (생략 가능) > Project (프로젝트)
Group (그룹)
: GitLab에서 상위 레벨은 Group입니다.
그룹은 여러 프로젝트를 묶어 관리할 수 있으며, 팀과 권한을 그룹 단위로 설정할 수 있습니다.
Subgroup (하위 그룹) (생략 가능)
: 그룹 아래에 하위 그룹을 만들 수 있어, 계층적인 관리가 가능합니다.
예를 들어, Company 그룹 아래에 Team A와 Team B라는 하위 그룹을 둘 수 있습니다.
Project (프로젝트)
: 그룹이나 하위 그룹 아래에 개별 프로젝트가 위치합니다.
프로젝트는 Git 저장소(repository)를 의미하며, 여기서 소스 코드 및 이슈 트래킹, CI/CD 등을 관리합니다.
GitLab 구조 예시
Group
├── Team A Subgroup
│ ├── project1 (repository1)
│ └── project2 (repository2)
└── Team B Subgroup
├── project3 (repository3)
└── project4 (repository4)
.gitlab-ci.yml
: GitLab은 내장된 CI/CD 기능을 가지고 있으며, 프로젝트 루트에 .gitlab-ci.yml 파일을 배치하여 파이프라인 설정을 정의합니다.
| 항목 | GitHub | GitLab |
|---|---|---|
| 그룹/조직 관리 |
Organization을 사용하여 리포지토리를 그룹화, 하위 그룹 없음 | Group과 Subgroup을 사용해 프로젝트를 계층적으로 나눔 |
| 프로젝트/리포지토리 | 리포지토리(Repository)라는 용어를 사용, Organization 또는 개인 계정 하위에 배치 | 프로젝트(Project)라는 용어를 사용, Group 또는 Subgroup 하위에 배치 |
| CI/CD 설정 | .github/workflows/ 폴더에 워크플로우 파일을 두어 GitHub Actions로 관리 | .gitlab-ci.yml 파일을 프로젝트 루트에 두어 CI/CD 파이프라인 설정 |
GitHub은 간단한 리포지토리 관리와 유연한 GitHub Actions가 강점인 반면, GitLab은 계층적 프로젝트 관리와 내장된 CI/CD 기능을 제공합니다.
추가로, GitHub은 주로 개인 및 오픈소스 프로젝트에 적합하며, GitLab은 기업 수준의 DevOps 통합과 프로젝트 관리 기능이 필요한 경우, 특히 자체 서버에서 호스팅하거나, 세밀한 권한 관리가 필요한 팀에서 더 유리합니다.