# 작업 속성

## Content

작업(task)은 간트 시트 프로젝트 계획의 기본 단위로, 시작 및 종료 시간과 기간을 가집니다.
프로젝트에는 [여러 개의 작업을 추가](/spreadjs/docs/features/ganttsheet/task-operations)할 수 있으며, 각 작업은 서로 다른 [계층 수준](/spreadjs/docs/features/ganttsheet/add-hierarchy-types)을 가질 수 있고, [작업 간 의존 관계](/spreadjs/docs/features/ganttsheet/task-operations)를 설정하여 프로젝트를 보다 효과적으로 구성하고 관리할 수 있습니다.
다음 이미지는 이름, 시작일, 종료일, 기간만을 가진 하나의 작업만 포함된 간단한 프로젝트 계획 예시를 보여줍니다. 해당 작업의 모드는 자동(auto)입니다. 툴팁에는 이 작업이 2022년 11월 10일 오전 8시부터 오후 5시까지로 계획되어 있다고 표시되어 있습니다.
![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/image.002254.png?width=450)
다음 섹션에서는 간트 시트 작업의 속성에 대해 설명합니다.

## 간트 시트 작업 유형

간트 시트에서는 작업이 다음 세 가지 유형으로 나뉩니다:

* **일반(Normal)**: 일반 작업은 가장 일반적인 작업 유형입니다.
* **요약(Summary)**: 요약 작업은 다른 작업들의 상위(parent) 작업입니다.
* **마일스톤(Milestone)**: 프로젝트 마일스톤은 작업 기간이 0인 작업으로, 프로젝트 내 중요한 성과를 나타냅니다.

![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/image.fa0343.png?width=850)

## 간트 시트 작업 필드

작업은 [데이터 소스로부터 여러 필드](/spreadjs/docs/features/ganttsheet/data-manager)를 포함합니다.
간트 시트 프로젝트에서 일반적으로 사용되는 기본 내장 필드는 작업 이름, 시작 및 종료 시간, 기간 등입니다.
![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/image.807122.png?width=1100)

> **참고**: 작업을 수동으로 예약할 때는, 데이터 소스에 지정된 모든 작업 필드가 [간트 시트 뷰](/spreadjs/docs/spreadjs-designer-component/spdesignerwork/ganttsheet-designer)에 열로 존재해야 합니다.
> 그렇지 않으면 해당 필드들은 간트 시트 프로젝트에서 표시되지 않습니다.
> 예를 들어, 간트 시트에서 설정된 작업 모드들을 보려면 `"mode"` 열이 간트 시트 뷰 영역에 포함되어 있어야 합니다.

## 간트 시트 작업 스케쥴 모드

간트 시트 프로젝트에서 작업은 다음 두 가지 모드로 예약될 수 있습니다:

* **자동 모드(Auto Mode)**:
    자동 예약 작업을 나타냅니다.
    이 모드에서는 작업의 시작, 종료, 기간 필드가 작업 간 의존성 및 기타 프로젝트 설정에 따라 계산됩니다.
    주의할 점은 기간 값은 작업이 자동 모드일 때만 유효하다는 것입니다.
    작업의 기간이 설정되어 있으면 해당 값을 사용하고, 설정되어 있지 않으면 각 작업의 기본 기간은 1일로 간주됩니다.
* **수동 모드(Manual Mode)**:
    수동 예약 작업을 나타냅니다.
    이 모드에서는 각 작업에 대해 시작일, 종료일, 기간 값을 수동으로 설정할 수 있습니다.
    각 작업의 기간은 루트 노드로부터 계산되며, 작업 간의 관계는 선행(predecessors) 및 후속(successors) 관계를 기반으로 정렬됩니다.
    수동 모드를 사용할 때는 다음 조건들을 고려해야 합니다:
    * 종료 시간만 지정된 경우, 해당 작업은 **finishOnly** 작업이 됩니다.
    * 시작 시간만 지정된 경우, 해당 작업은 **startOnly** 작업이 됩니다.
    * 기간만 지정된 경우, 해당 작업은 **durationOnly** 작업이 됩니다.
    * 간트 차트에서 작업에 선행 작업이 없다면, 해당 작업은 상위 노드와 동일한 시간에 시작됩니다.
        하지만 선행 작업이 있다면, 해당 선행 작업이 완료된 후에 시작됩니다.
    * 시작일, 종료일, 기간 중 하나라도 누락된 경우, 자동 모드는 다른 필드를 기반으로 누락된 값을 계산합니다.
    * 시작일, 종료일, 기간이 모두 지정되었지만, 기간이 시작일과 종료일의 차이와 일치하지 않으면, 시작일과 기간 값을 사용합니다.
    * 종료일이 시작일보다 빠르면, 기본적으로 기간을 1일로 설정합니다.
    * 예약 이후 종료일이 시작일보다 빠르면, 해당 작업은 기간이 0인 마일스톤 작업으로 간주됩니다.

작업의 시작일, 종료일, 기간을 수동으로 조정하면, 작업의 색상이 변경되어 해당 조정 사항을 시각적으로 반영합니다.
아래 이미지는 이에 대한 예시를 보여줍니다:
![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/image.3cda4f.png?width=1100)

#### 스케줄 재계산

작업 일정은 다음과 같은 상황에서 다시 계산됩니다:

* [프로젝트를 초기화](/spreadjs/docs/features/ganttsheet/create-ganttsheet)할 때
* [프로젝트의 시작 시간 또는 캘린더를 설정](/spreadjs/docs/features/ganttsheet/callendar-settings)할 때
* [작업 관련 작업(추가, 삭제, 들여쓰기, 내어쓰기, 정렬 등)을 수행](/spreadjs/docs/features/ganttsheet/task-operations)할 때
* [작업 간의 의존 관계(선행 작업 또는 후속 작업)를 생성](/spreadjs/docs/features/ganttsheet/task-operations)할 때

>type=warning
> **참고**: 모든 일정 재계산은 루트 노드에서 시작됩니다. 각 노드는 상위/하위(parent/child) 계층 구조와 선행/후속 관계를 가집니다.

## 간트 시트 작업 선행 작업 및 후행 작업

* **선행 작업(Predecessors)**:
    `Predecessors` 필드는 현재 작업이 시작되거나 종료되기 전에 완료되어야 하는 선행 작업들의 작업 ID 번호를 나열합니다.
    각 선행 작업은 특정 유형의 작업 의존성과 선행 또는 지연 시간과 함께 다른 작업과 연결됩니다.
* **후속 작업(Successors)**:
    `Successors` 필드는 `Predecessors` 필드와 동일한 방식으로 동작합니다.
    차이점은 `Successors` 필드는 현재 작업이 완료된 이후에 시작되거나 종료되어야 하는 후속 작업들의 ID 번호를 나열한다는 점입니다.

다음 이미지는 간트 시트 프로젝트 내 `Predecessors` 필드가 어떻게 표시되는지를 보여줍니다:
![image](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/d37fbce1-6a37-43ce-b728-dd79fba68421/image.f34af5.png?width=1100)