This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed -

이 문서는 진행 중인 작업이며, Cells 디자인의 매우 초기 상태를 나타냅니다. 중요한 측면들이 문서화되지 않았지만, 향후 추가할 계획입니다. 이는 Cells에 대한 한 가지 가능한 아키텍처이며, 우리는 이를 구현할 접근 방식을 결정하기 전에 이를 대안과 대조할 것을 의도합니다. 이 접근 방식을 선택하지 않기로 결정하더라도, 선택하지 않은 이유를 문서화하기 위해 이 문서는 유지될 것입니다.

Cells: GraphQL

GitLab은 효율적인 데이터 쿼리 작업을 수행하기 위해 GraphQL을 광범위하게 사용합니다. GraphQL은 자체적으로 직접 라우팅되지 않습니다. GitLab이 사용하는 방식은 /api/graphql 엔드포인트를 호출하며, 요청 본문의 쿼리 또는 뮤테이션만이 데이터 액세스 위치를 정의할 수 있습니다.

1. 정의

2. 데이터 흐름

3. 제안

Cells 아키텍처에 GraphQL을 구현하는 주요 방법은 적어도 두 가지가 있습니다.

3.1. 엔드포인트에 의한 GraphQL 라우팅

/api/graphql/api/organization/<organization>/graphql로 변경합니다.

  • 이는 API URI가 변경되기 때문에 /api/graphql 엔드포인트의 모든 기존 사용을 중단시킵니다.

3.2. 본문에 의한 GraphQL 라우팅

라우터의 일부로 GraphQL 본문을 구문 분석하여 project와 같은 라우터 가능한 엔티티를 찾습니다.

  • 이는 여전히 GraphQL 쿼리가 특정 셀의 컨텍스트에서만 실행되도록 하며 데이터를 Merge할 수 없습니다.
# 좋은 예제
{
  project(fullPath:"gitlab-org/gitlab") {
    id
    description
  }
}

# Merge Request가 라우팅되지 않기 때문에 나쁜 예제
{
  mergeRequest(id: 1111) {
    iid
    description
  }
}

3.3. GraphQL 프록시 Merge

라우터의 일부로 본문을 구문 분석하여 여러 Cells에서 결과를 Merge할 수 있는 GraphQL 프록시를 구현합니다.

  • 이로 인해 페이지네이션을 구현하기가 어려워질 수 있으며, 모든 Cells에서 결과가 Merge된 쿼리를 실행하는 것으로 가정할 수 있습니다.
{
  project(fullPath:"gitlab-org/gitlab"){
    id, description
  }
  group(fullPath:"gitlab-com") {
    id, description
  }
}

4. 평가

4.1. 장점

4.2. 단점