이미지 스케일링 가이드
GitLab 이미지 스케일러의 작동 방식과 이미지가 언제, 어디서, 어떻게 스케일링되는지를 설명합니다.
이 섹션은 GitLab 이미지 스케일러와 그 사용 방법에 대한 간략한 개요를 담고 있습니다. GitLab의 이미지 스케일링 역사에 대한 일반적인 소개는 이 Unfiltered 블로그 포스트 를 참고하세요. 왜 이미지 스케일링인가? # 버전 13.6부터 GitLab은 페이지 데이터 용량을 줄이기 위해 요청 시 이미지를 축소합니다. 이는 "네트워크 전송 데이터"의 양을 줄일 뿐만 아니라, 브라우저가 처리해야 할 작업이 줄어들기 때문에 렌더링 성능 향상에도 도움이 됩니다. 언제 이미지를 스케일링하는가? # 일반적으로 이미지 스케일러는 클라이언트가 쿼리 스트링에 width 파라미터를 추가하여 이미지 리소스를 요청할 때 트리거됩니다. 그러나 특정 종류 및 포맷의 이미지만 스케일링합니다. 이미지를 리스케일 허용할지 여부는 하드코딩된 규칙과 구성 설정의 조합으로 결정됩니다. 하드코딩된 규칙은 다음만 허용합니다: 프로젝트, 그룹 및 사용자 아바타 PNG 또는 JPEG 이미지 특정 크기 또한 Workhorse의 구성으로 인해 다음 경우 이미지 스케일러가 요청을 거부할 수 있습니다: 이미지 파일이 너무 큰 경우 ( max_filesize 로 제어, 설정된 크기(바이트)를 초과하지 않는 이미지만 리스케일합니다. max_filesize 참조). 이미 너무 많은 이미지 스케일러가 실행 중인 경우 ( max_scaler_procs 로 제어). 예를 들어, 다음은 GitLab 프로젝트 아바타를 원본 크기와 64픽셀로 축소한 크기로 각각 제공하는 두 가지 URL입니다. 두 번째 요청만 이미지 스케일러를 트리거합니다: https://gitlab.com/gitlab-com/www-gitlab-com/-/blob/master/source/images/gitlab-logo-extra-whitespace.png https://gitlab.com/gitlab-com/www-gitlab-com/-/blob/master/source/images/gitlab-logo-extra-whitespace.png?width=64 어디서 이미지를 스케일링하는가? # Rails와 Workhorse는 현재 이미지 리스케일을 위해 협력합니다. 이는 GitLab의 일반적인 구현 및 성능 패턴입니다: 요청 인증 및 유효성 검사와 같은 중요한 비즈니스 로직은 Rails에서 처리하고, "무거운 작업"인 스케일링 및 바이너리 데이터 제공은 Workhorse에서 처리합니다. 전체 요청 흐름은 다음과 같습니다: sequenceDiagram Client->>+Workhorse: GET /uploads/-/system/project/avatar/278964/logo-extra-whitespace.png?width=64 Workhorse->>+Rails: forward request Rails->>+Rails: validate request Rails->>+Rails: resolve image location Rails-->>-Workhorse: Gitlab-Workhorse-Send-Data: send-scale