InfoGrab DocsInfoGrab Docs

GitLab.com 속도 제한

요약

GitLab.com에는 다음 속도 제한이 적용됩니다. GitLab Self-Managed 및 GitLab Dedicated 인스턴스에는 인스턴스 운영자가 제어하는 자체 제한이 있습니다. 이 절의 제한은 제안된 것이며 아직 적용되지 않았습니다.

GitLab.com에는 다음 속도 제한이 적용됩니다.

GitLab Self-Managed 및 GitLab Dedicated 인스턴스에는 인스턴스 운영자가 제어하는 자체 제한이 있습니다. GitLab.com을 사용하지 않는 경우 대신 속도 제한 또는 인증된 사용자 속도 제한을 참고합니다.

플랜별 속도 제한#

Note

이 절의 제한은 제안된 것이며 아직 적용되지 않았습니다. 현재 속도 제한의 제한은 지금 적용되고 있으며, 이 변경 사항이 적용된 뒤에도 계속 적용됩니다. GitLab은 구체적인 날짜를 미리 공지합니다. 제한이 적용되기 전에 GitLab은 예약된 브라운아웃(brownout) 기간을 운영하며, 이 기간에는 새 제한이 잠시 활성화되어 새 제한이 워크로드에 미치는 영향을 확인할 수 있습니다.

속도 제한은 티어를 인식하는 방식으로 바뀌고 있습니다. 모든 사용자에게 하나의 숫자를 적용하는 대신, 제한은 사용자의 플랜을 반영하며 사용자별로 적용됩니다. 인증된 요청은 해당 플랜의 전체 허용량을 받습니다. 익명 요청은 유사한 플랫폼과 비슷하게 훨씬 낮은 허용량을 받습니다.

각 플랜에는 인증된 트래픽에 대한 두 가지 제한이 있으며, 지속 제한이 우선합니다.

  • 시간당 측정하는 지속 제한. 이 숫자를 기준으로 사용량을 계획합니다.
  • 분당 측정하는 버스트 제한. 짧은 급증이 시간당 허용량 전체를 한꺼번에 소모하지 않도록 GitLab이 이 기본값을 설정합니다.

꾸준한 작업에서는 지속 제한에 먼저 도달합니다. 버스트 제한으로 요청을 한 시간 내내 보내면 모든 플랜에서 지속 제한을 초과합니다. 버스트 제한은 짧은 급증을 위한 상한선으로 보고, 유지할 수 있는 속도로 보지 않습니다.

버스트 제한으로 요청을 보내면 Free에서는 약 50분, Premium에서는 12분, Ultimate에서는 12.5분 만에 지속 제한에 도달합니다.

이 제한은 API 요청, 웹 요청, 인증된 Git over HTTPS 요청에 적용됩니다. Git clone, fetch, push는 각각 요청 한 건으로 계산하며, Git LFS 전송도 마찬가지입니다. 일부 인증되지 않은 요청은 IP 주소당 시간당 60개 요청이라는 인증되지 않은 요청 제한에 포함되지 않습니다.

이러한 요청에는 계속 현재 제한이 적용됩니다. GitLab for Slack 앱에는 IP 주소당 시간당 1,000개 요청과 분당 100개 요청이라는 자체 제한도 있습니다.

지속 제한#

속도 제한 Free Premium Ultimate
사용자의 인증된 트래픽 시간당 5,000개 시간당 15,000개 시간당 25,000개
IP 주소의 인증되지 않은 트래픽 시간당 60개 시간당 60개 시간당 60개

버스트 제한#

속도 제한 Free Premium Ultimate
사용자의 인증된 트래픽 분당 100개 분당 1,250개 분당 2,000개

제한을 초과한 경우#

요청이 속도 제한에 걸리면 GitLab은 429 Too Many Requests 상태 코드로 응답합니다. 요청을 다시 시도하기 전에 기다립니다.

제한된 요청에 대한 응답에는 할당량이 초기화될 때까지 남은 시간을 초 단위로 알려 주는 Retry-After 헤더와, 같은 정보를 날짜와 시간으로 나타내는 RateLimit-ResetTime 헤더가 포함됩니다. 프로젝트 및 그룹 생성 제한은 기간이 24시간이므로 Retry-After가 최대 86,400초일 수 있습니다. 제한되었는지 여부와 관계없이 모든 응답에는 RateLimit-Limit, RateLimit-Remaining 및 관련 헤더가 포함되며, 제한에 도달하기 전에 사용량을 추적하는 데 사용할 수 있습니다. 전체 목록은 응답 헤더를 참고합니다.

제한을 올바르게 처리하려면 다음을 수행합니다.

  • 다시 시도하기 전에 Retry-After에 지정된 시간 동안 기다립니다.
  • 계속 제한되면 지수적으로 백오프합니다.
  • RateLimit-Remaining을 모니터링하고 할당량이 소진되기 전에 속도를 줄입니다.

Projects, Groups, Users API에 대한 속도 제한 응답에는 정보 헤더가 포함되지 않습니다. 응답 헤더는 일부 다른 제한도 반영하지 않으므로, 이전 응답의 헤더에 남은 할당량이 표시되었더라도 429 응답을 받을 수 있습니다.

더 많은 여유분이 필요한 경우#

제한에 정기적으로 도달한다면 부담이 가장 적은 방법부터 큰 방법까지 여러 선택지가 있습니다.

  1. API 사용 방식을 최적화합니다. 요청을 일괄 처리하고, 응답을 캐시하고, 페이지 매김을 사용하고, Retry-After 헤더를 따릅니다. 대부분의 사용량은 제한 아래에 머뭅니다.
  2. 요청을 인증합니다. 익명 트래픽은 가장 낮은 허용량을 받습니다. 개인 액세스 토큰, OAuth 토큰 또는 CI/CD 작업 토큰으로 인증하면 해당 플랜의 전체 제한을 받습니다.
  3. 플랜을 업그레이드합니다. Premium과 Ultimate는 더 높은 제한을 제공합니다.

플랜 제한을 넘는 지속적인 요구에 대해서는 추가 여유분을 구매하는 옵션이 설계 중입니다. 자세한 내용은 제공 시점이 가까워지면 게시됩니다.

현재 속도 제한#

이 제한은 현재 GitLab.com에서 적용되고 있으며, 플랜별 속도 제한이 도입된 뒤에도 계속 적용됩니다.

GitLab은 먼저 플랜의 제한을 확인한 다음 이 표의 제한을 확인합니다. 둘 중 더 낮은 제한이 적용됩니다. 이 표의 제한이 플랜의 제한보다 낮을 수 있으므로 이 표의 제한에 먼저 도달할 수 있습니다.

예를 들어 사용자의 인증된 API 트래픽은 분당 2,000개 요청으로 제한됩니다. Free와 Premium에서는 플랜의 버스트 제한이 더 낮으므로 그 제한에 먼저 도달합니다. Ultimate에서는 버스트 제한도 분당 2,000개 요청이므로 두 제한이 같습니다.

속도 제한 설정
IP 주소의 보호된 경로 분당 요청 10개
IP 주소의 로그인 시도(POST /users/sign_in) 5분당 요청 10개
프로젝트, 커밋 또는 파일 경로의 Raw 엔드포인트 트래픽 분당 요청 300개
프로젝트의 인증되지 않은 Raw 엔드포인트 트래픽 분당 요청 800개
IP 주소의 인증되지 않은 트래픽 분당 요청 500개
사용자의 인증된 API 트래픽 분당 요청 2,000개
사용자의 인증된 비 API HTTP 트래픽 분당 요청 1,000개
사용자의 인증된 Git HTTPS 트래픽 분당 요청 10,000개
IP 주소의 인증되지 않은 Git HTTPS 트래픽 분당 요청 15,000개
사용자, 프로젝트, Git 명령별 Git SSH 작업 분당 작업 600개
IP 주소의 모든 트래픽 분당 요청 2,000개
이슈 생성 분당 요청 200개
사용자의 프로젝트 생성(POST /api/v4/projects 및 UI) 일당 요청 200개
사용자의 그룹 생성(POST /api/v4/groups 및 UI) 일당 요청 200개
이슈 및 머지 리퀘스트의 노트 생성 분당 요청 60개
IP 주소의 고급, 프로젝트 또는 그룹 검색 API 분당 요청 100개
사용자의 고급, 프로젝트 또는 그룹 검색 API 분당 요청 100개
IP 주소의 GitLab Pages 요청 50초당 요청 1,000개
GitLab Pages 도메인의 GitLab Pages 요청 10초당 요청 5,000개
IP 주소의 GitLab Pages TLS 연결 50초당 요청 1,000개
GitLab Pages 도메인의 GitLab Pages TLS 연결 10초당 요청 400개
프로젝트, 사용자 또는 커밋의 파이프라인 생성 요청 분당 요청 25개
사용자의 파이프라인 생성 요청 분당 요청 2,000개
프로젝트의 알림 통합 엔드포인트 요청 시간당 요청 3,600개
GitLab Duo aiAction 요청 8시간당 요청 160개
풀 미러링 간격 5분
사용자의 /api/v4/users/:id API 요청 10분당 요청 300개
IP 주소의 GitLab 패키지 호스팅 시스템 요청 분당 요청 1,000개
IP 주소 및 최상위 그룹의 가상 레지스트리 요청 15초당 요청 4,000개
IP 주소의 거부된 가상 레지스트리 패키지 요청 15초당 요청 4,000개
IP 주소 및 파일 경로의 리포지터리 파일 API 요청(GET /api/v4/projects/:id/repository/files/*) 분당 요청 500개
사용자 팔로워 요청(/api/v4/users/:id/followers) 분당 요청 100개
사용자 팔로잉 요청(/api/v4/users/:id/following) 분당 요청 100개
사용자 상태 요청(/api/v4/users/:user_id/status) 분당 요청 240개
사용자 SSH 키 요청(/api/v4/users/:user_id/keys) 분당 요청 120개
단일 SSH 키 요청(/api/v4/users/:id/keys/:key_id) 분당 요청 120개
사용자 GPG 키 요청(/api/v4/users/:id/gpg_keys) 분당 요청 120개
단일 GPG 키 요청(/api/v4/users/:id/gpg_keys/:key_id) 분당 요청 120개
사용자 프로젝트 요청(/api/v4/users/:user_id/projects) 분당 요청 300개
사용자 기여 프로젝트 요청(/api/v4/users/:user_id/contributed_projects) 분당 요청 100개
사용자 별표 프로젝트 요청(/api/v4/users/:user_id/starred_projects) 분당 요청 100개
프로젝트 목록 요청(/api/v4/projects) 10분당 요청 2,000개
IP 주소의 인증되지 않은 프로젝트 목록 요청(/api/v4/projects) 10분당 요청 400개
그룹 프로젝트 요청(/api/v4/groups/:id/projects) 분당 요청 600개
단일 프로젝트 요청(/api/v4/projects/:id) 분당 요청 400개
그룹 목록 요청(/api/v4/groups) 분당 요청 50개
단일 그룹 요청(/api/v4/groups/:id) 분당 요청 400개
러너 토큰을 사용한 러너 작업 요청(/api/v4/jobs/request) 분당 요청 2,000개
IP 주소에서 러너 토큰을 사용한 러너 작업 요청(/api/v4/jobs/request) 분당 요청 2,400개
작업 토큰을 사용한 러너 작업 트레이스 패치 요청(/api/v4/jobs/trace) 분당 요청 200개
작업 토큰을 사용한 러너 작업 요청(/api/v4/jobs/*) 분당 요청 200개
프로젝트의 모든 프로젝트 멤버 나열 분당 요청 200개

보호된 경로와 Raw 엔드포인트의 속도 제한에 대한 자세한 내용을 확인할 수 있습니다.

GitLab은 여러 계층에서 요청의 속도를 제한할 수 있습니다. 이 제한은 IP 주소별로 가장 엄격한 제한입니다.

가상 레지스트리 속도 제한#

히스토리
  • GitLab 17.11에서 도입되었습니다.
  • GitLab 18.11에서 기본 제한이 15초당 요청 1,000개에서 4,000개로 변경되었습니다.
  • GitLab 19.5에서 virtual_registries_skip_authenticated_throttles라는 플래그와 함께 액세스 검사에 실패한 요청에 대한 속도 제한이 도입되었습니다. 기본적으로 비활성화되어 있습니다.

가상 레지스트리는 Maven 같은 패키지 요청에 전용 속도 제한을 적용합니다. 요청이 어떤 속도 제한에 포함되는지는 요청이 액세스 검사를 통과하는지 여부에 따라 달라집니다.

요청 속도 제한 속도 제한 범위
액세스 검사를 통과한 요청 15초당 요청 4,000개 IP 주소 및 최상위 그룹
액세스 검사에 실패한 요청 15초당 요청 4,000개 IP 주소

다음 경우 요청이 액세스 검사에 실패합니다.

  • 레지스트리 ID가 존재하지 않습니다.
  • 자격 증명이 없거나 유효하지 않습니다.
  • 사용자에게 레지스트리에 대한 액세스 권한이 없습니다.

인증된 가상 레지스트리 패키지 요청은 사용자의 인증된 API 트래픽 제한이나 플랜별 속도 제한에 포함되지 않습니다. 대신 가상 레지스트리 속도 제한이 적용됩니다.

사용자별 제외와 액세스 검사에 실패한 요청에 대한 제한은 패키지 요청에만 적용되며 컨테이너 가상 레지스트리 요청에는 적용되지 않습니다.

두 제한 중 하나를 넘으면 GitLab은 429 Too Many Requests 오류를 반환합니다. 보호된 경로 스로틀은 계속 적용됩니다.

서비스 데스크 이메일 속도 제한#

GitLab.com은 최상위 그룹이 시간당, 일당 보낼 수 있는 서비스 데스크 발신 알림 이메일 수를 플랜별로 제한합니다.

플랜 시간당 제한 일당 제한
Free, Premium 체험판, Ultimate 체험판 100 700
오픈 소스 1,500 10,000
Premium 5,000 50,000
Ultimate, Ultimate 체험판 유료 고객 무제한 무제한

자세한 내용은 서비스 데스크 이메일 속도 제한을 참고합니다.

내보내기 파일 업로드를 통한 그룹 및 프로젝트 가져오기#

남용을 막기 위해 GitLab.com은 다음에 속도 제한을 적용합니다.

  • 프로젝트 및 그룹 가져오기.
  • 파일을 사용하는 그룹 및 프로젝트 내보내기.
  • 내보내기 다운로드.

자세한 내용은 다음을 참고합니다.

IP 차단#

GitLab.com이 단일 IP 주소로부터 시스템이 악의적일 가능성이 있다고 판단하는 비정상적인 트래픽을 받으면 IP 차단이 발생할 수 있습니다. 이러한 차단은 속도 제한 설정에 기반할 수 있습니다. 비정상적인 트래픽이 멈추면 GitLab은 해당 IP 주소를 자동으로 해제합니다. 해제 시점은 다음 절에서 설명하는 것처럼 차단 유형에 따라 다릅니다.

GitLab.com에 대한 모든 요청에서 403 Forbidden 오류를 받는다면 차단을 유발했을 수 있는 자동화된 프로세스가 있는지 확인합니다. 도움이 필요하면 영향받은 IP 주소 같은 세부 정보와 함께 GitLab 지원에 문의합니다.

Git 및 컨테이너 레지스트리 인증 실패 차단#

단일 IP 주소가 1분 동안 인증 실패 요청을 300개 보내면 GitLab.com은 15분 동안 403 Forbidden 상태 코드로 응답합니다.

이 응답은 Git 요청과 컨테이너 레지스트리(/jwt/auth) 요청(합산)에만 적용됩니다.

이 제한은 다음과 같습니다.

  • 인증에 성공한 요청으로 초기화됩니다. 예를 들어 인증 실패 요청 299개 다음에 성공한 요청 하나, 그 다음에 인증 실패 요청 299개가 더 오더라도 차단이 발생하지 않습니다.
  • gitlab-ci-token으로 인증된 JWT 요청에는 적용되지 않습니다.

응답 헤더는 제공되지 않습니다.

HTTPS를 통한 Git 요청은 항상 인증되지 않은 요청을 먼저 보내며, 프라이빗 리포지터리에서는 이 요청이 401 Unauthorized 오류를 반환합니다. 그다음 Git은 사용 가능한 경우 사용자 이름, 비밀번호 또는 액세스 토큰으로 인증된 요청을 시도합니다. 이러한 요청이 동시에 너무 많이 전송되면 일시적인 IP 차단이 발생할 수 있습니다. 이 문제를 해결하려면 SSH 키로 GitLab과 통신합니다.

구성할 수 없는 제한#

GitLab.com에서 사용하는 구성할 수 없는 속도 제한에 대한 자세한 내용은 구성할 수 없는 제한을 참고합니다.

페이지 매김 응답 헤더#

성능상의 이유로 쿼리가 10,000개를 넘는 레코드를 반환하면 GitLab은 일부 헤더를 제외합니다.

보호된 경로 스로틀#

같은 IP 주소가 보호된 경로로 1분에 POST 요청을 10개보다 많이 보내면 GitLab.com은 429 Too Many Requests 상태 코드를 반환합니다.

보호된 경로에는 사용자 생성, 사용자 확인, 사용자 로그인, 비밀번호 재설정이 포함됩니다. 전체 목록은 보호된 경로를 참고합니다.

차단된 요청에 GitLab이 포함하는 헤더는 사용자 및 IP 속도 제한을 참고합니다.

SSH 최대 연결 수#

GitLab.com은 MaxStartups 설정을 사용해 동시에 인증되지 않은 SSH 연결의 최대 수를 정의합니다. 허용된 최대 연결 수보다 많은 연결이 동시에 발생하면 GitLab은 초과 연결을 끊습니다. 그러면 사용자는 ssh_exchange_identification 오류를 받습니다.

관련 주제#

GitLab.com 속도 제한

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com
원문 보기

요약

GitLab.com에는 다음 속도 제한이 적용됩니다. GitLab Self-Managed 및 GitLab Dedicated 인스턴스에는 인스턴스 운영자가 제어하는 자체 제한이 있습니다. 이 절의 제한은 제안된 것이며 아직 적용되지 않았습니다.

GitLab.com에는 다음 속도 제한이 적용됩니다.

GitLab Self-Managed 및 GitLab Dedicated 인스턴스에는 인스턴스 운영자가 제어하는 자체 제한이 있습니다. GitLab.com을 사용하지 않는 경우 대신 속도 제한 또는 인증된 사용자 속도 제한을 참고합니다.

플랜별 속도 제한#

Note

이 절의 제한은 제안된 것이며 아직 적용되지 않았습니다. 현재 속도 제한의 제한은 지금 적용되고 있으며, 이 변경 사항이 적용된 뒤에도 계속 적용됩니다. GitLab은 구체적인 날짜를 미리 공지합니다. 제한이 적용되기 전에 GitLab은 예약된 브라운아웃(brownout) 기간을 운영하며, 이 기간에는 새 제한이 잠시 활성화되어 새 제한이 워크로드에 미치는 영향을 확인할 수 있습니다.

속도 제한은 티어를 인식하는 방식으로 바뀌고 있습니다. 모든 사용자에게 하나의 숫자를 적용하는 대신, 제한은 사용자의 플랜을 반영하며 사용자별로 적용됩니다. 인증된 요청은 해당 플랜의 전체 허용량을 받습니다. 익명 요청은 유사한 플랫폼과 비슷하게 훨씬 낮은 허용량을 받습니다.

각 플랜에는 인증된 트래픽에 대한 두 가지 제한이 있으며, 지속 제한이 우선합니다.

  • 시간당 측정하는 지속 제한. 이 숫자를 기준으로 사용량을 계획합니다.
  • 분당 측정하는 버스트 제한. 짧은 급증이 시간당 허용량 전체를 한꺼번에 소모하지 않도록 GitLab이 이 기본값을 설정합니다.

꾸준한 작업에서는 지속 제한에 먼저 도달합니다. 버스트 제한으로 요청을 한 시간 내내 보내면 모든 플랜에서 지속 제한을 초과합니다. 버스트 제한은 짧은 급증을 위한 상한선으로 보고, 유지할 수 있는 속도로 보지 않습니다.

버스트 제한으로 요청을 보내면 Free에서는 약 50분, Premium에서는 12분, Ultimate에서는 12.5분 만에 지속 제한에 도달합니다.

이 제한은 API 요청, 웹 요청, 인증된 Git over HTTPS 요청에 적용됩니다. Git clone, fetch, push는 각각 요청 한 건으로 계산하며, Git LFS 전송도 마찬가지입니다. 일부 인증되지 않은 요청은 IP 주소당 시간당 60개 요청이라는 인증되지 않은 요청 제한에 포함되지 않습니다.

이러한 요청에는 계속 현재 제한이 적용됩니다. GitLab for Slack 앱에는 IP 주소당 시간당 1,000개 요청과 분당 100개 요청이라는 자체 제한도 있습니다.

지속 제한#

속도 제한 Free Premium Ultimate
사용자의 인증된 트래픽 시간당 5,000개 시간당 15,000개 시간당 25,000개
IP 주소의 인증되지 않은 트래픽 시간당 60개 시간당 60개 시간당 60개

버스트 제한#

속도 제한 Free Premium Ultimate
사용자의 인증된 트래픽 분당 100개 분당 1,250개 분당 2,000개

제한을 초과한 경우#

요청이 속도 제한에 걸리면 GitLab은 429 Too Many Requests 상태 코드로 응답합니다. 요청을 다시 시도하기 전에 기다립니다.

제한된 요청에 대한 응답에는 할당량이 초기화될 때까지 남은 시간을 초 단위로 알려 주는 Retry-After 헤더와, 같은 정보를 날짜와 시간으로 나타내는 RateLimit-ResetTime 헤더가 포함됩니다. 프로젝트 및 그룹 생성 제한은 기간이 24시간이므로 Retry-After가 최대 86,400초일 수 있습니다. 제한되었는지 여부와 관계없이 모든 응답에는 RateLimit-Limit, RateLimit-Remaining 및 관련 헤더가 포함되며, 제한에 도달하기 전에 사용량을 추적하는 데 사용할 수 있습니다. 전체 목록은 응답 헤더를 참고합니다.

제한을 올바르게 처리하려면 다음을 수행합니다.

  • 다시 시도하기 전에 Retry-After에 지정된 시간 동안 기다립니다.
  • 계속 제한되면 지수적으로 백오프합니다.
  • RateLimit-Remaining을 모니터링하고 할당량이 소진되기 전에 속도를 줄입니다.

Projects, Groups, Users API에 대한 속도 제한 응답에는 정보 헤더가 포함되지 않습니다. 응답 헤더는 일부 다른 제한도 반영하지 않으므로, 이전 응답의 헤더에 남은 할당량이 표시되었더라도 429 응답을 받을 수 있습니다.

더 많은 여유분이 필요한 경우#

제한에 정기적으로 도달한다면 부담이 가장 적은 방법부터 큰 방법까지 여러 선택지가 있습니다.

  1. API 사용 방식을 최적화합니다. 요청을 일괄 처리하고, 응답을 캐시하고, 페이지 매김을 사용하고, Retry-After 헤더를 따릅니다. 대부분의 사용량은 제한 아래에 머뭅니다.
  2. 요청을 인증합니다. 익명 트래픽은 가장 낮은 허용량을 받습니다. 개인 액세스 토큰, OAuth 토큰 또는 CI/CD 작업 토큰으로 인증하면 해당 플랜의 전체 제한을 받습니다.
  3. 플랜을 업그레이드합니다. Premium과 Ultimate는 더 높은 제한을 제공합니다.

플랜 제한을 넘는 지속적인 요구에 대해서는 추가 여유분을 구매하는 옵션이 설계 중입니다. 자세한 내용은 제공 시점이 가까워지면 게시됩니다.

현재 속도 제한#

이 제한은 현재 GitLab.com에서 적용되고 있으며, 플랜별 속도 제한이 도입된 뒤에도 계속 적용됩니다.

GitLab은 먼저 플랜의 제한을 확인한 다음 이 표의 제한을 확인합니다. 둘 중 더 낮은 제한이 적용됩니다. 이 표의 제한이 플랜의 제한보다 낮을 수 있으므로 이 표의 제한에 먼저 도달할 수 있습니다.

예를 들어 사용자의 인증된 API 트래픽은 분당 2,000개 요청으로 제한됩니다. Free와 Premium에서는 플랜의 버스트 제한이 더 낮으므로 그 제한에 먼저 도달합니다. Ultimate에서는 버스트 제한도 분당 2,000개 요청이므로 두 제한이 같습니다.

속도 제한 설정
IP 주소의 보호된 경로 분당 요청 10개
IP 주소의 로그인 시도(POST /users/sign_in) 5분당 요청 10개
프로젝트, 커밋 또는 파일 경로의 Raw 엔드포인트 트래픽 분당 요청 300개
프로젝트의 인증되지 않은 Raw 엔드포인트 트래픽 분당 요청 800개
IP 주소의 인증되지 않은 트래픽 분당 요청 500개
사용자의 인증된 API 트래픽 분당 요청 2,000개
사용자의 인증된 비 API HTTP 트래픽 분당 요청 1,000개
사용자의 인증된 Git HTTPS 트래픽 분당 요청 10,000개
IP 주소의 인증되지 않은 Git HTTPS 트래픽 분당 요청 15,000개
사용자, 프로젝트, Git 명령별 Git SSH 작업 분당 작업 600개
IP 주소의 모든 트래픽 분당 요청 2,000개
이슈 생성 분당 요청 200개
사용자의 프로젝트 생성(POST /api/v4/projects 및 UI) 일당 요청 200개
사용자의 그룹 생성(POST /api/v4/groups 및 UI) 일당 요청 200개
이슈 및 머지 리퀘스트의 노트 생성 분당 요청 60개
IP 주소의 고급, 프로젝트 또는 그룹 검색 API 분당 요청 100개
사용자의 고급, 프로젝트 또는 그룹 검색 API 분당 요청 100개
IP 주소의 GitLab Pages 요청 50초당 요청 1,000개
GitLab Pages 도메인의 GitLab Pages 요청 10초당 요청 5,000개
IP 주소의 GitLab Pages TLS 연결 50초당 요청 1,000개
GitLab Pages 도메인의 GitLab Pages TLS 연결 10초당 요청 400개
프로젝트, 사용자 또는 커밋의 파이프라인 생성 요청 분당 요청 25개
사용자의 파이프라인 생성 요청 분당 요청 2,000개
프로젝트의 알림 통합 엔드포인트 요청 시간당 요청 3,600개
GitLab Duo aiAction 요청 8시간당 요청 160개
풀 미러링 간격 5분
사용자의 /api/v4/users/:id API 요청 10분당 요청 300개
IP 주소의 GitLab 패키지 호스팅 시스템 요청 분당 요청 1,000개
IP 주소 및 최상위 그룹의 가상 레지스트리 요청 15초당 요청 4,000개
IP 주소의 거부된 가상 레지스트리 패키지 요청 15초당 요청 4,000개
IP 주소 및 파일 경로의 리포지터리 파일 API 요청(GET /api/v4/projects/:id/repository/files/*) 분당 요청 500개
사용자 팔로워 요청(/api/v4/users/:id/followers) 분당 요청 100개
사용자 팔로잉 요청(/api/v4/users/:id/following) 분당 요청 100개
사용자 상태 요청(/api/v4/users/:user_id/status) 분당 요청 240개
사용자 SSH 키 요청(/api/v4/users/:user_id/keys) 분당 요청 120개
단일 SSH 키 요청(/api/v4/users/:id/keys/:key_id) 분당 요청 120개
사용자 GPG 키 요청(/api/v4/users/:id/gpg_keys) 분당 요청 120개
단일 GPG 키 요청(/api/v4/users/:id/gpg_keys/:key_id) 분당 요청 120개
사용자 프로젝트 요청(/api/v4/users/:user_id/projects) 분당 요청 300개
사용자 기여 프로젝트 요청(/api/v4/users/:user_id/contributed_projects) 분당 요청 100개
사용자 별표 프로젝트 요청(/api/v4/users/:user_id/starred_projects) 분당 요청 100개
프로젝트 목록 요청(/api/v4/projects) 10분당 요청 2,000개
IP 주소의 인증되지 않은 프로젝트 목록 요청(/api/v4/projects) 10분당 요청 400개
그룹 프로젝트 요청(/api/v4/groups/:id/projects) 분당 요청 600개
단일 프로젝트 요청(/api/v4/projects/:id) 분당 요청 400개
그룹 목록 요청(/api/v4/groups) 분당 요청 50개
단일 그룹 요청(/api/v4/groups/:id) 분당 요청 400개
러너 토큰을 사용한 러너 작업 요청(/api/v4/jobs/request) 분당 요청 2,000개
IP 주소에서 러너 토큰을 사용한 러너 작업 요청(/api/v4/jobs/request) 분당 요청 2,400개
작업 토큰을 사용한 러너 작업 트레이스 패치 요청(/api/v4/jobs/trace) 분당 요청 200개
작업 토큰을 사용한 러너 작업 요청(/api/v4/jobs/*) 분당 요청 200개
프로젝트의 모든 프로젝트 멤버 나열 분당 요청 200개

보호된 경로와 Raw 엔드포인트의 속도 제한에 대한 자세한 내용을 확인할 수 있습니다.

GitLab은 여러 계층에서 요청의 속도를 제한할 수 있습니다. 이 제한은 IP 주소별로 가장 엄격한 제한입니다.

가상 레지스트리 속도 제한#

히스토리
  • GitLab 17.11에서 도입되었습니다.
  • GitLab 18.11에서 기본 제한이 15초당 요청 1,000개에서 4,000개로 변경되었습니다.
  • GitLab 19.5에서 virtual_registries_skip_authenticated_throttles라는 플래그와 함께 액세스 검사에 실패한 요청에 대한 속도 제한이 도입되었습니다. 기본적으로 비활성화되어 있습니다.

가상 레지스트리는 Maven 같은 패키지 요청에 전용 속도 제한을 적용합니다. 요청이 어떤 속도 제한에 포함되는지는 요청이 액세스 검사를 통과하는지 여부에 따라 달라집니다.

요청 속도 제한 속도 제한 범위
액세스 검사를 통과한 요청 15초당 요청 4,000개 IP 주소 및 최상위 그룹
액세스 검사에 실패한 요청 15초당 요청 4,000개 IP 주소

다음 경우 요청이 액세스 검사에 실패합니다.

  • 레지스트리 ID가 존재하지 않습니다.
  • 자격 증명이 없거나 유효하지 않습니다.
  • 사용자에게 레지스트리에 대한 액세스 권한이 없습니다.

인증된 가상 레지스트리 패키지 요청은 사용자의 인증된 API 트래픽 제한이나 플랜별 속도 제한에 포함되지 않습니다. 대신 가상 레지스트리 속도 제한이 적용됩니다.

사용자별 제외와 액세스 검사에 실패한 요청에 대한 제한은 패키지 요청에만 적용되며 컨테이너 가상 레지스트리 요청에는 적용되지 않습니다.

두 제한 중 하나를 넘으면 GitLab은 429 Too Many Requests 오류를 반환합니다. 보호된 경로 스로틀은 계속 적용됩니다.

서비스 데스크 이메일 속도 제한#

GitLab.com은 최상위 그룹이 시간당, 일당 보낼 수 있는 서비스 데스크 발신 알림 이메일 수를 플랜별로 제한합니다.

플랜 시간당 제한 일당 제한
Free, Premium 체험판, Ultimate 체험판 100 700
오픈 소스 1,500 10,000
Premium 5,000 50,000
Ultimate, Ultimate 체험판 유료 고객 무제한 무제한

자세한 내용은 서비스 데스크 이메일 속도 제한을 참고합니다.

내보내기 파일 업로드를 통한 그룹 및 프로젝트 가져오기#

남용을 막기 위해 GitLab.com은 다음에 속도 제한을 적용합니다.

  • 프로젝트 및 그룹 가져오기.
  • 파일을 사용하는 그룹 및 프로젝트 내보내기.
  • 내보내기 다운로드.

자세한 내용은 다음을 참고합니다.

IP 차단#

GitLab.com이 단일 IP 주소로부터 시스템이 악의적일 가능성이 있다고 판단하는 비정상적인 트래픽을 받으면 IP 차단이 발생할 수 있습니다. 이러한 차단은 속도 제한 설정에 기반할 수 있습니다. 비정상적인 트래픽이 멈추면 GitLab은 해당 IP 주소를 자동으로 해제합니다. 해제 시점은 다음 절에서 설명하는 것처럼 차단 유형에 따라 다릅니다.

GitLab.com에 대한 모든 요청에서 403 Forbidden 오류를 받는다면 차단을 유발했을 수 있는 자동화된 프로세스가 있는지 확인합니다. 도움이 필요하면 영향받은 IP 주소 같은 세부 정보와 함께 GitLab 지원에 문의합니다.

Git 및 컨테이너 레지스트리 인증 실패 차단#

단일 IP 주소가 1분 동안 인증 실패 요청을 300개 보내면 GitLab.com은 15분 동안 403 Forbidden 상태 코드로 응답합니다.

이 응답은 Git 요청과 컨테이너 레지스트리(/jwt/auth) 요청(합산)에만 적용됩니다.

이 제한은 다음과 같습니다.

  • 인증에 성공한 요청으로 초기화됩니다. 예를 들어 인증 실패 요청 299개 다음에 성공한 요청 하나, 그 다음에 인증 실패 요청 299개가 더 오더라도 차단이 발생하지 않습니다.
  • gitlab-ci-token으로 인증된 JWT 요청에는 적용되지 않습니다.

응답 헤더는 제공되지 않습니다.

HTTPS를 통한 Git 요청은 항상 인증되지 않은 요청을 먼저 보내며, 프라이빗 리포지터리에서는 이 요청이 401 Unauthorized 오류를 반환합니다. 그다음 Git은 사용 가능한 경우 사용자 이름, 비밀번호 또는 액세스 토큰으로 인증된 요청을 시도합니다. 이러한 요청이 동시에 너무 많이 전송되면 일시적인 IP 차단이 발생할 수 있습니다. 이 문제를 해결하려면 SSH 키로 GitLab과 통신합니다.

구성할 수 없는 제한#

GitLab.com에서 사용하는 구성할 수 없는 속도 제한에 대한 자세한 내용은 구성할 수 없는 제한을 참고합니다.

페이지 매김 응답 헤더#

성능상의 이유로 쿼리가 10,000개를 넘는 레코드를 반환하면 GitLab은 일부 헤더를 제외합니다.

보호된 경로 스로틀#

같은 IP 주소가 보호된 경로로 1분에 POST 요청을 10개보다 많이 보내면 GitLab.com은 429 Too Many Requests 상태 코드를 반환합니다.

보호된 경로에는 사용자 생성, 사용자 확인, 사용자 로그인, 비밀번호 재설정이 포함됩니다. 전체 목록은 보호된 경로를 참고합니다.

차단된 요청에 GitLab이 포함하는 헤더는 사용자 및 IP 속도 제한을 참고합니다.

SSH 최대 연결 수#

GitLab.com은 MaxStartups 설정을 사용해 동시에 인증되지 않은 SSH 연결의 최대 수를 정의합니다. 허용된 최대 연결 수보다 많은 연결이 동시에 발생하면 GitLab은 초과 연결을 끊습니다. 그러면 사용자는 ssh_exchange_identification 오류를 받습니다.

관련 주제#