간트차트 만드는 법: WBS에서 실행 가능한 일정까지
간트차트는 그리는 그림이 아니라 계산되는 결과다. WBS에서 기간·종속성·CPM·베이스라인까지 5단계와, 엑셀 간트가 한계를 드러내는 지점을 짚는다.
간트차트는 손으로 그리는 그림이 아니라 계산해서 나오는 결과다. 작업 목록과 작업별 기간, 그리고 작업 사이의 순서를 넣으면 일정이 나온다. 반대로 막대를 하나씩 끌어다 모양을 맞추기 시작하면, 그 차트는 계획이 아니라 그림이다. 이 글은 간트차트를 만드는 5단계를 순서대로 다룬다. 작업 목록(WBS), 기간, 종속성, 계산(CPM), 베이스라인이다. 끝에는 작업 6개짜리 예제로 일정을 손으로 검산해 보고, 엑셀로 그린 간트차트가 어디서 무너지는지 짚는다.
간트차트가 담는 것
간트차트를 이루는 요소는 5가지다. 가로 막대는 작업과 그 기간을 나타낸다. 마름모는 마일스톤, 곧 기간이 0인 약속의 날이다. 막대와 막대를 잇는 종속선은 작업 사이의 순서를 나타내고, 세로로 그어진 오늘선은 현재 시점을 표시한다. 베이스라인 오버레이는 승인 당시의 계획을 현재 계획 아래에 겹쳐 보여 준다.
5가지가 담는 것은 전부 시간에 관한 정보다. 무엇을 만들지, 일을 어떻게 나눌지는 간트차트가 아니라 WBS가 답한다. 이 구분이 흐려지면 일정이 바뀐 것인지 범위가 바뀐 것인지 구분할 수 없게 된다.
1단계. 작업 목록은 WBS에서 온다
간트차트의 행은 회의에서 나온 할 일을 받아 적은 목록이 아니다. 행 하나하나는 WBS의 최하위 칸인 Work Package에서 와야 한다. 이유는 단순하다. WBS는 합이 100%가 되는지 확인하면서 범위를 나눈 결과다. 여기서 출발하면 일정에서 빠진 일이 바로 드러난다. 즉흥으로 적은 목록에서 출발하면 목록에 없는 일은 일정에도 없고, 그 사실은 실행에 들어가서야 알게 된다.
행 크기가 적당한지 판단하는 기준도 WBS에 있다. 최하위 작업이 8시간에서 80시간 사이에 들어오면(8/80 규칙) 간트차트의 행으로 알맞은 크기다. 작업을 어떻게 나누는지는 WBS 작성법 5단계에서 다뤘다.
2단계. 기간은 근무일로 센다
각 작업에 기간을 붙인다. 이때 단위는 달력일이 아니라 근무일이어야 한다. "5일짜리 작업"의 마감은 5일 뒤가 아니라 5번째 근무일이다. 주말과 공휴일을 건너뛰므로, 목요일에 시작한 5일 작업은 다음 주 수요일에 끝난다. 달력일로 잡은 일정은 첫 연휴를 만나는 순간부터 실제와 어긋난다.
기간 산정이 어렵게 느껴진다면 대개 작업이 너무 크다. 8/80 크기로 나눈 작업은 산정 오차도 1~2일 수준이라 다루기 쉽다. "이 단계는 2개월"처럼 큰 덩어리를 통째로 추정하는 것보다, 작은 작업의 기간을 여러 개 산정해 합산하는 쪽이 훨씬 정확하다.
3단계. 순서는 날짜가 아니라 종속성으로 적는다
작업 사이의 순서는 시작일을 손으로 입력해서 만드는 것이 아니라, 선행과 후행을 잇는 종속성으로 적는다. 가장 많이 쓰는 유형은 FS(Finish-to-Start)다. 선행이 끝나야 후행이 시작된다는 뜻이다.
날짜를 직접 박는 것과 선을 긋는 것은 처음에는 결과가 같아 보인다. 차이는 선행이 밀릴 때 드러난다. 종속성으로 묶인 후행은 함께 밀려서 지연이 차트에 나타난다. 손으로 박아 둔 날짜는 그대로 남아 있어서, 차트만 보면 지연이 없어 보인다. 계약 기한처럼 정말로 고정된 날짜만 예외로 두고, 나머지 순서는 전부 선으로 적는 것이 원칙이다. FS 말고 남은 3가지 유형(SS·FF·SF)과 Lead/Lag는 종속성 4종과 Lead/Lag에서 자세히 다뤘다.
4단계. 일정은 CPM이 계산한다
프로젝트 시작일 하나와 작업별 기간, 그리고 종속성이 갖춰지면 각 작업의 시작일과 종료일은 입력하는 값이 아니라 계산되는 값이 된다. 그 계산법이 CPM(Critical Path Method)이다. 프로젝트 시작일에서 출발해 종속성을 따라 앞으로 훑으면서(forward pass) 각 작업이 가장 이르게 시작하고 끝낼 수 있는 날을 구한다. 그렇게 나온 것이 일정표다.
계산이 끝나면 날짜 말고 두 가지가 더 나온다. 하나는 critical path다. 시작부터 끝까지 가장 오래 걸리는 경로이고, 이 경로 위의 작업이 하루 밀리면 프로젝트 전체가 하루 밀린다. 다른 하나는 float(여유)다. critical path 밖의 작업은 어느 정도 밀려도 종료일이 움직이지 않는데, 그 허용치가 float다. 어느 작업이 정말 급하고 어느 작업은 기다려도 되는지가 감이 아니라 숫자로 나온다.
5단계. 마일스톤을 찍고 베이스라인을 잠근다
계산된 일정 위에 마일스톤을 찍는다. 마일스톤은 기간이 0인 약속의 지점이다. 오픈, 검수 통과, 계약 납기처럼 "이날 이 상태여야 한다"를 표시한다. 기간이 있는 작업을 마일스톤으로 만들면 약속과 일이 섞이므로, 마일스톤은 항상 0일로 둔다.
계획이 승인되면 그 시점의 일정 전체를 베이스라인으로 잠근다. 베이스라인은 바뀌지 않는 스냅샷이고, 이후의 모든 "밀렸다", "당겨졌다"는 이 기준과의 차이로 잰다. 베이스라인 없이 현재 계획만 있으면 계획을 고칠 때마다 기준도 함께 움직여서, 지연이 통계에서 사라진다.
작업 6개로 직접 검산해 보기
작은 홈페이지 리뉴얼 프로젝트를 작업 6개로 나눴다고 하자. 기간은 근무일 기준이다.
| 작업 | 기간 | 선행 | 시작일 | 종료일 |
|---|---|---|---|---|
| A 요구 정리 | 3d | 없음 | 1일차 | 3일차 |
| B 화면 설계 | 5d | A | 4일차 | 8일차 |
| C 콘텐츠 작성 | 4d | A | 4일차 | 7일차 |
| D 개발 | 6d | B | 9일차 | 14일차 |
| E 검수 | 2d | C, D | 15일차 | 16일차 |
| M 오픈(마일스톤) | 0d | E | 16일차 | 16일차 |
계산을 따라가 보자. A가 3일차에 끝나므로 B와 C는 4일차에 시작한다. E는 선행이 둘인데, C는 7일차에 끝나고 D는 14일차에 끝난다. 후행은 늦은 쪽을 기다려야 하므로 E의 시작은 15일차다. forward pass는 이것이 전부다. 각 작업의 시작일은 선행들의 종료일 가운데 가장 늦은 날의 다음 날이다.
가장 긴 경로는 A→B→D→E→M, 3+5+6+2 = 16근무일이다. 이 경로가 critical path다. 반면 C는 7일차에 끝나지만 14일차까지만 끝내면 되므로 float이 7일이다. 같은 지연이라도 어디서 생기느냐에 따라 결과가 다르다. B가 2일 밀리면 D는 11–16일차, E는 17–18일차가 되어 오픈이 18일차로 밀린다(전액 전파). C가 2일 밀리면 오픈은 그대로다(float 안의 지연).
한 가지 더 볼 것이 있다. 16근무일은 달력으로 약 22일이다(주말 3번). 2단계에서 기간을 근무일로 센 이유가 여기서 드러난다. 달력일로 셌다면 오픈 날짜를 6일이나 이르게 약속했을 것이다.
간트차트를 읽는 법
다 만든 차트는 신호 3가지로 읽는다. 첫째, critical path 위의 막대가 밀리고 있는가. 이 지연은 그대로 프로젝트 종료일까지 전파되므로 가장 먼저 본다. 둘째, 오늘선을 지났는데 진척이 차지 않은 막대가 있는가. 지금 늦어지고 있는 작업이다. 셋째, 베이스라인보다 오른쪽으로 벗어난 막대가 있는가. 승인받은 계획에서 벗어난 작업이다.
3가지 모두 사람이 눈으로 하나씩 뒤져 찾는 것이 아니라 차트가 계산해서 보여 주는 신호다. 한 작업의 3일 지연이 종속 관계를 따라 어디까지 영향을 주는지 실제 데이터로 따라간 기록은 한 작업이 3일 밀리면에 있다.
엑셀 간트차트가 무너지는 지점
엑셀에서 셀을 색칠해 만든 간트차트는 초안이나 1회성 보고에는 충분하다. 문제는 실행에 들어가면서 시작된다. 색칠한 간트에는 종속성이 없다. 선행이 밀려도 후행 막대는 제자리에 남아서, 차트만 보면 지연이 없어 보인다. 재계산도 전부 손으로 해야 한다. 변경 한 건마다 뒤쪽 막대를 일일이 다시 칠해야 하니 며칠만 지나면 아무도 갱신하지 않는다. critical path는 계산되지 않고, 베이스라인이 없으니 원래 계획이 무엇이었는지도 남지 않는다.
정리하면 이렇다. 엑셀 간트는 일정을 그린 그림이고, 이 글에서 만든 것은 일정을 계산하는 모델이다. 그림은 만들기 편하고, 모델은 계획이 바뀔 때 버틴다. 프로젝트는 반드시 바뀐다.
다음에 읽을 것
이 글은 일정을 만드는 과정의 가운데 단계를 다뤘다. 앞 단계인 '일을 100%가 되도록 나누는 법'은 WBS 작성법 가이드가 다루고, 작업 사이의 순서를 적는 방법은 종속성 4종 가이드가 다룬다. 여기서 만든 일정이 실행 중에 흔들리면 무슨 일이 벌어지는지는 critical path 케이스 스터디가 실제 데이터로 보여 준다. wbsgantt에서는 이 과정이 한 화면에서 이어진다. WBS 트리를 만들면 간트차트가 자동으로 따라오고, CPM 계산과 한국 공휴일이 반영된 근무일 캘린더가 들어 있어서, 이 글의 5단계 가운데 계산에 해당하는 부분은 도구가 대신한다.
자주 묻는 질문
- 간트차트만 있으면 WBS는 따로 없어도 되나요?
- 간트차트의 행이 곧 WBS의 최하위 작업(Work Package)입니다. WBS 없이 간트부터 그리면 행 목록이 곧 즉흥 분해가 되는데, 합이 100%인지 검증할 구조가 없어 빠진 일이 일정에도 빠집니다. 순서는 WBS로 범위를 확정한 뒤 leaf에 기간과 순서를 붙이는 것이고, 그 결과물이 간트차트입니다.
- 간트차트는 엑셀로 만들면 안 되나요?
- 초안이나 1회성 보고용이라면 충분합니다. 문제는 실행입니다. 셀 색칠 간트는 종속성이 없어서 선행이 밀려도 후행 막대가 제자리에 남고, 재계산·critical path·베이스라인이 전부 수작업이 됩니다. 매주 갱신하는 실행 도구로 쓰는 순간 유지 비용이 작성 비용을 넘어섭니다.
- 막대를 드래그해서 일정을 조정해도 되나요?
- 무엇을 바꾸려는지에 따라 다릅니다. 기간이 늘어난 것이면 기간을, 순서가 바뀐 것이면 종속성을 고쳐야 계산이 유지됩니다. 막대를 끌어 시작일만 옮기면 그 날짜는 선행과 무관하게 고정되고, 이후 선행이 밀려도 그 작업은 제자리에 남아 일정표가 거짓말을 시작합니다. 날짜 고정은 계약 기한처럼 진짜로 고정된 경우에만 씁니다.
- 간트차트는 얼마나 자주 갱신해야 하나요?
- 진척률은 보고 주기(대개 주간)마다, 구조(기간·종속성)는 변경이 생긴 그때그때 갱신합니다. 종속성 기반 간트라면 갱신은 다시 그리는 일이 아니라 바뀐 값을 입력하는 일이고, 나머지는 재계산이 처리합니다. 갱신이 부담스럽다면 도구가 아니라 차트 구조(수동 날짜·색칠)가 문제일 가능성이 큽니다.
- 작업이 100개가 넘으면 차트가 너무 복잡해집니다. 어떻게 보나요?
- 전부를 한 화면에서 보려 하지 않는 것이 요령입니다. 평소에는 단계(summary) 수준으로 접어서 보고, 지연 점검은 critical path 막대만, 보고는 마일스톤만 추립니다. 100개 행이 전부 중요한 회의는 없습니다. 질문에 맞는 높이로 접어 보는 것이 간트차트를 읽는 기술입니다.