지원되는 Geo 데이터 유형
GitLab v19.4Offering: GitLab Self-Managed
요약
Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다. Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.
Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다.
Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.
데이터 유형#
다음 데이터 유형을 구분합니다.
복제 대상인 각 기능 또는 컴포넌트와 그에 해당하는 데이터 유형, 복제 방법, 확인 방법은 아래 목록을 참고합니다.
| 유형 | 기능 / 컴포넌트 | 복제 방법 | 확인 방법 |
|---|---|---|---|
| Database | PostgreSQL의 애플리케이션 데이터 | Native | Native |
| Database | Redis | 해당 없음 1 | 해당 없음 |
| Database | 고급 검색(Elasticsearch 또는 OpenSearch) | Native | Native |
| Database | 정확한 코드 검색(Zoekt) | Native | Native |
| Database | SSH 공개 키 | PostgreSQL Replication | PostgreSQL Replication |
| Git | 프로젝트 리포지터리 | Geo with Gitaly | Gitaly Checksum |
| Git | 프로젝트 위키 리포지터리 | Geo with Gitaly | Gitaly Checksum |
| Git | 프로젝트 디자인 리포지터리 | Geo with Gitaly | Gitaly Checksum |
| Git | 프로젝트 스니펫 | Geo with Gitaly | Gitaly Checksum |
| Git | 개인 스니펫 | Geo with Gitaly | Gitaly Checksum |
| Git | 그룹 위키 리포지터리 | Geo with Gitaly | Gitaly Checksum |
| Blob | 사용자 업로드 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 사용자 업로드 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | LFS 오브젝트 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | LFS 오브젝트 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | CI job 아티팩트 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | CI job 아티팩트 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 보관된 CI 빌드 추적 (파일 시스템) | Geo with API | 구현되지 않음 |
| Blob | 보관된 CI 빌드 추적 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 컨테이너 레지스트리 (파일 시스템) | Geo with API/Docker API | SHA256 checksum |
| Blob | 컨테이너 레지스트리 (오브젝트 스토리지) | Geo with API/Managed/Docker API 2 | SHA256 checksum 3 |
| Blob | 패키지 레지스트리 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 패키지 레지스트리 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 패키지 Helm 메타데이터 캐시 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 패키지 Helm 메타데이터 캐시 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | Terraform 모듈 레지스트리 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | Terraform 모듈 레지스트리 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 버전 관리 Terraform 상태 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 버전 관리 Terraform 상태 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 외부 머지 리퀘스트 diff (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 외부 머지 리퀘스트 diff (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 파이프라인 아티팩트 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 파이프라인 아티팩트 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | Pages (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | Pages (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | CI Secure Files (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | CI Secure Files (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 인시던트 메트릭 이미지 (파일 시스템) | Geo with API/Managed | SHA256 checksum |
| Blob | 인시던트 메트릭 이미지 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 알림 메트릭 이미지 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 알림 메트릭 이미지 (오브젝트 스토리지) | Geo with API/Managed 2 | SHA256 checksum 3 |
| Blob | 의존성 프록시 이미지 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 의존성 프록시 이미지 (오브젝트 스토리지) | Geo with API/managed 2 | SHA256 checksum 3 |
| Blob | 패키지 nuget 심볼 (파일 시스템) | Geo with API | SHA256 checksum |
| Blob | 패키지 nuget 심볼 (오브젝트 스토리지) | Geo with API/Docker API | SHA256 checksum 3 |
| Container Repository | 컨테이너 레지스트리 (파일 시스템) | Geo with API/Docker API | SHA256 checksum |
| Container Repository | 컨테이너 레지스트리 (오브젝트 스토리지) | Geo with API/Managed/Docker API 2 | SHA256 checksum 3 |
각주:
- Redis 복제는 Redis 센티널을 사용하는 HA 구성의 일부로 쓸 수 있습니다. Geo 사이트 간에는 사용하지 않습니다.
- 오브젝트 스토리지 복제는 Geo가 수행하거나, 오브젝트 스토리지 공급자·어플라이언스의 네이티브 복제 기능이 수행할 수 있습니다.
- 오브젝트 스토리지 확인은 GitLab 16.4에서
geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.
Git 리포지터리#
GitLab 인스턴스는 리포지터리 샤드를 하나 이상 가질 수 있습니다. 각 샤드에는 로컬에 저장된 Git 리포지터리에 접근과 작업을 허용하는 Gitaly 인스턴스가 있습니다. 이 인스턴스는 다음과 같은 머신에서 실행할 수 있습니다.
- 디스크가 하나인 머신
- RAID 어레이처럼 여러 디스크를 단일 마운트 포인트로 마운트한 머신
- LVM을 사용하는 머신
GitLab은 특별한 파일 시스템을 요구하지 않으며 마운트된 스토리지 어플라이언스에서도 동작합니다. 다만 원격 파일 시스템을 사용하면 성능 제약과 일관성 문제가 생길 수 있습니다.
Geo는 Geo 보조 사이트에서 포크된 리포지터리를 중복 제거하도록 Gitaly에서 가비지 컬렉션을 트리거합니다.
통신은 Gitaly gRPC API가 담당하며, 동기화 방식은 다음 세 가지입니다.
- 한 Geo 사이트에서 다른 사이트로 일반 Git clone/fetch를 사용합니다(별도 인증 포함).
- 리포지터리 스냅샷을 사용합니다(첫 번째 방식이 실패하거나 리포지터리가 손상된 경우).
- Admin 영역에서 수동으로 트리거합니다(나열된 다른 방식을 조합합니다).
각 프로젝트는 최대 3개의 리포지터리를 가질 수 있습니다.
- 소스 코드를 저장하는 프로젝트 리포지터리
- 위키 콘텐츠를 저장하는 위키 리포지터리
- 디자인 아티팩트를 인덱싱하는 디자인 리포지터리(자산은 실제로 LFS에 있습니다)
세 리포지터리는 모두 같은 샤드에 있고 같은 기본 이름을 공유하며, 위키와 디자인 리포지터리에는
각각 -wiki와 -design 접미사가 붙습니다.
그 밖에 스니펫 리포지터리가 있습니다. 스니펫 리포지터리는 프로젝트나 특정 사용자에 연결할 수 있습니다. 두 유형 모두 보조 사이트로 동기화됩니다.
컨테이너 리포지터리#
컨테이너 리포지터리는 컨테이너 레지스트리에 저장됩니다. 컨테이너 리포지터리는 컨테이너 레지스트리를 데이터 저장소로 삼아 구축한 GitLab 고유 개념입니다.
블롭#
GitLab은 이슈 첨부 파일이나 LFS 오브젝트 같은 파일과 블롭을 다음 중 한 곳에 저장합니다.
- 특정 위치의 파일 시스템
- 오브젝트 스토리지 솔루션. 오브젝트 스토리지 솔루션은 다음과 같습니다.
- Amazon S3나 Google Cloud Storage 같은 클라우드 기반 스토리지
- 자체 호스팅 S3 호환 오브젝트 스토리지
- 오브젝트 스토리지 호환 API를 노출하는 스토리지 어플라이언스
오브젝트 스토리지 대신 파일 시스템 저장소를 사용하고 노드를 둘 이상 사용한다면, 네트워크 마운트 파일 시스템으로 GitLab을 실행합니다.
복제와 확인 측면에서는 다음과 같습니다.
- 파일과 블롭은 내부 API 요청으로 전송합니다.
- 오브젝트 스토리지에서는 다음 중 하나를 선택할 수 있습니다.
- 클라우드 공급자의 복제 기능을 사용합니다.
- GitLab이 대신 복제하도록 합니다.
데이터베이스#
GitLab은 사용 사례별로 여러 데이터베이스에 저장된 데이터에 의존합니다. PostgreSQL은 이슈 콘텐츠와 댓글은 물론 권한과 자격 증명까지, 웹 인터페이스에서 생성되는 사용자 콘텐츠의 단일 진실 공급원입니다.
PostgreSQL은 HTML로 렌더링한 Markdown이나 캐시된 머지 리퀘스트 diff 같은 캐시 데이터도 일부 보관할 수 있습니다. 이 데이터는 오브젝트 스토리지로 오프로드하도록 구성할 수도 있습니다.
기본 사이트에서 보조 사이트로 데이터를 복제할 때는 PostgreSQL 자체 복제 기능을 사용합니다.
Redis는 캐시 저장소로도, 백그라운드 job 시스템의 영속 데이터 보관용으로도 사용합니다. 두 사용 사례 모두 같은 Geo 사이트에만 해당하는 데이터를 다루므로 사이트 간에 복제하지 않습니다.
Elasticsearch는 고급 검색을 위한 선택적 데이터베이스입니다. 소스 코드 수준의 검색과 이슈, 머지 리퀘스트, 토론의 사용자 생성 콘텐츠 검색을 모두 개선할 수 있습니다. Elasticsearch는 Geo에서 지원되지 않습니다.
복제되는 데이터 유형#
기능 플래그 뒤의 복제되는 데이터 유형#
히스토리
- 기본값으로 활성화된 기능 플래그 뒤에 배포됩니다.
- GitLab.com에서 활성화되어 있습니다.
- 프로젝트별로 활성화하거나 비활성화할 수 없습니다.
- 프로덕션 사용을 권장합니다.
- GitLab Self-Managed 인스턴스에서는 GitLab 관리자가 비활성화를 선택할 수 있습니다.
이 기능의 가용성은 기능 플래그로 제어합니다. 자세한 내용은 히스토리를 참고합니다.
복제 활성화 또는 비활성화(일부 데이터 유형)#
일부 데이터 유형의 복제는 기본값으로 활성화된 기능 플래그 뒤에서 릴리스됩니다. GitLab Rails 콘솔에 접근할 수 있는 GitLab 관리자는 인스턴스에서 이를 비활성화할 수 있습니다. 각 데이터 유형의 기능 플래그 이름은 아래 표의 비고 칼럼에서 확인할 수 있습니다.
패키지 파일 복제를 예로 들면, 비활성화는 다음과 같습니다.
Feature.disable(:geo_package_file_replication)
패키지 파일 복제를 예로 들면, 활성화는 다음과 같습니다.
Feature.enable(:geo_package_file_replication)
geo_<replicable>_replication 플래그를 비활성화하면 보조 사이트의 복제와 확인이
중단됩니다.
기본 사이트에서는 그에 대응하는 geo_<replicable>_force_primary_checksumming 플래그가
활성화되어 있는 동안(기본값) 체크섬 계산이 계속됩니다.
기본 사이트의 체크섬 계산도 중단하려면 두 플래그를 모두 비활성화합니다.
Feature.disable(:geo_package_file_replication)
Feature.disable(:geo_package_file_force_primary_checksumming)
이 목록에 없거나 Replicated 칼럼이 No 인 기능은 보조 사이트로 복제되지 않습니다. 해당 기능의 데이터를 수동으로 복제하지 않고 페일오버하면 데이터가 손실됩니다. 보조 사이트에서 해당 기능을 사용하거나 페일오버를 성공적으로 수행하려면 다른 방법으로 데이터를 복제해야 합니다.
| 기능 | 복제됨(추가된 GitLab 버전) | 확인됨(추가된 GitLab 버전) | GitLab 관리 오브젝트 스토리지 복제(추가된 GitLab 버전) | GitLab 관리 오브젝트 스토리지 확인(추가된 GitLab 버전) | 비고 |
|---|---|---|---|---|---|
| PostgreSQL의 애플리케이션 데이터 | ✅ | ✅ | 해당 없음 | 해당 없음 | 없음 |
| 프로젝트 리포지터리 | ✅ | ✅ | 해당 없음 | 해당 없음 | 복제는 기능 플래그 geo_project_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.보관된 프로젝트를 포함한 모든 프로젝트가 복제됩니다. |
| 프로젝트 위키 리포지터리 | ✅ 2 | ✅ 2 | 해당 없음 | 해당 없음 | 복제는 기능 플래그 geo_project_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 그룹 위키 리포지터리 | ✅ | ✅ | 해당 없음 | 해당 없음 | 복제는 기능 플래그 geo_group_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 사용자 업로드 | ✅ | ✅ | ✅ | ✅ 3 | 복제는 기능 플래그 geo_upload_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| LFS 오브젝트 | ✅ | ✅ | ✅ | ✅ 3 | 복제는 기능 플래그 geo_lfs_object_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 개인 스니펫 | ✅ | ✅ | 해당 없음 | 해당 없음 | 없음 |
| 프로젝트 스니펫 | ✅ | ✅ | 해당 없음 | 해당 없음 | 없음 |
| CI job 아티팩트 | ✅ | ✅ | ✅ | ✅ 3 | 확인은 기능 플래그 geo_job_artifact_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 기본 사이트에서는 geo_job_artifact_force_primary_checksumming도 함께 비활성화하지 않는 한 체크섬 계산이 계속됩니다. 복제 활성화 또는 비활성화를 참고합니다. |
| 파이프라인 아티팩트 | ✅ | ✅ | ✅ | ✅ 3 | 파이프라인이 완료된 뒤 추가 아티팩트를 보존합니다. |
| CI Secure Files | ✅ (15.3) | ✅ (15.3) | ✅ (15.3) | ✅ (16.4)3 | 확인은 기능 플래그 geo_ci_secure_file_replication 뒤에 있으며 15.3부터 기본값으로 활성화되어 있습니다. |
| 컨테이너 레지스트리 | ✅ (12.3)1 | ✅ (15.10) | ✅ (12.3)1 | ✅ (15.10) | 컨테이너 레지스트리 복제를 설정하려면 안내를 참고합니다. |
| Terraform 모듈 레지스트리 | ✅ (14.0) | ✅ (14.0) | ✅ (15.1) | ✅ (16.4)3 | 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 프로젝트 디자인 리포지터리 | ✅ (12.7) | ✅ (16.1) | ✅ (16.4)3 | ✅ (16.4)3 | 디자인에는 LFS 오브젝트와 업로드의 복제도 필요합니다. |
| 패키지 레지스트리 | ✅ (13.2) | ✅ (13.10) | ✅ (15.1) | ✅ (16.4)3 | 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 패키지 Helm 메타데이터 캐시 | ✅ (18.10) | ✅ (18.10) | ✅ (18.10) | ✅ (18.10) | 기능 플래그 geo_packages_helm_metadata_cache_replication 뒤에 있으며 18.10부터 기본값으로 활성화되어 있습니다. |
| 버전 관리 Terraform 상태 | ✅ (13.5) | ✅ (13.12) | ✅ (15.1) | ✅ (16.4)3 | 복제는 기능 플래그 geo_terraform_state_version_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_terraform_state_version_verification 뒤에 있었으나 14.0에서 제거되었습니다. |
| 외부 머지 리퀘스트 diff | ✅ (13.5) | ✅ (14.6) | ✅ (15.1) | ✅ (16.4)3 | 복제는 기능 플래그 geo_merge_request_diff_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_merge_request_diff_verification 뒤에 있었으나 14.7에서 제거되었습니다. |
| 버전 관리 스니펫 | ✅ (13.7) | ✅ (14.2) | ✅ (16.4)3 | ✅ (16.4)3 | 확인은 13.11에서 기능 플래그 geo_snippet_repository_verification 뒤에 구현되었고, 이 기능 플래그는 14.2에서 제거되었습니다. |
| Pages | ✅ (14.3) | ✅ (14.6) | ✅ (15.1) | ✅ (16.4)3 | 기능 플래그 geo_pages_deployment_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_pages_deployment_verification 뒤에 있었으나 14.7에서 제거되었습니다. |
| 프로젝트 수준 CI Secure Files | ✅ (15.3) | ✅ (15.3) | ✅ (15.3) | ✅ (16.4)3 | |
| 인시던트 메트릭 이미지 | ✅ (15.5) | ✅ (15.5) | ✅ (15.5) | ✅ (16.4)3 | 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다. |
| 알림 메트릭 이미지 | ✅ (15.5) | ✅ (15.5) | ✅ (15.5) | ✅ (16.4)3 | 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다. |
| 서버 측 Git 훅 | 계획 없음 | ❌ | 해당 없음 | 해당 없음 | 현재 구현 복잡도, 낮은 고객 수요, 훅을 대체할 수단의 존재를 이유로 계획이 없습니다. |
| Elasticsearch | 계획 없음 | ❌ | ❌ | ❌ | 추가 제품 검토가 필요하고 Elasticsearch(ES) 클러스터는 재구축할 수 있으므로 계획이 없습니다. 보조 사이트는 기본 사이트와 같은 ES 클러스터를 사용합니다. |
| 의존성 프록시 이미지 | ✅ (15.7) | ✅ (15.7) | ✅ (15.7) | ✅ (16.4)3 | |
| 패키지 NuGet 심볼 | ✅ (18.10) | ✅ (18.10) | ✅ (15.7) | ✅ (16.4)3 | 기능 플래그 geo_packages_nuget_symbol_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. |
| 취약점 내보내기 | 계획 없음 | ❌ | ❌ | ❌ | 일시적이고 민감한 정보이므로 계획이 없습니다. 필요할 때 다시 생성할 수 있습니다. |
| 패키지 NPM 메타데이터 캐시 | 계획 없음 | ❌ | ❌ | ❌ | 재해 복구 역량이나 보조 사이트의 응답 시간을 크게 개선하지 못하므로 계획이 없습니다. |
| 패키지 Debian GroupComponentFile | 계획 없음 | ❌ | ❌ | ❌ | |
| 패키지 Debian ProjectComponentFile | ✅ (19.1) | ✅ (19.1) | ✅ (19.1) | ✅ (19.1) | 기능 플래그 geo_packages_debian_project_component_file_replication 뒤에 있으며 기본값으로 비활성화되어 있습니다. |
| 패키지 Debian GroupDistribution | 계획 없음 | ❌ | ❌ | ❌ | |
| 패키지 Debian ProjectDistribution | 계획 없음 | ❌ | ❌ | ❌ | |
| 패키지 RPM RepositoryFile | 계획 없음 | ❌ | ❌ | ❌ | |
| VirtualRegistries Maven Cache Entry | 계획 없음 | ❌ | ❌ | ❌ | |
| SBOM 취약점 스캔 데이터 | 계획 없음 | ❌ | ❌ | ❌ | 데이터가 임시이고 수명이 짧아 보조 사이트의 재해 복구 역량에 미치는 영향이 제한적이므로 계획이 없습니다. |
각주:
- 15.5에서 셀프 서비스 프레임워크로 이전되었습니다. 자세한 내용은 GitLab 이슈 #337436을 참고합니다.
- 15.11에서 셀프 서비스 프레임워크로 이전되었습니다. 기능 플래그
geo_project_wiki_repository_replication뒤에 있으며 기본값으로 활성화되어 있습니다. 자세한 내용은 GitLab 이슈 #367925를 참고합니다. - 오브젝트 스토리지 확인은 GitLab 16.4에서
geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.