Skip to content
게으른 엔지니어의 기술 블로그
Go back

사내 Git 서버와 CI/CD를 고르다가 GitLab·Gitea·OneDev·GitHub를 비교했다

Read in English →

회사 코드를 GitHub 같은 외부 클라우드에 올릴 수 없는 상황에서, Git 저장소와 CI/CD(코드를 올릴 때마다 자동으로 빌드·테스트·배포하는 체계)를 사내에 직접 설치하려면 무엇을 골라야 할까. 이 질문을 놓고 후보를 하나씩 공식 문서로 확인해 봤다. 결론부터 말하면 “가장 좋은 하나”는 없었고, 무엇을 무료로 받아야 하는지에 따라 답이 갈렸다. 아래 버전과 가격은 모두 2026년 10월 기준이다.

고르려던 조건

조건은 여섯 가지였다.

후보는 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는 가볍다

실제로 확인해 보니 집에 있는 오래된 데스크톱(라이젠 6코어 12스레드, 사용 가능한 메모리 27GiB)도 GitLab 권장 사양을 넘었다. “오래된 PC라 GitLab은 무리”라는 짐작은 틀렸고, 사양은 생각보다 결정적이지 않았다.

CI/CD는 셋 다 된다 — 다른 건 형식과 공식 지원 (MATLAB CI)

세 후보 모두 CI 실행기(러너)를 따로 설치하는 구조다. 차이는 CI 설정 형식이다.

도메인 도구의 공식 지원은 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와 OneDev가 무료 GitLab보다 낫다.

계정 연동 — 로그인과 그룹 동기화를 나눠 봐야 한다 (LDAP·SAML·OIDC)

계정 연동은 “회사 계정으로 로그인”과 “회사 그룹에 맞춰 권한 자동 부여” 두 단계로 나눠 봐야 차이가 보인다.

회사 계정 로그인회사 그룹 → 권한 자동 동기화
GitLab 무료판LDAP, SAML, OIDC 모두 무료LDAP·SAML·OIDC 그룹 동기화 모두 Premium부터
GiteaLDAP, OIDC 무료, SAML은 유료(Enterprise)LDAP 그룹 확인, OIDC 그룹 → 관리자·팀 소속 무료
OneDevLDAP/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 무료판GiteaOneDev
사내 설치가능가능가능
사양무거움가벼움가벼움
CI 형식자체 형식GitHub Actions 형식자체 형식
도메인 도구 공식 CI 지원 (MATLAB 예)있음없음 (명령으로 실행)없음 (명령으로 실행)
PR 화면 테스트·커버리지무료요약만 (Job Summary)무료
리뷰 승인 강제Premium무료무료
회사 계정 로그인무료 (SAML 포함)무료 (SAML 제외)무료
그룹 → 권한 동기화Premium무료무료
조직 구조하위 그룹없음프로젝트 트리
회사 규모 유료 가격$29$9.50~$19$6
장기 안정성가장 높음높음낮음 (1인 집중)

그래서 무엇을 고르나

결정을 가르는 질문은 두 가지로 좁혀졌다. 리뷰 승인 강제와 그룹 동기화를 처음부터 무료로 가져가야 하는가. 그리고 회사 인증 시스템이 OIDC를 허용하는가, SAML만 허용하는가.

남는 생각

처음에는 “GitLab은 무거우니 집 PC에선 무리”와 “Gitea는 결과 화면이 약하다”, 이 두 짐작으로 반쯤 결론을 내려 놓고 있었다. 둘 다 확인해 보니 틀렸거나 절반만 맞았다. 사양은 넉넉했고, Gitea는 최근 버전에서 요약 화면이 생겼다. 대신 처음엔 보지도 않았던 “무료 GitLab에는 승인 강제가 없다”와 “그룹 동기화는 유료”가 실제 결정을 갈랐다. 도구 비교 표는 기능 목록이 아니라 “내 조건에서 무료로 되는 것”으로 다시 그려야 쓸모가 있었다.


Share this post:

Previous Post
다른 PC의 옵시디안을 원격으로 조작해서 플러그인을 테스트했다
Next Post
AI 에이전트가 블로그 초안을 메모리 요약만 보고 고쳤다가, 일화를 바꿔 쓸 뻔했다