업로드 개발 가이드라인
GitLab에서 업로드를 처리하는 방식과 파일을 스토리지 대상으로 전송하는 주요 메커니즘에 대해 설명합니다.
업로드는 많은 GitLab 기능의 핵심 구성 요소입니다. GitLab이 업로드를 처리하는 방식을 이해하기 위해, 이 페이지에서는 파일을 스토리지 대상으로 전송하는 주요 메커니즘에 대한 개요를 제공합니다. GitLab 업로드는 기능별로 구성됩니다. 업로드와 관련된 모든 기능은 동일한 구성 옵션을 제공하지만, 각각 독립적으로 구성할 수 있습니다. 예를 들어, Git LFS 업로드는 CI/CD 빌드 아티팩트 업로드와 독립적으로 구성할 수 있지만, 두 기능 모두 동일한 설정 키 세트를 제공합니다. 이러한 설정은 업로드 처리 방식을 결정하며, 성능과 확장성에 큰 영향을 미칠 수 있습니다. 이 페이지는 파일 처리 방식을 결정하는 데 중요한 업로드 설정을 요약합니다. 이어지는 섹션에서는 각 메커니즘에 대해 더 자세히 설명합니다. 업로드 설정이 업로드 흐름을 결정하는 방식 # 개별 업로드 전략을 더 자세히 살펴보기 전에, 각 업로드 설정이 어떤 전략에 매핑되는지에 대한 상위 수준의 분류를 먼저 살펴보겠습니다. 업로드 설정 자체는 업로드 관리 에 문서화되어 있습니다. 여기서는 이러한 설정이 GitLab 업로드 로직의 내부를 어떻게 구동하는지에 초점을 맞춥니다. 최상위 수준에서, 업로드된 파일의 대상 은 두 가지로 구분됩니다: 로컬 스토리지 - 파일이 웹 서버 노드에 연결된 볼륨에 저장됩니다. 오브젝트 스토리지 - 파일이 원격 오브젝트 스토어 버킷에 저장됩니다. 이 표에서 x.y.z 는 gitlab.yml 을 통해 취하는 경로를 지정합니다: 설정 값 동작 .object_store.enabled false 파일이 .storage_path에 로컬로 저장됩니다 .object_store.enabled true 파일이 .object_store.remote_directory에 원격으로 저장됩니다 오브젝트 스토리지를 사용할 때, 관리자는 파일이 해당 버킷으로 이동되는 방법을 제어할 수 있습니다. 이 이동은 다음 방법 중 하나로 수행될 수 있습니다: Rails 컨트롤러 업로드 . 다이렉트 업로드 . 개별 Sidekiq 워커도 오브젝트 스토리지에 파일을 저장할 수 있지만, 이 내용은 여기서 다루지 않습니다. 마지막으로, Workhorse는 업로드 버퍼링 메커니즘을 사용하여 Rails 컨트롤러에서 느린 작업을 처리하지 않도록 대부분의 사용자 주도 업로드를 지원합니다. 이 메커니즘은 Workhorse 지원 업로드 에서 설명하며, 앞서 설명하는 내용과는 직교적으로 실행됩니다. 이제 각 케이스를 더 자세히 살펴보겠습니다. 로컬 스토리지 # 로컬 스토리지는 업로드가 취할 수 있는 가장 간단한 경로입니다. 이것이 GitLab 초기에 업로드를 처리하던 방식입니다. storage_path 에서 Rails 애플리케이션이 접근할 수 있는 스토리지 볼륨(디스크 또는 네트워크 연결 스토리지 등)이 있다고 가정합니다. 이 파일 경로는 Rails 루트 디렉터리에 대한 상대 경로이며, 다른 업로드 설정과 마찬가지로 기능별로 구성할 수 있습니다. 클라이언트가 파일 업로드를 전송하면, Workhors