네임스페이스
GitLab에서 네임스페이스의 개념, 계층 구조 쿼리 방법, 구현 세부 사항 및 잠금 메커니즘에 대해 설명합니다.
네임스페이스는 프로젝트와 관련 리소스를 담는 컨테이너입니다. Namespace 는 Group , ProjectNamespace , UserNamespace 의 서브클래스를 통해 인스턴스화됩니다. graph TD Namespace -.- Group Namespace -.- ProjectNamespace Namespace -.- UserNamespace User 는 하나의 UserNamespace 를 가지며, 여러 Namespace 의 멤버가 될 수 있습니다. graph TD Namespace -.- Group Namespace -.- ProjectNamespace Namespace -.- UserNamespace User -- has one --- UserNamespace Namespace --- Member --- User Group 은 재귀적인 계층 관계로 존재합니다. Group 은 하나의 Project 를 부모로 갖는 다수의 ProjectNamespace 를 가집니다. graph TD Group -- has many --- ProjectNamespace -- has one --- Project Group -- has many --- Group 네임스페이스 쿼리 # 네임스페이스 계층을 쿼리하기 위한 메서드 집합이 제공됩니다. 이 메서드들은 표준 Rails ActiveRecord::Relation 객체를 생성합니다. 메서드는 유사한 두 가지 그룹으로 나눌 수 있습니다. 한 그룹은 Namespace 객체에서 동작하고, 다른 그룹은 조합 가능한 Namespace 스코프로 동작합니다. 특성상 객체 메서드는 단일 Namespace 계층 내에서 동작하는 반면, 스코프는 여러 계층에 걸쳐 동작할 수 있습니다. 다음은 Namespace 계층을 쿼리하는 메서드의 비완전 목록입니다. 루트 네임스페이스 # 루트는 계층에서 최상위 Namespace 입니다. 루트는 nil 값의 parent_id 를 가집니다. %%{init: { "fontFamily": "GitLab Sans" }}%% graph TD accTitle: Root namespaces accDescr: Diagram showing a namespace hierarchy, starting with the root namespace at the top classDef active stroke-width:3px classDef sel stroke-width:2px A --- A.A --- A.A.A A.A --- A.A.B A --- A.B --- A.B.A A.B --- A.B.B class A.A.B active class A sel Namespace.where(...).roots namespace_object.root_ancestor 하위 네임스페이스 # 네임스페이스의 하위 항목은 자식, 자식의 자식 등으로 이어집니다. %%{init: { "fontFamily": "GitLab Sans" }}%% graph TD accTitle: Descendent namespaces accDescr: Diag