그룹별 사용자 정의 프로젝트 템플릿 개발 가이드라인

이 문서는 기여자들이 그룹별 사용자 정의 프로젝트 템플릿의 코드 디자인을 이해하는 데 도움을 주기 위해 작성되었습니다. 이 기능의 코드를 수정하기 전에 이 문서를 읽어보시기 바랍니다.

이 문서는 의도적으로 코드는 자주 변경될 수 있기 때문에 코드의 설계 개요에 대한 내용에 초점을 맞추고 있습니다. 특정 부분의 기능이 어떻게 작동하는지 이해하려면 코드와 스펙을 확인하면 됩니다. 여기에는 템플릿 기능의 주요 구성 요소가 어떻게 작동하는지에 대한 내용이 설명되어 있습니다.

참고: 이 문서는 이 문서에서 언급된 코드 기반의 일부가 업데이트되거나 제거되거나 새로운 부분이 추가될 때 업데이트되어야 합니다.

기본 개요

그룹별 사용자 정의 프로젝트 템플릿은 일반 프로젝트로 내보내어 새롭게 생성된 프로젝트로 가져옵니다.

우리에게는 Group1이 있고 그 안에 Subgroup1이라는 템플릿 서브 그룹이 있는 상황이라고 가정해봅시다. Subgroup1 안에는 Template1이라는 프로젝트가 있습니다. User1Template1을 사용하여 Group1 내에서 Project1을 생성합니다. 이 때 로직은 다음 단계를 따릅니다:

  1. Project1을 초기화합니다.
  2. Template1을 내보냅니다.
  3. Project1로 가져옵니다.

비즈니스 로직

  • ProjectsController#create: 흐름이 시작되는 컨트롤러
    • app/controllers/projects_controller.rb에 정의됨
  • Projects::CreateService: 프로젝트 생성을 처리하는 서비스
    • app/services/projects/create_service.rb에 정의됨
  • EE::Projects::CreateService: 생성 서비스에 대한 EE 확장
    • ee/app/services/ee/projects/create_service.rb에 정의됨
  • Projects::CreateFromTemplateService: 사용자 정의 프로젝트 템플릿에서 프로젝트를 생성하는 서비스
    • app/services/projects/create_from_template_service.rb에 정의됨
  • EE:Projects::CreateFromTemplateService: 템플릿 서비스에 대한 EE 확장
    • ee/app/services/ee/projects/create_from_template_service.rb에 정의됨
  • Projects::GitlabProjectsImportService: 템플릿 가져오기를 처리하는 서비스
    • app/services/projects/gitlab_projects_import_service.rb에 정의됨
  • EE::Projects::GitlabProjectsImportService: 가져오기 서비스에 대한 EE 확장
    • ee/app/services/ee/projects/gitlab_projects_import_service.rb에 정의됨
  • ProjectTemplateExportWorker: 사용자 정의 템플릿 내보내기를 처리
    • ee/app/workers/project_template_export_worker.rb에 정의됨
  • ProjectExportWorker: ProjectTemplateExportWorker의 기본 클래스
    • app/workers/project_export_worker.rb에 정의됨
  • Projects::ImportExport::ExportService: 프로젝트를 내보내는 서비스
    • app/workers/project_export_worker.rb에 정의됨
  • Gitlab::ImportExport::VersionSaver: 버전을 내보내는 핸들러
    • lib/gitlab/import_export/version_saver.rb에 정의됨
  • Gitlab::ImportExport::UploadsManager: 업로드된 파일을 내보내는 핸들러
    • lib/gitlab/import_export/uploads_manager.rb에 정의됨
  • Gitlab::ImportExport::AvatarSaver: 아바타를 내보냄
    • lib/gitlab/import_export/avatar_saver.rb에 정의됨
  • Gitlab::ImportExport::Project::TreeSaver: 프로젝트와 관련된 객체를 내보냄
    • lib/gitlab/import_export/project/tree_saver.rb에 정의됨
  • EE:Gitlab::ImportExport::Project::TreeSaver: 프로젝트 및 관련된 객체를 내보냄
    • lib/gitlab/import_export/project/tree_saver.rb에 정의됨
  • Gitlab::ImportExport::Json::StreamingSerializer: 내보낸 객체를 JSON으로 직렬화
    • lib/gitlab/import_export/json/streaming_serializer.rb에 정의됨
  • Gitlab::ImportExport::Reader: 내보낸 JSON 파일을 감싸는 래퍼
    • lib/gitlab/import_export/reader.rb에 정의됨
  • Gitlab::ImportExport::AttributesFinder: 구성을 구문 분석하고 내보낸 JSON 파일에서 속성을 찾음
    • lib/gitlab/import_export/attributes_finder.rb에 정의됨
  • Gitlab::ImportExport::Config: 가져오기/내보내기 YAML 구성 파일을 감싸는 래퍼
    • lib/gitlab/import_export/config.rb에 정의됨
  • Gitlab::ImportExport: 편의 기능이 있는 진입점
    • lib/gitlab/import_export.rb에 정의됨
  • Gitlab::ImportExport::UploadsSaver: 업로드된 파일을 내보냄
    • lib/gitlab/import_export/uploads_saver.rb에 정의됨
  • Gitlab::ImportExport::RepoSaver: 저장소를 내보냄
    • lib/gitlab/import_export/repo_saver.rb에 정의됨
  • Gitlab::ImportExport::WikiRepoSaver: 위키 저장소를 내보냄
    • lib/gitlab/import_export/wiki_repo_saver.rb에 정의됨
  • EE:Gitlab::ImportExport::WikiRepoSaver: 위키 저장소 저장 기능을 확장
    • ee/lib/ee/gitlab/import_export/wiki_repo_saver.rb에 정의됨
  • Gitlab::ImportExport::LfsSaver: LFS 객체와 파일을 내보냄
    • lib/gitlab/import_export/lfs_saver.rb에 정의됨
  • Gitlab::ImportExport::SnippetsRepoSaver: 스니펫 저장소를 내보냄
    • lib/gitlab/import_export/snippet_repo_saver.rb에 정의됨
  • Gitlab::ImportExport::DesignRepoSaver: 디자인 저장소를 내보냄
    • lib/gitlab/import_export/design_repo_saver.rb에 정의됨
  • Gitlab::ImportExport::Error: 사용자 지정 오류 개체
    • lib/gitlab/import_export/error.rb에 정의됨
  • Gitlab::ImportExport::AfterExportStrategyBuilder: 내보내기가 완료된 후 실행되는 콜백으로 작용
    • lib/gitlab/import_export/after_export_strategy_builder.rb에 정의됨
  • Gitlab::Export::Logger: 내보내기 중에 사용되는 로거
    • lib/gitlab/export/logger.rb에 정의됨
  • Gitlab::ImportExport::LogUtil: 로그 메시지를 생성
    • lib/gitlab/import_export/log_util.rb에 정의됨
  • Gitlab::ImportExport::AfterExportStrategies::CustomTemplateExportImportStrategy: 내보낸 후 템플릿을 가져오는 콜백 클래스
    • ee/lib/ee/gitlab/import_export/after_export_strategies/custom_template_export_import_strategy.rb에 정의됨
  • Gitlab::TemplateHelper: 템플릿 가져오기를 위한 헬퍼
    • lib/gitlab/template_helper.rb에 정의됨
  • ImportExportUpload: 가져오기 및 내보내기 아카이브 파일을 저장
    • app/models/import_export_upload.rb에 정의됨
  • Gitlab::ImportExport::AfterExportStrategies::BaseAfterExportStrategy: 기본 내보낸 후 전략
    • lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb에 정의됨
  • RepositoryImportWorker: 가져오기 단계를 트리거하는 워커
    • app/workers/repository_import_worker.rb에 정의됨
  • EE::RepositoryImportWorker: 저장소 가져오기 워커 확장
    • ee/app/workers/ee/repository_import_worker.rb에 정의됨
  • Projects::ImportService: 가져오기 단계를 실행
    • app/services/projects/import_service.rb에 정의됨
  • EE:Projects::ImportService: 가져오기 서비스 확장
    • ee/app/services/ee/projects/import_service.rb에 정의됨
  • Projects::LfsPointers::LfsImportService: LFS 객체를 가져옴
    • app/services/projects/lfs_pointers/lfs_import_service.rb에 정의됨
  • Projects::LfsPointers::LfsObjectDownloadListService: LFS 객체를 다운로드할 링크를 요청하는 메인 서비스
    • app/services/projects/lfs_pointers/lfs_object_download_list_service.rb에 정의됨
  • Projects::LfsPointers::LfsDownloadLinkListService: 일괄적으로 링크를 요청 및 목록을 작성하는 서비스
    • app/services/projects/lfs_pointers/lfs_download_link_list_service.rb에 정의됨
  • Projects::LfsPointers::LfsListService: LFS 블롭 포인터를 검색
    • app/services/projects/lfs_pointers/lfs_list_service.rb에 정의됨
  • Projects::LfsPointers::LfsDownloadService: LFS 객체를 다운로드하고 링크
    • app/services/projects/lfs_pointers/lfs_download_service.rb에 정의됨
  • Gitlab::ImportSources: 사용할 가져오기 설정하는 모듈
    • lib/gitlab/import_sources.rb에 정의됨
  • EE::Gitlab::ImportSources: 가져오기 소스 확장
    • ee/lib/ee/gitlab/import_sources.rb에 정의됨
  • Gitlab::ImportExport::Importer: 가져오기 클래스
    • lib/gitlab/import_export/importer.rb에 정의됨
  • EE::Gitlab::ImportExport::Importer: 가져오기 확장
    • ee/lib/ee/gitlab/import_export/importer.rb에 정의됨
  • Gitlab::ImportExport::FileImporter: 아카이브 파일 가져오기
    • lib/gitlab/import_export/file_importer.rb에 정의됨
  • Gitlab::ImportExport::DecompressedArchiveSizeValidator: 아카이브 파일 크기 유효성 검사
    • lib/gitlab/import_export/decompressed_archive_size_validator.rb에 정의됨
  • Gitlab::ImportExport::VersionChecker: 내보낸 버전을 가져오기 버전과 비교
    • lib/gitlab/import_export/version_checker.rb에 정의됨
  • Gitlab::ImportExport::Project::TreeRestorer: 프로젝트와 관련된 객체를 가져오기 핸들링
    • lib/gitlab/import_export/project/tree_restorer.rb에 정의됨
  • Gitlab::ImportExport::Json::NdjsonReader: JSON 내보내기 파일을 위한 리더
    • lib/gitlab/import_export/json/ndjson_reader.rb에 정의됨
  • Gitlab::ImportExport::AvatarRestorer: 아바타 파일 가져오기 핸들링
    • lib/gitlab/import_export/avatar_restorer.rb에 정의됨
  • Gitlab::ImportExport::RepoRestorer: 저장소 가져오기 핸들링
    • lib/gitlab/import_export/repo_restorer.rb에 정의됨
  • EE:Gitlab::ImportExport::RepoRestorer: 저장소 가져오기 확장
    • ee/lib/ee/gitlab/import_export/repo_restorer.rb에 정의됨
  • Gitlab::ImportExport::DesignRepoRestorer: 디자인 저장소 가져오기 핸들링
    • lib/gitlab/import_export/design_repo_restorer.rb에 정의됨
  • Gitlab::ImportExport::UploadsRestorer: 업로드된 파일 가져오기 핸들링
    • lib/gitlab/import_export/uploads_restorer.rb에 정의됨
  • Gitlab::ImportExport::LfsRestorer: LFS 객체 가져오기
    • lib/gitlab/import_export/lfs_restorer.rb에 정의됨
  • Gitlab::ImportExport::SnippetsRepoRestorer: 스니펫 저장소 가져오기 핸들링
    • lib/gitlab/import_export/snippets_repo_restorer.rb에 정의됨
  • Gitlab::ImportExport::SnippetRepoRestorer: 개별 스니펫 가져오기 핸들링
    • lib/gitlab/import_export/snippet_repo_restorer.rb에 정의됨
  • Snippets::RepositoryValidationService: 스니펫 저장소 아카이브 유효성 검사
    • app/services/snippets/repository_validation_service.rb에 정의됨
  • Snippets::UpdateStatisticsService: 스니펫 저장소에 대한 통계 업데이트
    • app/services/snippets/update_statistics_service.rb에 정의됨
  • Gitlab::BackgroundMigration::BackfillSnippetRepositories: 해시화된 저장소에서 누락된 스니펫 추가
    • lib/gitlab/background_migration/backfill_snippet_repositories.rb에 정의됨
  • Gitlab::ImportExport::StatisticsRestorer: 프로젝트 통계 새로 고침
    • lib/gitlab/import_export/importer.rb에 정의됨
  • Gitlab::ImportExport::Project::CustomTemplateRestorer: 사용자 정의 템플릿에 대한 추가 가져오기 처리
    • ee/lib/gitlab/import_export/project/custom_template_restorer.rb에 정의됨
  • Gitlab::ImportExport::Project::ProjectHooksRestorer: 프로젝트 훅 가져오기 처리
    • ee/lib/gitlab/import_export/project/project_hooks_restorer.rb에 정의됨
  • Gitlab::ImportExport::Project::DeployKeysRestorer: 배포 키 가져오기 처리
    • ee/lib/gitlab/import_export/project/deploy_keys_restorer.rb에 정의됨
  • Gitlab::ImportExport::Project::CustomTemplateRestorerHelper: 사용자 정의 템플릿 복원기에 대한 도우미
    • ee/lib/gitlab/import_export/project/custom_template_restorer_helper.rb에 정의됨