InfoGrab DocsInfoGrab Docs

데이터베이스 딕셔너리

요약

이 페이지는 GitLab의 데이터베이스 스키마를 정리해, 데이터 분석가와 다른 그룹이 특정 데이터베이스 테이블을 담당하는 기능 카테고리를 찾을 수 있도록 합니다. 데이터베이스 딕셔너리 메타데이터 파일은 main, ci, sec 데이터베이스의 경우 gitlab 프로젝트의 db/docs/ 아래에 저장됩니다.

이 페이지는 GitLab의 데이터베이스 스키마를 정리해, 데이터 분석가와 다른 그룹이 특정 데이터베이스 테이블을 담당하는 기능 카테고리를 찾을 수 있도록 합니다.

위치#

데이터베이스 딕셔너리 메타데이터 파일은 main, ci, sec 데이터베이스의 경우 gitlab 프로젝트의 db/docs/ 아래에 저장됩니다. embedding 데이터베이스의 딕셔너리 파일은 ee/db/embedding/docs/ 아래에 저장됩니다. geo 데이터베이스의 딕셔너리 파일은 ee/db/geo/docs/ 아래에 저장됩니다.

딕셔너리 파일 예시#

---
table_name: terraform_states
classes:
- Terraform::State
feature_categories:
- infrastructure_as_code
description: Represents a Terraform state backend
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26619
milestone: '13.0'
gitlab_schema: gitlab_main_org
sharding_key:
    project_id: projects
table_size: small

테이블 추가#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 테이블 이름.
classes Array(String) 아니요 이 테이블과 연관된 클래스 목록.
feature_categories Array(String) 예 이 테이블을 사용하는 기능 카테고리 목록.
description String 아니요 테이블에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 테이블을 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 예 이 테이블을 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
notes String 아니요 Psych가 YAML 주석을 파싱하지 못하므로 설명을 남길 때 사용합니다.
table_size String 예 GitLab.com 에서의 현재 테이블 크기 분류. 1 크기에는 인덱스가 포함됩니다. 파티션된 테이블의 경우 가장 큰 파티션의 크기입니다. 사용할 수 있는 값은 unknown, small(10 GB 미만), medium(50 GB 미만), large(100 GB 미만), over_limit(100 GB 초과)입니다.
sharding_key Hash 조건부 테이블을 조직과 연결하는 데 사용하는 칼럼을 지정합니다. 해당 칼럼에 NOT NULL 제약 조건이 있을 때만 설정합니다. 샤딩 키 필드를 참고합니다.
desired_sharding_key Hash 조건부 샤딩 키 칼럼이 존재하지만 아직 NOT NULL 제약 조건이 없을 때, 목표로 하는 샤딩 키 칼럼을 지정합니다. 샤딩 키 필드를 참고합니다.

각주:

  1. 새 테이블은 데이터가 없으므로 보통 기본값이 small 입니다. 이 속성은 매월 자동으로 갱신됩니다.

절차#

테이블을 추가할 때는 다음을 수행합니다.

  1. 해당 테이블의 새 파일을 알맞은 디렉터리에 만듭니다.
    • gitlab_main 테이블: db/docs/
    • gitlab_ci 테이블: db/docs/
    • gitlab_sec 테이블: db/docs/
    • gitlab_shared 테이블: db/docs/
    • gitlab_embedding 테이블: ee/db/embedding/docs/
    • gitlab_geo 테이블: ee/db/geo/docs/
  2. 파일 이름을 <table_name>.yml로 정하고, 테이블에 대해 아는 정보를 최대한 담습니다.
  3. 이 파일을 테이블을 생성하는 마이그레이션과 같은 커밋에 포함합니다.
  4. db/fixtures/development/에 행을 최소 하나 생성하는 시드 픽스처를 추가합니다. 이 픽스처에서 팩토리를 호출해도 되지만, 시딩 과정에서 아무것도 호출하지 않으므로 spec/factories/ 항목만으로는 충분하지 않습니다. 시드 데이터가 없으면 db:migrate:multi-version-upgrade에서 사용하는 덤프에 테이블이 비어 있게 되어, 해당 테이블을 다루는 마이그레이션이 전혀 실행되지 않고 run-dev-fixtures-ee job 이 실패합니다.

테이블 삭제#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 테이블 이름.
classes Array(String) 아니요 이 테이블과 연관된 클래스 목록.
feature_categories Array(String) 예 이 테이블을 사용하는 기능 카테고리 목록.
description String 아니요 테이블에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 테이블을 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 테이블을 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
removed_by_url String 예 이 테이블을 제거한 머지 리퀘스트 또는 커밋의 URL.
removed_in_milestone String 예 이 테이블을 제거하는 마일스톤.

절차#

테이블을 삭제할 때는 다음을 수행합니다.

  1. 해당 테이블의 딕셔너리 파일을 deleted_tables 디렉터리로 옮깁니다.
    • gitlab_main 테이블: db/docs/deleted_tables/
    • gitlab_ci 테이블: db/docs/deleted_tables/
    • gitlab_sec 테이블: db/docs/deleted_tables/
    • gitlab_shared 테이블: db/docs/deleted_tables/
    • gitlab_embedding 테이블: ee/db/embedding/docs/deleted_tables/
    • gitlab_geo 테이블: ee/db/geo/docs/deleted_tables/
  2. 딕셔너리 파일에 removed_by_url과 removed_in_milestone 필드를 추가합니다.
  3. 이 변경을 테이블을 삭제하는 마이그레이션과 같은 커밋에 포함합니다.

뷰 추가#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 뷰 이름.
classes Array(String) 아니요 이 뷰와 연관된 클래스 목록.
feature_categories Array(String) 예 이 뷰를 사용하는 기능 카테고리 목록.
description String 아니요 뷰에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 뷰를 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 뷰를 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.

절차#

새 뷰를 추가할 때는 다음을 수행합니다.

  1. 해당 뷰의 새 파일을 알맞은 디렉터리에 만듭니다.
    • gitlab_main 뷰: db/docs/views/
    • gitlab_ci 뷰: db/docs/views/
    • gitlab_sec 뷰: db/docs/views/
    • gitlab_shared 뷰: db/docs/views/
    • gitlab_embedding 뷰: ee/db/embedding/docs/views/
    • gitlab_geo 뷰: ee/db/geo/docs/views/
  2. 파일 이름을 <view_name>.yml로 정하고, 뷰에 대해 아는 정보를 최대한 담습니다.
  3. 이 파일을 뷰를 생성하는 마이그레이션과 같은 커밋에 포함합니다.

뷰 삭제#

스키마#

속성 타입 필수 여부 설명
view_name String 예 데이터베이스 뷰 이름.
classes Array(String) 아니요 이 뷰와 연관된 클래스 목록.
feature_categories Array(String) 예 이 뷰를 사용하는 기능 카테고리 목록.
description String 아니요 뷰에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 뷰를 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 뷰를 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
removed_by_url String 예 이 뷰를 제거한 머지 리퀘스트 또는 커밋의 URL.
removed_in_milestone String 예 이 뷰를 제거하는 마일스톤.

절차#

뷰를 삭제할 때는 다음을 수행합니다.

  1. 해당 테이블의 딕셔너리 파일을 deleted_views 디렉터리로 옮깁니다.
    • gitlab_main 뷰: db/docs/deleted_views/
    • gitlab_ci 뷰: db/docs/deleted_views/
    • gitlab_sec 뷰: db/docs/deleted_views/
    • gitlab_shared 뷰: db/docs/deleted_views/
    • gitlab_embedding 뷰: ee/db/embedding/docs/deleted_views/
    • gitlab_geo 뷰: ee/db/geo/docs/deleted_views/
  2. 딕셔너리 파일에 removed_by_url과 removed_in_milestone 필드를 추가합니다.
  3. 이 변경을 뷰를 삭제하는 마이그레이션과 같은 커밋에 포함합니다.

샤딩 키 필드#

sharding_key와 desired_sharding_key 필드는 테이블에 샤딩 키를 추가하는 진행 상황을 추적합니다. 이 필드는 추적 용도로 사용되며, 도구가 샤딩 과정을 지원할 수 있게 해 줍니다.

  • sharding_key: 샤딩 키 칼럼에 데이터베이스에서 NOT NULL 제약 조건이 적용된 경우에만 이 필드를 사용합니다. 이는 테이블이 완전히 샤딩되어 조직 격리를 적용할 준비가 되었음을 뜻합니다.
  • desired_sharding_key: 샤딩 키 칼럼이 존재하지만 아직 NOT NULL 제약 조건이 없는 경우(예: 백필 진행 중)에 이 필드를 사용합니다. 테이블에 이 필드가 설정되어 있으면 백필을 더 쉽게 해 주는 도구를 사용할 수 있습니다. 백필이 끝나고 NOT NULL 제약 조건이 추가되면 desired_sharding_key를 sharding_key로 교체합니다.

테이블에 샤딩 키를 추가하는 자세한 방법은 샤딩 가이드라인을 참고합니다.

조직 이전 지원#

organization_id로 샤딩된 테이블은 사용자나 그룹을 조직 간에 이전할 때 올바르게 처리해야 합니다. 이전 지원 상태는 데이터베이스 딕셔너리와 별도로 config/organizations/transfer_support.yml 전용 레지스트리 파일에서 추적합니다.

상태 값과 테이블의 이전 지원을 등록하는 방법은 조직 샤딩 가이드를 참고합니다.

데이터베이스 딕셔너리

GitLab v19.4
원문 보기

요약

이 페이지는 GitLab의 데이터베이스 스키마를 정리해, 데이터 분석가와 다른 그룹이 특정 데이터베이스 테이블을 담당하는 기능 카테고리를 찾을 수 있도록 합니다. 데이터베이스 딕셔너리 메타데이터 파일은 main, ci, sec 데이터베이스의 경우 gitlab 프로젝트의 db/docs/ 아래에 저장됩니다.

이 페이지는 GitLab의 데이터베이스 스키마를 정리해, 데이터 분석가와 다른 그룹이 특정 데이터베이스 테이블을 담당하는 기능 카테고리를 찾을 수 있도록 합니다.

위치#

데이터베이스 딕셔너리 메타데이터 파일은 main, ci, sec 데이터베이스의 경우 gitlab 프로젝트의 db/docs/ 아래에 저장됩니다. embedding 데이터베이스의 딕셔너리 파일은 ee/db/embedding/docs/ 아래에 저장됩니다. geo 데이터베이스의 딕셔너리 파일은 ee/db/geo/docs/ 아래에 저장됩니다.

딕셔너리 파일 예시#

---
table_name: terraform_states
classes:
- Terraform::State
feature_categories:
- infrastructure_as_code
description: Represents a Terraform state backend
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26619
milestone: '13.0'
gitlab_schema: gitlab_main_org
sharding_key:
    project_id: projects
table_size: small

테이블 추가#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 테이블 이름.
classes Array(String) 아니요 이 테이블과 연관된 클래스 목록.
feature_categories Array(String) 예 이 테이블을 사용하는 기능 카테고리 목록.
description String 아니요 테이블에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 테이블을 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 예 이 테이블을 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
notes String 아니요 Psych가 YAML 주석을 파싱하지 못하므로 설명을 남길 때 사용합니다.
table_size String 예 GitLab.com 에서의 현재 테이블 크기 분류. 1 크기에는 인덱스가 포함됩니다. 파티션된 테이블의 경우 가장 큰 파티션의 크기입니다. 사용할 수 있는 값은 unknown, small(10 GB 미만), medium(50 GB 미만), large(100 GB 미만), over_limit(100 GB 초과)입니다.
sharding_key Hash 조건부 테이블을 조직과 연결하는 데 사용하는 칼럼을 지정합니다. 해당 칼럼에 NOT NULL 제약 조건이 있을 때만 설정합니다. 샤딩 키 필드를 참고합니다.
desired_sharding_key Hash 조건부 샤딩 키 칼럼이 존재하지만 아직 NOT NULL 제약 조건이 없을 때, 목표로 하는 샤딩 키 칼럼을 지정합니다. 샤딩 키 필드를 참고합니다.

각주:

  1. 새 테이블은 데이터가 없으므로 보통 기본값이 small 입니다. 이 속성은 매월 자동으로 갱신됩니다.

절차#

테이블을 추가할 때는 다음을 수행합니다.

  1. 해당 테이블의 새 파일을 알맞은 디렉터리에 만듭니다.
    • gitlab_main 테이블: db/docs/
    • gitlab_ci 테이블: db/docs/
    • gitlab_sec 테이블: db/docs/
    • gitlab_shared 테이블: db/docs/
    • gitlab_embedding 테이블: ee/db/embedding/docs/
    • gitlab_geo 테이블: ee/db/geo/docs/
  2. 파일 이름을 <table_name>.yml로 정하고, 테이블에 대해 아는 정보를 최대한 담습니다.
  3. 이 파일을 테이블을 생성하는 마이그레이션과 같은 커밋에 포함합니다.
  4. db/fixtures/development/에 행을 최소 하나 생성하는 시드 픽스처를 추가합니다. 이 픽스처에서 팩토리를 호출해도 되지만, 시딩 과정에서 아무것도 호출하지 않으므로 spec/factories/ 항목만으로는 충분하지 않습니다. 시드 데이터가 없으면 db:migrate:multi-version-upgrade에서 사용하는 덤프에 테이블이 비어 있게 되어, 해당 테이블을 다루는 마이그레이션이 전혀 실행되지 않고 run-dev-fixtures-ee job 이 실패합니다.

테이블 삭제#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 테이블 이름.
classes Array(String) 아니요 이 테이블과 연관된 클래스 목록.
feature_categories Array(String) 예 이 테이블을 사용하는 기능 카테고리 목록.
description String 아니요 테이블에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 테이블을 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 테이블을 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
removed_by_url String 예 이 테이블을 제거한 머지 리퀘스트 또는 커밋의 URL.
removed_in_milestone String 예 이 테이블을 제거하는 마일스톤.

절차#

테이블을 삭제할 때는 다음을 수행합니다.

  1. 해당 테이블의 딕셔너리 파일을 deleted_tables 디렉터리로 옮깁니다.
    • gitlab_main 테이블: db/docs/deleted_tables/
    • gitlab_ci 테이블: db/docs/deleted_tables/
    • gitlab_sec 테이블: db/docs/deleted_tables/
    • gitlab_shared 테이블: db/docs/deleted_tables/
    • gitlab_embedding 테이블: ee/db/embedding/docs/deleted_tables/
    • gitlab_geo 테이블: ee/db/geo/docs/deleted_tables/
  2. 딕셔너리 파일에 removed_by_url과 removed_in_milestone 필드를 추가합니다.
  3. 이 변경을 테이블을 삭제하는 마이그레이션과 같은 커밋에 포함합니다.

뷰 추가#

스키마#

속성 타입 필수 여부 설명
table_name String 예 데이터베이스 뷰 이름.
classes Array(String) 아니요 이 뷰와 연관된 클래스 목록.
feature_categories Array(String) 예 이 뷰를 사용하는 기능 카테고리 목록.
description String 아니요 뷰에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 뷰를 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 뷰를 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.

절차#

새 뷰를 추가할 때는 다음을 수행합니다.

  1. 해당 뷰의 새 파일을 알맞은 디렉터리에 만듭니다.
    • gitlab_main 뷰: db/docs/views/
    • gitlab_ci 뷰: db/docs/views/
    • gitlab_sec 뷰: db/docs/views/
    • gitlab_shared 뷰: db/docs/views/
    • gitlab_embedding 뷰: ee/db/embedding/docs/views/
    • gitlab_geo 뷰: ee/db/geo/docs/views/
  2. 파일 이름을 <view_name>.yml로 정하고, 뷰에 대해 아는 정보를 최대한 담습니다.
  3. 이 파일을 뷰를 생성하는 마이그레이션과 같은 커밋에 포함합니다.

뷰 삭제#

스키마#

속성 타입 필수 여부 설명
view_name String 예 데이터베이스 뷰 이름.
classes Array(String) 아니요 이 뷰와 연관된 클래스 목록.
feature_categories Array(String) 예 이 뷰를 사용하는 기능 카테고리 목록.
description String 아니요 뷰에 저장된 정보와 그 목적에 대한 텍스트 설명.
introduced_by_url URL 아니요 이 뷰를 도입한 머지 리퀘스트 또는 커밋의 URL.
milestone String 아니요 이 뷰를 도입한 마일스톤.
gitlab_schema String 예 GitLab 스키마 이름.
removed_by_url String 예 이 뷰를 제거한 머지 리퀘스트 또는 커밋의 URL.
removed_in_milestone String 예 이 뷰를 제거하는 마일스톤.

절차#

뷰를 삭제할 때는 다음을 수행합니다.

  1. 해당 테이블의 딕셔너리 파일을 deleted_views 디렉터리로 옮깁니다.
    • gitlab_main 뷰: db/docs/deleted_views/
    • gitlab_ci 뷰: db/docs/deleted_views/
    • gitlab_sec 뷰: db/docs/deleted_views/
    • gitlab_shared 뷰: db/docs/deleted_views/
    • gitlab_embedding 뷰: ee/db/embedding/docs/deleted_views/
    • gitlab_geo 뷰: ee/db/geo/docs/deleted_views/
  2. 딕셔너리 파일에 removed_by_url과 removed_in_milestone 필드를 추가합니다.
  3. 이 변경을 뷰를 삭제하는 마이그레이션과 같은 커밋에 포함합니다.

샤딩 키 필드#

sharding_key와 desired_sharding_key 필드는 테이블에 샤딩 키를 추가하는 진행 상황을 추적합니다. 이 필드는 추적 용도로 사용되며, 도구가 샤딩 과정을 지원할 수 있게 해 줍니다.

  • sharding_key: 샤딩 키 칼럼에 데이터베이스에서 NOT NULL 제약 조건이 적용된 경우에만 이 필드를 사용합니다. 이는 테이블이 완전히 샤딩되어 조직 격리를 적용할 준비가 되었음을 뜻합니다.
  • desired_sharding_key: 샤딩 키 칼럼이 존재하지만 아직 NOT NULL 제약 조건이 없는 경우(예: 백필 진행 중)에 이 필드를 사용합니다. 테이블에 이 필드가 설정되어 있으면 백필을 더 쉽게 해 주는 도구를 사용할 수 있습니다. 백필이 끝나고 NOT NULL 제약 조건이 추가되면 desired_sharding_key를 sharding_key로 교체합니다.

테이블에 샤딩 키를 추가하는 자세한 방법은 샤딩 가이드라인을 참고합니다.

조직 이전 지원#

organization_id로 샤딩된 테이블은 사용자나 그룹을 조직 간에 이전할 때 올바르게 처리해야 합니다. 이전 지원 상태는 데이터베이스 딕셔너리와 별도로 config/organizations/transfer_support.yml 전용 레지스트리 파일에서 추적합니다.

상태 값과 테이블의 이전 지원을 등록하는 방법은 조직 샤딩 가이드를 참고합니다.