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

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

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

4. 평가

4.1. 장점

4.2. 단점