Skip to main content

GraphQL API에 대한 속도 제한 및 쿼리 제한

GitHubGraphQL API에는 GitHub의 서버에 대한 과도한 또는 악의적인 호출로부터 보호하기 위한 제한 사항이 있습니다.

이 문서의 내용

기본 트래픽률 제한

기본적으로 GitHub Enterprise Server에 대한 트래픽률 제한은 사용하지 않도록 설정됩니다. 인스턴스에 대한 트래픽률 제한을 확인하려면 사이트 관리자에게 문의하세요.

사이트 관리자는 인스턴스에 대한 트래픽률 제한을 설정할 수 있습니다. 자세한 내용은 속도 제한 구성을(를) 참조하세요.

인스턴스 외부의 사용자 또는 조직을 위한 앱을 개발하는 경우 표준 GitHub 트래픽률 제한이 적용됩니다. 자세한 내용은 GitHub Free 설명서의 GraphQL API에 대한 속도 제한 및 쿼리 제한을(를) 참조하세요.

노드 제한

스키마 유효성 검사를 통과하려면 모든 GraphQL API 호출이 다음 표준을 충족해야 합니다.

  • 클라이언트는 모든 연결에서 first 또는 last 인수를 제공해야 합니다.
  • firstlast의 값은 1~100 이내여야 합니다.
  • 개별 호출은 총 500,000개를 초과하는 노드를 요청할 수 없습니다.

호출에서 노드 계산

이 두 예제에서는 호출에서 총 노드를 계산하는 방법을 보여 줍니다.

  1. 단순 쿼리:

    query {
      viewer {
        repositories(first: 50) {
          edges {
            repository:node {
              name
    
              issues(first: 10) {
                totalCount
                edges {
                  node {
                    title
                    bodyHTML
                  }
                }
              }
            }
          }
        }
      }
    }

    계산:

    50         = 50 repositories
     +
    50 x 10  = 500 repository issues
    
                = 550 total nodes
  2. 복합 쿼리:

    query {
      viewer {
        repositories(first: 50) {
          edges {
            repository:node {
              name
    
              pullRequests(first: 20) {
                edges {
                  pullRequest:node {
                    title
    
                    comments(first: 10) {
                      edges {
                        comment:node {
                          bodyHTML
                        }
                      }
                    }
                  }
                }
              }
    
              issues(first: 20) {
                totalCount
                edges {
                  issue:node {
                    title
                    bodyHTML
    
                    comments(first: 10) {
                      edges {
                        comment:node {
                          bodyHTML
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
    
        followers(first: 10) {
          edges {
            follower:node {
              login
            }
          }
        }
      }
    }

    계산:

    50              = 50 repositories
     +
    50 x 20       = 1,000 pullRequests
     +
    50 x 20 x 10 = 10,000 pullRequest comments
     +
    50 x 20       = 1,000 issues
     +
    50 x 20 x 10 = 10,000 issue comments
     +
    10              = 10 followers
    
                     = 22,060 total nodes

쿼리 최적화 전략

  • 개체 수 제한: first 또는 last 인수에 값을 더 작게 설정하고, 결과는 페이지네이션으로 조회
  • 쿼리 깊이 줄이기: 필요한 경우가 아니면 깊게 중첩된 개체 요청 피하기
  • 결과 필터링: 인수를 사용하여 데이터를 필터링하고 필요한 항목만 반환
  • 대규모 쿼리 분할: 복잡한 쿼리를 여러 개의 더 단순한 쿼리로 분할
  • 필요한 필드만 요청: 사용 가능한 모든 필드를 요청하는 대신 필요한 필드만 선택

이러한 전략을 따르면 리소스 제한에 도달할 가능성을 줄이고, API 요청의 성능과 안정성을 향상시킬 수 있습니다.