근무일 기준 일정 계산: 달력일과 영업일은 다르다
5일짜리 작업의 마감은 5일 뒤가 아니다. 달력일과 근무일의 차이, 한국 공휴일에서 자주 틀리는 3가지, 프로젝트별 캘린더, 손으로 검산하는 마감일 계산법을 다룬다.
5일짜리 작업의 마감은 5일 뒤가 아니다. 주말과 공휴일을 건너뛴 5번째 근무일이다. 달력일로 셈한 일정은 만든 날부터 실제와 어긋난다. 이 글에서는 달력일과 근무일이 어떻게 다른지 먼저 보고, 한국 공휴일이 일정에 만드는 함정과 프로젝트마다 달라지는 달력을 살펴본다. 손으로 검산할 수 있는 예제도 하나 넣었다. 마지막에는 지연이 연휴와 겹치면 왜 커지는지, Lag의 "7일"이 근무일인지 달력일인지 같은 실전 문제를 짚는다.
같은 "5일", 두 개의 마감일
목요일에 시작하는 5일짜리 작업을 생각해 보자. 달력으로 세면 목·금·토·일·월이니 마감은 다음 주 월요일이다. 근무일로 세면 목·금을 쓰고 주말을 건너뛴 다음 월·화·수를 쓰니 마감은 수요일이다. 같은 "5일"이 2일 차이 나는 두 날짜를 가리킨다.
작업 하나에서 2일이면 작업 수십 개가 이어지는 프로젝트에서는 몇 주가 된다. 오차의 방향도 언제나 같다. 달력으로 세면 실제보다 이른 날짜를 약속하게 된다. 지키지 못할 마감을 계획 단계에서 스스로 만드는 셈이다.
일정 계산의 세 번째 입력, 캘린더
작업 기간과 작업 사이의 종속성은 다들 입력한다. 그런데 일정 계산에는 입력이 하나 더 있다. 캘린더, 곧 어느 날에 일하는지를 정해 둔 것이다. 기간과 종속성이 같아도 캘린더가 다르면 날짜가 다르게 나온다. 주5일 달력의 10근무일과 주6일 달력의 10근무일은 달력에서 차지하는 길이가 다르다.
캘린더가 입력이라는 말은 날짜가 틀렸을 때 점검할 곳이 하나 더 있다는 뜻이기도 하다. 기간도 종속성도 맞는데 마감이 이상하면 캘린더를 의심해 보자. 기간과 종속성에서 일정 전체가 계산되는 과정은 간트차트 만드는 법에서 다뤘다. 이 글에서는 그 계산의 바탕이 되는 달력을 살펴본다.
한국 공휴일의 세 가지 함정
첫째, 대체공휴일. 공휴일이 일요일이나 다른 공휴일과 겹치면 다음 평일이 쉬는 날이 된다. 규정은 그대로지만 결과는 해마다 다르다. 같은 5월이라도 올해와 내년의 근무일 수가 다르다. 작년 계획을 복사해 날짜만 바꾸는 관행이 위험한 이유다.
둘째, 임시공휴일. 예고 없이 지정된다. 계획할 때 없던 휴일이 실행 중에 생기면 그 주의 모든 작업이 하루씩 밀린다.
셋째, 명절 연휴. 설과 추석은 기본 3일이다. 주말과 이어지면 5일을 넘기기 일쑤고, 앞뒤로 연차를 붙이는 사람이 많으면 팀이 일주일 넘게 사실상 멈춘다. 연초에 그해 공휴일을 캘린더에 미리 넣어 두자. 일정 계획에서 가장 싸고 확실한 작업이다.
프로젝트마다 달력이 다르다
회사 달력 하나로 모든 프로젝트를 계산할 수 있으면 좋겠지만 현실은 프로젝트마다 다르다. 건설 현장은 주6일로 돌아간다. 격주 휴무를 쓰는 조직도 있고, 고객사 창립기념일이나 전사 휴무가 검수 일정에 끼어드는 프로젝트도 있다. 해외 파트너와 함께 일한다면 우리 달력에 없는 상대국 공휴일이 그쪽 작업 속도를 정한다.
그래서 캘린더는 회사가 아니라 프로젝트에 붙는다. 프로젝트를 시작할 때 어느 날에 일하는지 한 번 정해 두면, 이후의 모든 날짜 계산이 그 정의를 따른다.
10근무일 작업의 마감을 직접 세어 보자
1일이 월요일인 어느 달을 놓고 계산해 보자. 주말은 토·일이고, 공휴일은 5일(금)과 15일(월) 2일이다. 작업은 4일(목)에 시작하고 기간은 10근무일이다.
| 몇 번째 근무일 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 날짜 | 4일(목) | 8일(월) | 9일(화) | 10일(수) | 11일(목) | 12일(금) | 16일(화) | 17일(수) | 18일(목) | 19일(금) |
5일은 공휴일이고 6–7일은 주말이라 첫 주에는 2일만 일한다. 13–14일 주말에 이어 15일(월)도 공휴일이라 셋째 주는 화요일에 시작한다. 그래서 마감은 19일(금)이다.
달력으로 "10일"이라고 셌다면 4일부터 10일째인 13일이 마감이다. 그런데 13일은 토요일이다. 실제 마감과 6일 차이가 나는 것도 문제지만, 마감이 토요일에 떨어진다는 사실 자체가 달력으로 셌다는 표시다. 근무일로 계산한 일정에서는 마감이 쉬는 날에 올 수 없다.
연휴가 끼면 지연이 커진다
계획할 때 보이는 공휴일은 이미 일정에 반영되어 있다. 문제는 실행 중에 생긴 지연이 작업을 연휴 쪽으로 밀 때다.
마감이 목요일이던 작업이 2근무일 밀렸다고 하자. 금요일이 공휴일이어서 금·토·일 3일 연휴가 붙어 있다면, 밀린 2일은 월요일과 화요일로 넘어간다. 새 마감은 화요일이고, 달력으로는 5일이 밀렸다. 2근무일 지연이 달력에서는 5일이 된 것이다. 이 작업이 critical path 위에 있다면 프로젝트 마감도 그만큼 밀린다. 지연이 종속 관계를 따라 뒤 작업으로 번지는 과정은 한 작업이 3일 밀리면에서 실제 데이터로 확인했다. 여기에 연휴까지 겹치면 달력에서 잃는 날짜는 근무일 계산보다 언제나 많다.
그래서 연휴 직전에 마감이 걸린 작업은 위험 목록에 올려 둘 만하다. 하루만 밀려도 달력에서는 4일을 잃기 때문이다.
Lead·Lag와 달력의 함정
종속성에 붙는 Lag를 "선행이 끝나고 7일 뒤 시작"이라고 적었다면, 이 7일은 근무일일까 달력일일까. 도구마다 다르고 계약마다 다르다. 게다가 여기서는 근무일이 항상 정답도 아니다.
검토 대기나 승인 대기처럼 사람이 출근해야 진행되는 기다림은 근무일로 센다. 반면 콘크리트 양생이나 도장 건조처럼 물리적으로 시간이 필요한 기다림은 주말에도 진행되므로 달력일로 센다. 대금 지급 조건의 "30일"도 관행상 달력일이다. 어느 쪽인지 적어 두지 않은 Lag는 일정이 일주일씩 어긋나는 단골 원인이다. Lead와 Lag가 무엇인지는 종속성 4종과 Lead/Lag에서 다뤘다.
도구에서의 운용
wbsgantt의 캘린더는 한국 공휴일이 들어 있는 글로벌 달력에서 시작한다. 프로젝트마다 근무 요일을 바꿀 수 있어서, 주6일 현장이면 토요일을 근무일로 켜면 된다. 예외일은 양방향으로 편집한다. 쉬는 날을 추가할 수도 있고, 반대로 쉬는 날이지만 그날은 일한다고 지정할 수도 있다. CPM은 이 캘린더 위에서 근무일로 계산하므로 기간과 Lag가 모두 근무일 기준이고, 공휴일을 추가하면 영향받는 작업의 날짜를 자동으로 다시 계산한다. 리소스별 캘린더는 없다. 달력이 다른 팀이 섞인 프로젝트라면 일정을 좌우하는 병목 팀의 달력을 기준으로 잡고, 상대 팀 연휴 구간에는 여유를 두는 편이 현실적이다.
다음에 읽을 것
이 글로 일정 시리즈 4편이 마무리된다. 일을 빠짐없이 나누는 방법이 WBS 작성법, 나눈 일을 순서로 잇는 방법이 종속성 4종, 그 위에서 일정을 계산하는 방법이 간트차트 만드는 법이고, 그 계산의 바탕이 되는 달력이 이 글이다. 4가지 중 하나라도 빠지면 일정표의 날짜는 어딘가에서 실제와 어긋난다. 그중 가장 자주 잊히는 것이 달력이다.
자주 묻는 질문
- 영업일·근무일·평일은 같은 말인가요?
- 다릅니다. 평일은 월–금이라는 요일의 이름이고, 영업일은 관공서·은행이 문을 여는 날이며, 근무일은 그 프로젝트가 일하기로 정한 날입니다. 주6일 현장의 토요일은 평일이 아니지만 근무일이고, 임시공휴일은 평일이지만 근무일이 아닙니다. 일정 계산의 기준은 언제나 프로젝트의 근무일입니다.
- 임시공휴일이 갑자기 지정되면 일정은 어떻게 하나요?
- 캘린더에 휴일을 추가하고 재계산하면 영향받는 작업의 날짜가 하루씩 밀립니다. 문제는 계약 마감이 고정인 경우입니다. 이때는 밀린 하루를 흡수할 float이 있는지 먼저 보고, 없으면 범위나 투입의 조정을 논의해야 합니다. 임시공휴일을 "그날 하루 야근"으로 덮는 결정은 일정표 밖에서 내려지는 셈이니, 어느 쪽이든 캘린더에는 사실대로 기록하십시오.
- 주6일로 일하는 프로젝트는 어떻게 계산하나요?
- 근무 요일 설정에서 토요일을 근무일로 켜면 됩니다. 같은 10근무일이라도 주5일 달력보다 달력상 2일쯤 일찍 끝납니다. 도구가 주5일만 지원한다고 기간을 달력으로 환산해 줄이는 편법은 진척률과 지연 판정을 함께 왜곡하므로 피하십시오.
- 해외 팀과 함께 일하면 어느 나라 공휴일을 쓰나요?
- 원칙은 작업을 수행하는 쪽의 달력입니다. 다만 도구가 프로젝트 캘린더 하나만 지원한다면, 일정을 결정하는 병목 팀의 달력을 기준으로 잡고 상대 팀 연휴가 걸리는 구간에는 여유를 둡니다. 서로의 명절 주간을 계획 단계에 서로의 캘린더에서 확인해 두는 것이 가장 싼 보험입니다.
- Lag(FS+7일)의 7일은 근무일인가요, 달력일인가요?
- 도구와 계약마다 다르므로 반드시 명시해야 합니다. 콘크리트 양생이나 숙성처럼 물리 시간이 걸리는 대기는 달력일이 맞고, 검토·승인 대기처럼 사람이 일해야 흐르는 시간은 근무일이 맞습니다. wbsgantt의 Lag는 기간과 같은 근무일 축에서 계산됩니다.