그룹과 서브그룹으로 프로젝트를 묶고 멤버 역할에 따라 권한이 어떻게 달라지는지 이해한다.
그룹과 권한
조직이 커지면 프로젝트가 늘어나고, 누가 무엇을 할 수 있는지 통제하는 일이 중요해집니다. GitLab은 그룹과 서브그룹으로 프로젝트를 묶고, 역할(role) 기반으로 권한을 부여해 이 문제를 다룹니다.
학습 목표
- 그룹과 서브그룹으로 프로젝트를 묶는 방법을 이해한다.
- 멤버 역할 5단계(Guest/Reporter/Developer/Maintainer/Owner)를 구분한다.
- 역할별 권한 차이를 안다.
그룹과 서브그룹
그룹(Group)은 여러 프로젝트와 멤버를 묶는 상위 단위입니다. 회사, 팀, 조직 단위로 만든다고 보면 됩니다.
- 그룹 안에 여러 프로젝트를 둘 수 있다.
- 그룹 안에 다시 서브그룹(Subgroup)을 만들어 계층 구조를 표현할 수 있다(예:
회사 > 백엔드팀 > 결제프로젝트). - 그룹 단위로 라벨, 마일스톤, CI/CD 변수, 멤버를 공유한다.
권한과 설정은 상위에서 하위로 상속됩니다. 그룹 멤버는 그 그룹의 모든 프로젝트에 같은 역할로 접근하므로, 멤버를 프로젝트마다 일일이 추가하지 않아도 됩니다. 서브그룹은 부모 그룹의 멤버십을 물려받습니다.
멤버 역할 5단계
GitLab은 멤버에게 다음 다섯 가지 역할 중 하나를 부여합니다. 위로 갈수록 권한이 넓어집니다.
- Guest: 가장 낮은 권한. 이슈를 보고 만들 수 있지만 비공개 코드는 보지 못한다.
- Reporter: 코드와 프로젝트 내용을 읽을 수 있다(읽기 중심). 이슈·라벨 관리도 가능.
- Developer: 코드를 push하고 브랜치·MR을 만들 수 있다. 실제 개발자에게 주는 표준 역할.
- Maintainer: 프로젝트 설정 변경, protected branch 관리, 멤버 추가 등 운영 권한. 프로젝트 멤버로 줄 수 있는 가장 높은 역할입니다.
- Owner: 최상위 권한. 그룹 삭제, 가시성 변경 등 모든 것을 할 수 있다. Owner는 그룹 레벨 역할이며, 프로젝트 자체의 Owner는 그 프로젝트가 속한 네임스페이스(그룹·계정) 소유자입니다.
역할은 그룹 또는 프로젝트의 Members 화면에서 멤버를 초대할 때 지정합니다. (이 다섯 외에 거의 권한이 없는 Minimal Access 등의 단계도 있지만, 실무에서는 위 다섯이 핵심입니다.)
역할별 권한 차이
자주 쓰는 작업을 역할별로 정리하면 다음과 같습니다.
- 이슈 보기/생성: Guest 이상
- 비공개 저장소 코드 읽기: Reporter 이상
- 코드 push, MR 생성, 브랜치 생성: Developer 이상
- protected branch에 머지, CI/CD 설정, 멤버 관리: Maintainer 이상
- 프로젝트/그룹 삭제, 가시성·이전 같은 위험한 작업: Owner
원칙은 "필요한 최소 권한만 준다"입니다. 외부 협력자나 이해관계자에게는 Guest나 Reporter를, 실제 개발자에게는 Developer를, 팀 리드에게 Maintainer를, 조직 관리자에게 Owner를 주는 식으로 운영합니다.
protected branch와 권한
권한은 브랜치 보호와도 연결됩니다. main 같은 중요한 브랜치를 protected branch로 설정하면, 누가 직접 push하거나 머지할 수 있는지를 역할 기준으로 제한할 수 있습니다.
- 예: main에는 Maintainer만 머지 가능, Developer는 MR을 통해서만 변경
- force push 금지, 삭제 금지 같은 추가 보호도 설정 가능
이렇게 역할과 브랜치 보호를 함께 쓰면, 실수로 인한 직접 push나 권한 밖 작업을 구조적으로 막을 수 있습니다.
요약
그룹과 서브그룹은 여러 프로젝트와 멤버를 계층적으로 묶고, 라벨·마일스톤·변수·멤버십을 공유하며 상위에서 하위로 상속합니다. 멤버에게는 Guest, Reporter, Developer, Maintainer, Owner 중 하나의 역할을 주어 작업 범위를 통제합니다. 최소 권한 원칙을 지키고 protected branch와 결합하면, 큰 조직에서도 안전하고 일관된 협업 환경을 만들 수 있습니다.
댓글 0
“GitLab” 강좌에 대한 댓글입니다.