Status | Authors | Coach | DRIs | Owning Stage | Created |
---|---|---|---|---|---|
accepted |
@ntepluhina
|
@ayufan
|
@gweaver
| devops plan | 2022-09-28 |
Work Items
이 문서는 작성 중입니다. 일부 측면은 문서화되지 않았지만, 우리는 앞으로 추가할 것으로 기대합니다.
Summary
Work Items는 이슈, 요구 사항, 사건 등 제품 전체에서 지원하는 다양한 유형의 빌드 및 계획된 엔터티를 지원하기 위해 만든 새로운 아키텍처입니다. 이를 통해 이러한 유형을 쉽게 확장하고 사용자 정의할 수 있으며 동시에 동일한 핵심 기능을 공유할 수 있습니다.
용어
Work Items 아키텍처의 컴포넌트 및 속성을 설명하기 위해 다음 용어를 사용합니다.
Work Item
이슈, 요구 사항, 테스트 케이스, 사건 및 작업의 기본 유형(이 디렉터리은 앞으로 확장될 예정입니다). 다른 Work Items는 동일한 기본 속성 세트를 가지지만 위젯 디렉터리은 다릅니다.
Work Item 유형
다른 작업 항목 범주에 대한 미리 정의된 유형의 세트입니다. 현재 사용 가능한 유형은 다음과 같습니다:
기존 객체를 Work Item 유형으로 변환하거나 새로운 것을 추가하기 위한 작업이 진행 중입니다.
Work Item 속성
각 Work Item 유형에는 다음과 같은 공통 속성이 있습니다:
참고: 자세한 내용은 Work Item의 필드를 참조할 수 있습니다.
-
id
- 고유한 Work Item 전역 식별자; -
iid
- 작업 항목의 내부 ID(현재 작업 공간은 프로젝트만 될 수 있습니다); - Work Item 유형;
- Work Item 수정 시간과 관련된 속성:
createdAt
,updatedAt
,closedAt
; - 제목 문자열;
- Work Item 비밀 유지 상태;
- Work Item 상태(열림 또는 닫힘);
- 작업 항목이 업데이트될 때마다 증가하는 잠금 버전;
- 리소스에 대한 현재 사용자의 권한
- Work Item 위젯 디렉터리
Work Item 위젯
모든 Work Item 유형은 미리 정의된 동일한 위젯 풀을 공유하며, 특정 유형에 활성화된 위젯에 따라 사용자 정의됩니다. 특정 Work Item 유형을 위한 위젯 디렉터리은 현재 미리 정의되어 있으며, 사용자 정의할 수 없습니다. 그러나 미래에는 사용자가 새로운 Work Item 유형을 생성하고 그에 대한 일련의 위젯을 정의할 수 있도록 계획 중입니다.
위젯 유형 (업데이트 중)
위젯 | 설명 | 피처 플래그 | 쓰기 권한 | GraphQL 구독 지원 |
---|---|---|---|---|
WorkItemWidgetAssignees | 작업 항목 담당자 디렉터리 | 게스트
| 예 | |
WorkItemWidgetAwardEmoji | 작업 항목에 추가된 이모지 반응, 호감/비호감 횟수 지원 포함 | 보는 권한이 있는 사람 | 아니오 | |
WorkItemWidgetCurrentUserTodos | 작업 항목의 사용자 할 일 상태 | 보는 권한이 있는 사람 | 아니오 | |
WorkItemWidgetDescription | 작업 항목 설명, 편집 상태, 타임스탬프 및 작성자 지원 | 리포터
| 아니오 | |
WorkItemWidgetHealthStatus | 작업 항목의 건강 상태 할당 지원 | 리포터
| 아니오 | |
WorkItemWidgetHierarchy | 작업 항목 계층 구조, 자식의 존재 여부를 나타내는 부울 지원. 참고: 현재 계층 구조는 현재 OKR에만 사용 가능합니다. | okrs_mvc
| 게스트
| 아니오 |
WorkItemWidgetIteration | 작업 항목의 반복 지원 | 리포터
| 아니오 | |
WorkItemWidgetLabels | 작업 항목에 추가된 라벨 디렉터리, 범위가 지원되는지 확인하는 지원 포함 | 리포터
| 예 | |
WorkItemWidgetLinkedItems | 특정 작업 항목과 관련된 작업 항목 디렉터리, 관계 유형은 관련됨 , 차단 및 차단된 항목 일 수 있음. 차단 상태, 차단된 항목, 차단, 관련 항목의 개별 카운트 지원 포함.
| 게스트
| 아니오 | |
WorkItemWidgetMilestone | 작업 항목의 마일스톤 할당 지원 | 리포터
| 아니오 | |
WorkItemWidgetNotes | 작업 항목 내 논의 디렉터리 | 게스트
| 예 | |
WorkItemWidgetNotifications | 현재 사용자의 작업 항목 알림 구독 상태 | 보는 권한이 있는 사람 | 아니오 | |
WorkItemWidgetProgress | 작업 항목의 진행 값. 참고: 현재 진행은 현재 OKR에만 사용 가능합니다. | okrs_mvc
| 리포터
| 아니오 |
WorkItemWidgetStartAndDueDate | 작업 항목의 시작 및 마감 날짜 설정 | 리포터
| 아니오 | |
WorkItemWidgetStatus | 요구 사항 유형의 작업 항목의 상태, 가능한 상태 유형은 확인되지 않음 , 만족했음 , 실패함
| 아니오 | ||
WorkItemWidgetTestReports | 작업 항목에 연결된 테스트 보고서 | |||
WorkItemWidgetWeight | 작업 항목의 가중치 설정 | 리포터
| 아니오 | |
WorkItemWidgetLock | 작업 항목 잠금/잠금 해제 | 리포터
| 아니오 | |
WorkItemWidgetColor | 작업 항목의 색상 설정. 참고: 현재 색상은 현재 에픽에만 사용 가능합니다. | 리포터
| 아니오 |
위젯 가용성 (업데이트 중)
위젯 | 에픽 | 이슈 | 작업 | 목표 | 핵심 결과 |
---|---|---|---|---|---|
WorkItemWidgetAssignees | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetAwardEmoji | ✅ | ✔️ | ✅ | ✅ | ✅ |
WorkItemWidgetCurrentUserTodos | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetDescription | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetHealthStatus | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetHierarchy | ✔ | ✔️ | ❌ | ✅ | ❌ |
WorkItemWidgetIteration | ❌ | ✅ | ✅ | ❌ | ❌ |
WorkItemWidgetLabels | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetLinkedItems | ✔️ | ✔️ | ✔️ | ✅ | ✅ |
WorkItemWidgetMilestone | 🔍 | ✅ | ✅ | ✅ | ❌ |
WorkItemWidgetNotes | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetNotifications | ✅ | ✅ | ✅ | ✅ | ✅ |
WorkItemWidgetProgress | ❌ | ❌ | ❌ | ✅ | ✅ |
WorkItemWidgetStartAndDueDate | 🔍 | ✅ | ✅ | ❌ | ✅ |
WorkItemWidgetStatus | ❓ | ❓ | ❓ | ❓ | ❓ |
WorkItemWidgetTestReports | ❌ | ❌ | ❌ | ❌ | ❌ |
WorkItemWidgetWeight | 🔍 | ✅ | ✅ | ❌ | ❌ |
WorkItemWidgetColor | ✅ | ❌ | ❌ | ❌ | ❌ |
범례
- ✅ - 위젯 사용 가능
- ✔️ - 위젯 예정
- ❌ - 위젯 사용 불가
- ❓ - 고려 대상의 위젯
- 🔍 - 대체 위젯 예정
작업 항목 관계
작업 항목은 여러 가지 방법으로 다른 작업 항목과 관련될 수 있습니다:
- 상위: 현재 작업 항목에 대한 직계 조상으로, 이 작업 항목의 완료는 이 작업 항목을 완료하는 데 의존합니다.
- 하위: 현재 작업 항목의 직계 자손으로, 이 작업 항목의 완료에 기여합니다.
- 차단됨: 현재 작업 항목의 완료를 방해하는 작업 항목.
- 차단함: 현재 작업 항목의 완료가 차단된 작업 항목.
- 관련: 현재 작업 항목의 주제와 관련이 있는 작업 항목으로, 직접적으로 기여하거나 완료를 방해하지는 않습니다.
계층 구조
상위-하위 관계는 작업 항목의 계층 구조의 기초를 형성합니다. 각 작업 항목 유형은 해당 유형의 부모 또는 자식이 될 수 있는 유형의 정의된 집합을 갖고 있습니다.
유형이 확장되고, 상위 항목에는 자체 상위 항목이 있을 때 계층 구조 기능이 기하급수적으로 커질 수 있습니다.
작업 항목 보기
글로벌 작업 항목 id
를 식별자로 사용하여 모든 유형의 작업 항목을 렌더링하는 새 프론트엔드 보기입니다.
작업
작업은 특별한 작업 항목 유형입니다. 작업은 문제에 하위 항목으로 추가될 수 있으며 문제 보기 모달에서 표시될 수 있습니다.
피처 플래그
다양한 부분이 많은 큰 프로젝트이므로, 피처 플래그를 사용하여 사용 가능한 위젯의 프로모션을 추적합니다. 아래 표는 사용 중인 다른 피처 플래그 및 해당 사용자를 보여줍니다.
피처 플래그 이름 | 사용자 |
---|---|
work_items
| 기본으로 활성화됨 |
work_items_beta
|
gitlab-org , gitlab-com
|
work_items_mvc_2
| gitlab-org/plan-stage
|
동기
작업 항목의 주요 목표는 모든 산업의 지식 노동자를 위한 가장 인기있는 협업 도구로 계획 도구를 향상하는 것입니다.
- 모든 유형의 비슷한 항목(이슈, 사건, 에픽, 테스트 케이스 등)을 표준 플랫폼에 올려 유지보수를 간소화하고 일관된 경험을 증가시킵니다.
- 공통 계획 개념의 일류 지원을 가능하게 하여 복잡성을 줄이고 사용자가 GitLab에 특화된 미묘한 점을 배우지 않고도 계획할 수 있도록 합니다.
목표
확장성
현재 문제, 에픽, Merge Request 등과 같은 다른 엔터티가 많은 유사한 기능을 공유하지만, 이러한 기능은 각각 별도로 구현됩니다. 이로 인해 새로운 기능을 추가하거나 기존 기능을 리팩터링하는 것이 문제가 됩니다. 예를 들어, 이슈 및 사건에 새 기능을 추가하려면 각각의 유형에 대해 별도로 구현해야 합니다. 작업 항목에서 새로운 기능은 기존 모든 유형에 대해 위젯을 통해 구현되므로 아키텍처가 확장 가능해집니다.
유연성
기존 구현에는 문제, Merge Request, 에픽 등에 대한 강한 구조가 있습니다. 이 구조는 백엔드와 프론트엔드 모두에서 정의되므로 어떤 변경이든 조정된 노력이 필요합니다. 또한 사용자의 이 구조를 사용자 정의 할 수 있도록하기 어렵습니다. Work Item 아키텍처는 프론트엔드가 유연한 방식으로 작업 항목 위젯을 표시할 수 있도록 합니다. 작업 항목 위젯에 있는 내용은 페이지에 렌더링되므로 변경을 빠르게 할 수 있으며 구조가 훨씬 유연해집니다. 예를 들어, 사건 페이지에서 레이블 표시를 중단하려면 백엔드에서 사건 작업 항목 유형에서 레이블 위젯을 제거합니다. 또한 미래에는 사용자가 사용자 정의 작업 항목 유형에서 보고 싶은 위젯 세트를 정의할 수 있게 될 것입니다.
일관된 경험
유사한 기능에 대해 일관된 동작을 갖도록 최대한 노력하지만 여전히 구현에 차이가 있습니다. 예를 들어, GraphQL API를 통해 Merge Request에서 레이블을 업데이트하는 것은 전용 setMergeRequestLabels
뮤테이션으로 수행할 수 있지만, 문제의 경우 보다 일반적인 updateIssue
를 호출해야 합니다. 이로 인해 프론트엔드 및 외부 API 사용자 모두에게 일관되지 않은 경험을 제공합니다. 결과적으로 에픽, 이슈, 요구 사항 등은 모두 유사하지만 사용자가 각각의 동작 방식에 대한 복잡한 멘탈 모델을 보유해야 합니다.
작업 항목 아키텍처는 모든 유형의 모든 기능을 일관되게 만들도록 설계되었으며, 이러한 기능은 작업 항목 위젯으로 구현됩니다.
해결할 고수준 아키텍처 문제
- 에픽을 작업 항목 유형으로 마이그레이션하기 위해 그룹 및 프로젝트 통합을 우회하는 방법
- 특정 작업 항목 유형에 대한 상위-하위 관계 처리: 에픽 > 문제 > 작업 및 동일한 작업 항목 유형에 대한 상위-하위 관계 처리: 문제 > 문제
- 사용자 정의 작업 항목 유형 및 사용자 정의 위젯 구현