회사 코드를 GitHub 같은 외부 클라우드에 올릴 수 없는 상황에서, Git 저장소와 CI/CD(코드를 올릴 때마다 자동으로 빌드·테스트·배포하는 체계)를 사내에 직접 설치하려면 무엇을 골라야 할까. 이 질문을 놓고 후보를 하나씩 공식 문서로 확인해 봤다. 결론부터 말하면 “가장 좋은 하나”는 없었고, 무엇을 무료로 받아야 하는지에 따라 답이 갈렸다. 아래 버전과 가격은 모두 2026년 10월 기준이다.
고르려던 조건
조건은 여섯 가지였다.
- 사내 설치: 코드가 회사 밖으로 나가면 안 된다. 클라우드 서비스는 제외다.
- 저장소와 CI/CD를 한곳에서: 저장소 따로, CI 서버 따로 두는 구성은 관리할 시스템이 늘어난다.
- 도메인 도구의 공식 지원: 쓰려는 개발 도구(여기서는 MATLAB과 Simulink 같은 모델 기반 개발 도구)가 그 CI를 공식으로 지원하는지.
- 리뷰 승인 강제: 안전이 중요한 소프트웨어는 “누군가 승인해야만 병합된다”는 규칙이 절차의 핵심이다.
- 계정 연동: 회사 계정으로 로그인하고, 회사 조직도에 맞춰 권한이 붙어야 한다.
- 확장: 몇 명짜리 팀에서 시작해 회사 전체로 키울 수 있어야 한다.
후보는 GitHub, GitLab, Gitea, Gitea에서 갈라져 나온 Forgejo, Gitea의 원조인 Gogs, 그리고 OneDev였다. Jenkins와 TeamCity 같은 CI 전용 도구, 클라우드 서비스인 Azure DevOps도 함께 봤다.
먼저 빠진 후보들 — GitHub Enterprise Server, Gogs, Jenkins
GitHub를 사내에 설치하는 길은 GitHub Enterprise Server 하나다. 공식 문서상 설치하려면 유료 Enterprise 라이선스 파일이 있어야 하고, 무료판은 없다. 가장 작은 구성(가벼운 사용자 10명 이하)도 CPU 4코어, 메모리 32GB, 디스크 400GB와 500GB를 요구하고, GitHub Actions를 켜려면 최소 CPU 8코어, 메모리 64GB가 필요하다. Actions는 실행 결과를 저장할 외부 저장소(Azure Blob, Amazon S3, Google Cloud Storage, 또는 S3 호환 MinIO)가 따로 있어야 하고, 러너도 직접 설치한 것만 쓸 수 있다. github.com에 공개된 액션을 쓰려면 GitHub Connect로 외부와 연결하거나 수동으로 동기화해야 한다. 회사가 이미 GitHub Enterprise를 표준으로 쓰고 있는 게 아니라면, 새로 시작하는 선택지로는 가장 무겁다.
GitHub.com이나 Azure DevOps처럼 클라우드에 코드를 두는 방식은 조건 1에서 빠졌다. 참고로 GitHub.com은 비공개 저장소에 승인 강제 같은 규칙(rulesets)을 걸려면 조직 계정 기준으로 GitHub Team 이상의 유료 플랜이 필요하고, Azure DevOps는 처음 5명까지 무료다.
Gogs는 가장 가볍다. README 기준으로 CPU 2코어, 메모리 512MB면 팀 작업이 되고 라즈베리파이로도 충분하다고 한다. 하지만 기능 목록에 CI/CD, 패키지 저장소, 프로젝트 보드가 없다. CI가 목적이면 맞지 않는다.
Jenkins는 MATLAB 공식 플러그인이 있어서 처음엔 당연히 필요할 줄 알았다. 그런데 GitLab과 Gitea 모두 CI를 직접 하고, 공식 플러그인이 하던 일은 명령줄로 그대로 부를 수 있다. 시스템을 하나 더 두면 서버·계정·권한·업그레이드가 함께 늘어나서, 이미 Jenkins를 표준으로 쓰는 회사가 아니면 뺐다.
남은 세 후보의 사양 — GitLab은 무겁고, Gitea와 OneDev는 가볍다
- GitLab: 공식 문서상 기본 권장은 CPU 8코어, 메모리 16GB다. 메모리가 부족한 환경이면 최소 8GB로도 돌릴 수 있다고 적혀 있다.
- Gitea: 가벼운 서버로 알려져 있어서, 작은 VPS나 오래된 PC에서도 띄우기 쉽다.
- OneDev: 공식 설명상 중간 규모 프로젝트라면 CPU 1코어, 메모리 2GB 머신에서 전체 기능이 돈다.
실제로 확인해 보니 집에 있는 오래된 데스크톱(라이젠 6코어 12스레드, 사용 가능한 메모리 27GiB)도 GitLab 권장 사양을 넘었다. “오래된 PC라 GitLab은 무리”라는 짐작은 틀렸고, 사양은 생각보다 결정적이지 않았다.
CI/CD는 셋 다 된다 — 다른 건 형식과 공식 지원 (MATLAB CI)
세 후보 모두 CI 실행기(러너)를 따로 설치하는 구조다. 차이는 CI 설정 형식이다.
- GitLab CI: 자체 형식. 오래된 만큼 기능이 성숙했다.
- Gitea Actions: GitHub Actions와 같은 YAML 형식이라, 공개된 액션을 대부분
그대로 가져다 쓸 수 있다. 공식 비교 문서는 배포 환경 보호(
environment)와 오류 위치 표시(에러 주석)가 무시된다고 밝힌다. - OneDev: 자체 형식이고 화면에서 작업을 만드는 방식이다. 다른 두 형식과 호환되지 않는다.
도메인 도구의 공식 지원은 MATLAB 문서로 확인했다. 공식 지원 CI는 Jenkins, GitLab CI/CD, GitHub Actions, Azure DevOps, CircleCI, Bamboo, TeamCity이고, 목록에 없는 플랫폼은 MATLAB을 명령줄 배치 모드로 직접 실행하라고 안내한다. Simulink 모델 검증을 자동화하는 Simulink Check의 CI/CD 지원 패키지도 GitLab, GitHub, Jenkins, Azure DevOps용 파이프라인 설정을 자동으로 만들어 준다. Gitea와 OneDev는 이 목록에 없다. 다만 같은 문서에 지원 목록 밖의 CI에서 돌리는 방법이 따로 있고, 요구 조건은 MATLAB과 지원 패키지가 설치된 실행 머신, 프로젝트 루트에 둔 프로세스 모델 파일, git 원격 저장소 연결, 그리고 증분 빌드를 위해 작업 결과물과 디지털 스레드 데이터베이스 파일을 실행 사이에 보존하는 것이다. 실행 명령은 프로젝트를 열고 정의된 작업 전체를 돌리는 한 줄이다. 그래서 Gitea나 OneDev에서도 돌아가기는 한다. 다만 설정 파일을 손으로 써야 하고, 문제가 생겼을 때 “공식 지원 플랫폼”에 기댈 수 없다.
테스트 결과를 PR 화면에서 보려면 — GitLab 무료판의 강점 (JUnit·커버리지)
GitLab은 무료판부터 머지 요청(MR) 화면에 JUnit 테스트 결과와 커버리지 퍼센트를 보여 주고, 변경된 코드 화면에 커버리지를 줄 단위로 표시한다(공식 문서 Tier: Free).
Gitea는 1.27(2026년 7월)부터 Job Summary가 생겼다. 워크플로가 마크다운으로 쓴 요약을 실행 결과 화면에 보여 주는 기능이다(PR #37500). 테스트 결과를 표로 바꿔 요약에 쓰면 화면에서 바로 볼 수 있지만, GitLab처럼 JUnit을 직접 읽어 실패 목록을 보여 주거나 줄 단위 커버리지를 표시하는 기능은 찾지 못했다. 이 공백은 직접 메울 수 있다. CI가 결과 요약을 PR 댓글로 달거나, 커밋 상태에 상세 리포트 링크를 붙이고, diff-cover로 이번 변경에서 바뀐 줄의 커버리지만 마크다운으로 뽑아 붙이는 식이다. 반대로 SonarQube 커뮤니티판의 PR 표시 플러그인은 GitHub, GitLab, Bitbucket, Azure만 지원해서 Gitea에는 쓸 수 없었다.
OneDev는 JUnit 테스트 결과와 Cobertura·JaCoCo 커버리지를 게시하고, PR 변경 화면에 커버리지와 문제를 줄 단위로 표시한다. 이 항목만 보면 GitLab 무료판과 비슷하다.
다만 검증 도구 쪽에 자체 웹 결과 화면이 있으면(정적 분석이나 테스트 결과를 모아 보여 주는 전용 서버 같은), PR 화면은 통과·실패 요약과 링크 정도만 있어도 된다. 그 경우 이 항목의 비중은 줄어든다.
리뷰 승인 강제 — 무료 GitLab에는 없고, 무료 Gitea에는 있다
안전 절차에서 가장 의외였던 부분이다.
- Gitea(무료): 보호 브랜치 설정에 필수 승인 수, 지정한 사용자·팀의 승인만 인정, 새 커밋이 올라오면 기존 승인 무효화, 변경 요청 리뷰가 있으면 병합 차단, 지정 CI 통과 필수, 보호 파일 변경 거부, 서명된 커밋만 허용이 모두 있다.
- OneDev(무료): “어떤 사용자가 어떤 브랜치의 어떤 파일을 건드리면 리뷰나 CI 검증 필수” 같은 세밀한 규칙을 걸 수 있다.
- GitLab 무료판: 여러 명 승인 규칙과 자기 승인 금지가 Premium부터다. 무료판에서는 보호 브랜치로 “병합할 수 있는 사람”을 제한하는 정도다.
승인 강제만 보면 무료 Gitea와 OneDev가 무료 GitLab보다 낫다.
계정 연동 — 로그인과 그룹 동기화를 나눠 봐야 한다 (LDAP·SAML·OIDC)
계정 연동은 “회사 계정으로 로그인”과 “회사 그룹에 맞춰 권한 자동 부여” 두 단계로 나눠 봐야 차이가 보인다.
| 회사 계정 로그인 | 회사 그룹 → 권한 자동 동기화 | |
|---|---|---|
| GitLab 무료판 | LDAP, SAML, OIDC 모두 무료 | LDAP·SAML·OIDC 그룹 동기화 모두 Premium부터 |
| Gitea | LDAP, OIDC 무료, SAML은 유료(Enterprise) | LDAP 그룹 확인, OIDC 그룹 → 관리자·팀 소속 무료 |
| OneDev | LDAP/AD, OIDC, Entra ID 연동 무료 | LDAP 그룹, OIDC 그룹 클레임 → 그룹 무료 |
GitLab 무료판은 SAML까지 회사 계정 로그인이 되지만, 로그인한 사람을 어느 그룹에 어떤 권한으로 넣을지는 GitLab 안에서 사람이 관리해야 한다. 조직이 커질수록 이 부담이 커진다. Gitea는 반대로 그룹 동기화까지 무료지만 SAML 로그인은 유료다. 요즘 회사 인증 시스템은 대부분 OIDC도 지원하므로, 회사가 SAML만 허용하는 경우가 아니면 Gitea의 약점은 크지 않다.
회사 규모로 키울 때 드는 비용 (Enterprise 가격 비교)
사용자 수 때문에 유료가 필요한 후보는 없다. GitLab 자체 설치 무료판은 사용자 수 제한이 없다(5명 제한은 gitlab.com 클라우드의 비공개 그룹에만 있다). 유료가 필요해지는 건 관리·통제 기능 때문이다.
| 사용자당 월 가격 | 유료에서 생기는 주요 기능 | |
|---|---|---|
| GitLab Premium | $29 (연 결제) | 여러 명 승인 규칙, 보호된 배포 환경, Push 규칙, LDAP/SAML 그룹 동기화, 감사 로그, Geo 복제 |
| Gitea Enterprise | $9.50~$19 (1년 약정) | SAML 2.0, 조직 전체 보호 브랜치 상속, 의존성 취약점 검사 |
| OneDev Enterprise | $6 (주문당 최소 12사용자·월) | 감사 로그, 클러스터 이중화, 보안 검사, 통계·추이 분석 |
| GitHub Enterprise Server | $21부터 (GitHub Enterprise 플랜, Cloud·Server 공통) | (라이선스 자체가 유료) |
감사 로그는 Gitea 28.0(2026년 9월)부터, 인스턴스 전체 2단계 인증 강제는 1.24부터 무료판에도 들어갔다.
GitLab은 회사 단위로 쓰는 순간, 승인 강제와 그룹 동기화 때문에 사실상 Premium으로 봐야 한다.
오래 쓸 수 있는가 — OneDev의 1인 개발 구조
기능만 보면 OneDev가 가장 균형이 좋다. 무료판에 승인 강제, PR 화면 결과 표시, 프로젝트 트리(상위 설정을 하위가 상속), 계정 그룹 연동이 다 있고, 유료판도 가장 싸다. 마음에 걸린 건 개발 구조다. GitHub 저장소의 커밋 기여 1위가 4,426회, 2위가 188회로 핵심 개발자 한 명에게 크게 의존한다. GitHub 별 1.5만 개로 GitLab, Gitea보다 사용자층도 작다. 회사 표준 도구로 오래 쓰기에는 위험 요소다.
Gitea는 개발이 활발하다(1.27 다음 버전부터 번호를 28로 바꿨고, 2026년 10월 18일 v28.2.0). Forgejo는 기여자 커뮤니티가 운영하고, 도메인은 비영리 단체 Codeberg e.V.가 관리한다. 처음엔 Gitea를 따라가는 갈래였지만 2024년 초부터 코드가 독자적으로 갈라지는 별도 프로젝트가 됐다. GitLab은 사용자층과 문서가 가장 크다.
한눈에 비교
| 기준 | GitLab 무료판 | Gitea | OneDev |
|---|---|---|---|
| 사내 설치 | 가능 | 가능 | 가능 |
| 사양 | 무거움 | 가벼움 | 가벼움 |
| CI 형식 | 자체 형식 | GitHub Actions 형식 | 자체 형식 |
| 도메인 도구 공식 CI 지원 (MATLAB 예) | 있음 | 없음 (명령으로 실행) | 없음 (명령으로 실행) |
| PR 화면 테스트·커버리지 | 무료 | 요약만 (Job Summary) | 무료 |
| 리뷰 승인 강제 | Premium | 무료 | 무료 |
| 회사 계정 로그인 | 무료 (SAML 포함) | 무료 (SAML 제외) | 무료 |
| 그룹 → 권한 동기화 | Premium | 무료 | 무료 |
| 조직 구조 | 하위 그룹 | 없음 | 프로젝트 트리 |
| 회사 규모 유료 가격 | $29 | $9.50~$19 | $6 |
| 장기 안정성 | 가장 높음 | 높음 | 낮음 (1인 집중) |
그래서 무엇을 고르나
- 도메인 도구의 공식 구성을 그대로 따르고 싶다면 GitLab. 파이프라인 설정을 자동으로 만들어 주고, 개인 실습부터 회사 규모까지 같은 제품으로 간다. 대신 회사 단계에서는 Premium 비용을 각오해야 한다.
- 무료로 회사 운영까지 가고 싶다면 Gitea. 승인 강제와 그룹 동기화가 무료다. 대신 파이프라인 설정과 결과 표시는 직접 짜야 한다.
- 무료판 기능이 가장 많은 쪽을 원하고 1인 개발 위험을 감수할 수 있다면 OneDev.
- 회사가 이미 GitHub Enterprise를 쓰고 있다면 GitHub Enterprise Server. 새로 시작하는 선택지로는 가장 무겁다.
결정을 가르는 질문은 두 가지로 좁혀졌다. 리뷰 승인 강제와 그룹 동기화를 처음부터 무료로 가져가야 하는가. 그리고 회사 인증 시스템이 OIDC를 허용하는가, SAML만 허용하는가.
남는 생각
처음에는 “GitLab은 무거우니 집 PC에선 무리”와 “Gitea는 결과 화면이 약하다”, 이 두 짐작으로 반쯤 결론을 내려 놓고 있었다. 둘 다 확인해 보니 틀렸거나 절반만 맞았다. 사양은 넉넉했고, Gitea는 최근 버전에서 요약 화면이 생겼다. 대신 처음엔 보지도 않았던 “무료 GitLab에는 승인 강제가 없다”와 “그룹 동기화는 유료”가 실제 결정을 갈랐다. 도구 비교 표는 기능 목록이 아니라 “내 조건에서 무료로 되는 것”으로 다시 그려야 쓸모가 있었다.