Cloud Connector: 유닛 프리미티브 및 구성
GitLab Rails 인스턴스는 Cloud Connector 서비스 액세스 토큰을 사용하여 백엔드 서비스에 접근합니다: Cloud Connector JWT에는 사용자 정의 클레임이 포함되어 있으며, 이는 이 토큰이 유효한 기능 또는 유닛 프리미티브를 정의하는 접근 범위 목록을 나타냅니다.
GitLab Rails 인스턴스는 Cloud Connector 서비스 액세스 토큰을 사용하여 백엔드 서비스에 접근합니다:
- 이 토큰은 CustomersDot에서 GitLab 인스턴스로 매일 동기화되어 인스턴스의 로컬 데이터베이스에 저장됩니다.
- GitLab.com의 경우 이 단계가 필요하지 않습니다. 대신 각 요청에 대해 단기 토큰을 발급합니다.
Cloud Connector JWT에는 사용자 정의 클레임이 포함되어 있으며, 이는 이 토큰이 유효한 기능 또는 유닛 프리미티브를 정의하는 접근 범위 목록을 나타냅니다.
유닛 프리미티브 및 구성#
아키텍처 결정 기록(ADR) PROV-001에 따라
이 유닛 프리미티브 구성은 gitlab-cloud-connector 라이브러리에서 유지 관리됩니다.
이 라이브러리는 모든 Cloud Connector 구성에 대한 단일 소스(SSoT)로 사용되며 Ruby 젬과 Python 패키지 모두로 사용 가능합니다.
카탈로그 탐색#
Cloud Connector Catalog는 유닛 프리미티브, 기능 구성, 애드온 및 라이선스 유형을 탐색하고 필터링하는 인터랙티브 인터페이스를 제공합니다. 이 카탈로그를 다음에 사용합니다:
- 사용 가능한 유닛 프리미티브 및 구성 탐색
- 기능 자격 및 라이선스 요구 사항 이해
- 애드온, 라이선스 유형 및 백엔드 서비스별 필터링

구성 형식 및 구조#
gitlab-cloud-connector의 구성은 다음 구조를 따릅니다:
config
├─ unit_primitives/
│ ├─ duo_chat.yml
│ └─ ...
├─ backend_services/
│ ├─ ai_gateway.yml
│ └─ ...
├─ add_ons/
│ ├─ duo_pro.yml
│ └─ ...
├─ services/
│ ├─ duo_chat.yml
│ └─ ...
└─ license_types/
├─ premium.yml
└─ ...
유닛 프리미티브 구성#
유닛 프리미티브당 하나의 YAML 파일이 있습니다. 이 유닛 프리미티브가 애드온 및 라이선스 유형과 함께 번들되는 방법과 기타 메타데이터에 대한 정보를 포함합니다. 각 유닛 프리미티브의 구성은 다음 스키마를 따릅니다.
필수 필드#
| 필드 | 유형 | 설명 |
|---|---|---|
name |
string | snake_case 형식의 유닛 프리미티브 이름(소문자, 숫자, 밑줄). $VERB_$NOUN 패턴을 따라야 합니다(예: explain_vulnerability). |
description |
string | 유닛 프리미티브의 목적 및 기능 설명. |
group |
string | 유닛 프리미티브를 소유하는 엔지니어링 그룹(예: group::duo chat). |
feature_category |
string | 기능 카테고리 분류(카테고리 참조). |
documentation_url |
string | 유닛 프리미티브 문서의 URL. |
선택적 필드#
| 필드 | 유형 | 설명 |
|---|---|---|
milestone |
string | 유닛 프리미티브를 도입한 GitLab 마일스톤. |
introduced_by_url |
string | 유닛 프리미티브를 도입한 머지 리퀘스트 URL. |
unit_primitive_issue_url |
string | 유닛 프리미티브 도입을 제안한 이슈 URL. |
deprecated_by_url |
string | 유닛 프리미티브를 deprecated한 머지 리퀘스트 URL. |
deprecation_message |
string | deprecated 컨텍스트 및 이유 설명. |
cut_off_date |
datetime | 무료 접근이 종료되는 UTC 타임스탬프(해당하는 경우). 참고: cut-off 날짜를 정의하지 않으면 add_ons 요소가 적용되지 않고 기능이 무료 접근 상태로 유지됩니다. |
min_gitlab_version |
string | 최소 필요 GitLab 버전(예: 17.8). |
min_gitlab_version_for_free_access |
string | 무료 접근 기간의 최소 버전(예: 17.8). |
접근 제어 필드#
| 필드 | 유형 | 설명 |
|---|---|---|
license_types |
array[string] | 이 프리미티브에 접근할 수 있는 GitLab 라이선스 유형. 가능한 값은 config/license_types의 해당 파일에 있는 name 필드와 일치해야 합니다(예: premium). |
backend_services |
array[string] | 이 프리미티브를 호스팅하는 백엔드 서비스. 가능한 값은 config/backend_services의 해당 파일에 있는 name 필드와 일치해야 합니다(예: ai_gateway). |
add_ons |
array[string] | 이 프리미티브를 포함하는 애드온 제품. 이 기능에 접근하려면 나열된 애드온 중 하나 이상이 있어야 합니다. 가능한 값은 config/add_ons의 해당 파일에 있는 name 필드와 일치해야 합니다(예: duo_pro). 참고: 이 필드는 기능이 무료 접근 또는 베타 상태에서 벗어나는 cut_off_date가 정의된 경우에만 적용됩니다. |
유닛 프리미티브 구성 예시:
# config/unit_primitives/new_feature.yml
---
name: new_feature
description: Description of the new feature
cut_off_date: 2024-10-17T00:00:00+00:00 # 선택 사항; 유료 기능의 경우 항상 설정
min_gitlab_version: '16.9'
min_gitlab_version_for_free_access: '16.8'
group: group::your_group
feature_category: your_category
documentation_url: https://docs.gitlab.com/path/to/docs
backend_services:
- ai_gateway
add_ons:
- duo_pro
- duo_enterprise
license_types:
- premium
- ultimate
이 정의에 따르면 기능:
- "Your Group"이 소유한 "New Feature"를 설명합니다.
- GitLab 16.8 이상에서 베타(무료)로 사용 가능합니다.
- GitLab 16.9 이상에서는 유료 애드온을 통해서만 사용 가능합니다.
- 2024년 10월 17일 UTC 자정에 무료 접근에서 유료 접근으로 전환됩니다. 이 시점 이후에는 GitLab Duo Pro 또는 GitLab Duo Enterprise와 Premium 또는 Ultimate 구독이 있어야 합니다.
- 위에 나열된 조건이 충족되면 Cloud Connector 토큰이
scopes클레임에 이 기능을 포함하여 백엔드 서비스가 그에 따라 접근을 검증할 수 있습니다. - 이 기능은 AI Gateway에 대한 요청에만 관련이 있습니다. 해당
scopes항목이 다른 백엔드 서비스에 보내는 요청에 첨부된 토큰의scopes에 있을 필요는 없습니다.
cut_off_date를 설정하지 않으면 add_ons에 정의된 것에 관계없이 기능이 무료로 사용 가능합니다.
관련 구성#
백엔드 서비스#
각 백엔드 서비스에는 config/backend_services 하위에 자체 YAML 구성이 있어야 합니다. 예를 들어:
# config/backend_services/ai_gateway.yml
---
name: ai_gateway
project_url: https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist
group: group::ai framework
jwt_aud: gitlab-ai-gateway
애드온#
각 애드온에는 config/add_ons 하위에 자체 YAML 구성이 있어야 합니다. 예를 들어:
# config/add_ons/duo_pro.yml
---
name: duo_pro
라이선스 유형#
각 라이선스 유형에는 config/license_types 하위에 자체 YAML 구성이 있어야 합니다. 예를 들어:
# config/license_types/premium.yml
---
name: premium
이전 버전 호환성#
이전 GitLab 버전을 실행하는 고객과 기존 레거시 구조에 대한 이전 버전 호환성을 지원하기 위해 새 형식에서 기존 형식으로의 매핑과 곧 deprecated될 "서비스" 추상화를 제공합니다.
서비스 구성#
| 필드 | 유형 | 설명 |
|---|---|---|
name |
string | 소문자 영숫자 문자와 밑줄로 구성된 서비스의 고유 이름. |
basic_unit_primitive |
string | cut_off_date 및 min_gitlab_version과 같은 주요 구성 값을 나타내는 가장 기본적인 유닛 프리미티브. 설정되지 않으면 unit_primitives 목록의 첫 번째 유닛 프리미티브가 사용됩니다. 서비스 전체의 이러한 공유 속성을 도출하는 데 사용됩니다. |
gitlab_realm |
array[string] | 서비스가 사용 가능한 환경 배열. 가능한 값: gitlab-com, self-managed. |
description |
string | 서비스에 대한 간략한 설명. |
unit_primitives |
array[string] | 서비스와 관련된 유닛 프리미티브 배열. |
새 서비스 매핑 구성 예시:
# config/services/duo_chat.yml
---
name: duo_chat
basic_unit_primitive: duo_chat
gitlab_realm:
- gitlab-com
- self-managed
unit_primitives:
- ask_build
- ask_commit
- ask_epic
- ask_issue
- ask_merge_request
- documentation_search
- duo_chat
- explain_code
- fix_code
- include_dependency_context
- include_file_context
- include_issue_context
- include_local_git_context
- include_merge_request_context
- include_snippet_context
- include_terminal_context
- include_repository_context
- refactor_code
- write_tests
레거시 구조#
유료 기능이 GitLab 티어 및 애드온에 번들되는 방법에 대한 정보는 YAML 파일에 구성 및 저장됩니다:
services:
code_suggestions:
backend: 'gitlab-ai-gateway'
cut_off_date: 2024-02-15 00:00:00 UTC
min_gitlab_version: '16.8'
bundled_with:
duo_pro:
unit_primitives:
- code_suggestions
duo_chat:
backend: 'gitlab-ai-gateway'
min_gitlab_version_for_beta: '16.8'
min_gitlab_version: '16.9'
bundled_with:
duo_pro:
unit_primitives:
- duo_chat
- documentation_search
| 필드 | 유형 | 설명 |
|---|---|---|
unit_primitives |
array[string] | 권한 또는 접근 범위가 관리할 수 있는 가장 작은 논리적 기능. $VERB_$NOUN 네이밍 패턴을 따라야 합니다(예: explain_vulnerability). |
service |
string | 기능을 제공하는 서비스 이름. 독립적이거나 기존 서비스의 일부일 수 있습니다(예: duo_chat). |
bundled_with |
object | 이 기능을 포함하는 애드온 맵. 기능은 여러 애드온과 번들될 수 있습니다(예: duo_pro, duo_enterprise). |
cut_off_date |
datetime | 무료 접근이 종료되는 UTC 타임스탬프. 설정되지 않으면 기능이 무료로 유지됩니다. |
min_gitlab_version |
string | 최소 필요 GitLab 버전(예: 17.8). 설정되지 않으면 모든 버전에서 사용 가능합니다. |
min_gitlab_version_for_free_access |
string | 무료 접근 기간의 최소 버전(예: 17.8). 설정되지 않으면 모든 버전에서 사용 가능합니다. |
backend |
string | 이 기능을 호스팅하는 백엔드 서비스의 이름, 토큰 대상 클레임으로 사용됩니다(예: gitlab-ai-gateway). |
