POSTYPE Business

노션(Notion)으로 연차대장 구현하기

협업 도구에서 모두를 위한 HR 도구로

HR 담당자에게는 모든 직원의 연차를 정확하게 관리해야 하는 막중한 사명이 있습니다. 큰 품이 드는 일은 아니지만, 누군가의 연차를 잘못 계산했다가 뒤늦게 이 사실을 알게 되었다고 상상해보세요. 직원과 회사로부터 받게 될 원성은 둘째치고, 연차 회수・보상 문제가 만만치 않습니다.

노션 연차대장 - 휴가를 추가하면 연차 현황이 자동으로 업데이트됩니다

포스타입은 이 문제를 해결하기 위해 협업 도구인 노션(Notion)을 통해 구성원의 연차를 자동 계산하고 모두가 실시간으로 열람할 수 있도록 관리하고 있습니다. 이 글은 노션을 통해 연차대장을 구현하는 과정을 설명하는 글입니다. 연차대장 템플릿은 여기를 클릭해 직접 복사할 수 있습니다.


구현 배경

포스타입은 이전부터 다양한 협업 도구를 이용해 왔지만 흩어져 있는 정보와 기록을 찾는 데 생각보다 많은 리소스가 낭비되고 있었습니다. 그래서 최근 노션을 중심으로 협업의 흐름을 통일하기로 했는데요. 의도한 바를 달성하기 위해서는 가능한 많은 업무를 노션을 떠나지 않고도 해낼 필요가 있었습니다.

연차대장은 구글 스프레드시트를 통해 관리해 왔습니다. 사용일을 일 단위로 체크하는 식으로도, 시작일과 종료일을 입력하는 식으로도 관리해 봤지만, 구성원들이 생각만큼 직관적으로 체크하기가 쉽지 않았습니다.

노션은 스프레드시트만큼 자유롭게 함수를 이용해 연차대장을 구현하기가 어려워 보였지만, 대신 구성원들이 더 쉽고 직관적으로 연차를 확인할 수 있기에 연차대장을 노션으로 구현해보기로 했습니다.


구현 방식

Relation & Roll-up

연차대장에는 기본적으로 ①연차 현황②휴가 사용 리스트가 필요합니다.

노션의 데이터베이스는 ①과 ②를 연동해 관계형 데이터베이스로 만드는 Relation과 Rollup 기능을 제공합니다. 스프레드시트의 vlookup 또는 피벗 테이블과 유사하지만 좀 더 쉽지만 그만큼 강력한 기능입니다.

먼저 연차대장 안에 ①과 ②를 각각 인라인 데이터베이스로 만들었습니다. 그다음, ②휴가 사용 리스트에서 Relation 속성을 만들어 ①연차 현황을 연결해주면 됩니다. 이 작업만으로 ①과 ②는 연동이 완료되었고, ①에도 Relation 속성이 생성된 것을 확인할 수 있습니다.

이제 ①연차 현황에서 각 구성원이 사용한 연차의 값을 데려오면 됩니다. 스프레드시트에서는 조건부 합계를 구하는 sumif(s) 함수를 통해 구현했던 부분인데요. ①연차 현황에 Rollup 속성을 만든 다음, 설정 창에서 Relation - ②, Property - 사용 일자에 대응하는 속성, Caculate - Sum을 고르면 됩니다. 원리는 sumif(s) 함수와 전혀 다르지 않습니다.

이제 ②에서 Relation을 생성한 구성원 연차의 총합이 ①의 Rollup 속성에 자동 계산이 됩니다. 연차가 아닌 휴가에 대해서는 ②에서 Relation을 생성하지 않는다면, ①에서 연차도 차감되지 않는 거죠.

이걸로 ①과 ②를 연동하는 과정은 모두 끝입니다.

Formula - dateBetween & start/end

이제 ②에서 ①로 보낼 연차 사용 개수를 정할 차례입니다.

스프레드시트에서는 연속된 기간을 하나의 셀에 입력할 수 없지만, 노션의 Date 속성은 시작일과 종료일을 함께 입력하는 기능을 제공합니다. 연차 시작일과 종료일을 따로 입력할 필요 없이, 속성 값에 End Date를 활성화하면 됩니다. 보는 입장에서 노션이 좀 더 직관적인 이유 가운데 하나입니다.

그렇다면 시작일과 종료일 사이의 날짜 수, 즉 연차 사용 개수는 어떻게 자동으로 구할 수 있을까요.

Formula 속성의 dateBetween 함수는 기간(디데이)을 계산하는 함수입니다. 아래 수식은 date에서 date2를 뺀 값을 일 단위("days")로 보여달라는 얘기입니다. 연차 사용 개수를 구할 때는 여기에 1을 더해주면 됩니다.

그런데 End Date를 활성화한 속성은 date와 date2 자리에 각각 들어가야 할 일자가 함께 들어 있습니다. 여기서 시작일과 종료일을 추출하는 함수가 start와 end 함수입니다.

세 함수를 잘 조합하면 연차 시작일과 종료일 사이의 연차 사용 개수를 추출하는 기본 수식이 완성됩니다.

이제 기본적인 연차 사용 개수를 구하는 과정도 끝이 났습니다.

Formula - contains & toNumber

문제는 반차입니다.

포스타입도 많은 회사와 마찬가지로 구성원들에게 반차 사용을 제공하고 있는데요. 위 단계까지 구현한 연차대장으로는 반차(0.5개)를 자동으로 계산해내지 못합니다.

당장 떠오르는 방법은 두 가지였습니다.

  1. Date 속성에 시간까지 입력(Include Time)하도록 해 이 값을 바탕으로 계산한다.
  2. '반차' 태그가 포함된 경우, 0.5개로 조건부 계산한다. ✓

1안은 직관성이 떨어지고 계산이 쉽지 않을 것 같아 2안을 선택했습니다.

먼저 휴가의 성격을 태그 형태로 여럿 고를 수 있는 Multi-Select 속성을 ②에 만듭니다. 연차와 연차에 속하지 않는 휴가(공가, 대휴 등) 태그와 함께 '반차' 태그를 고를 수 있도록 합니다. 그리고 '반차' 태그가 포함된 경우 0.5를 뱉어내는 Formula 속성을 만들 차례입니다.

contains 함수는 특정 문자열이 속성에 포함되었는지 검사하는 함수입니다. 첫번째 인수에 두번째 인수가 포함되어 있다면 참(true), 그렇지 않다면 거짓(false)을 반환합니다.

Multi-Select 속성은 여러 태그를 쉼표(,)로 연결한 문자열로도 인식되기 때문에 contains 함수를 사용할 수 있습니다. 예를 들어 '연차'와 '반차' 태그를 선택한 필드는 "연차, 반차"라는 문자열로도 변환이 되는 거죠. 

노션은 참-거짓으로 나뉘는 Boolean 값을 체크박스 속성으로 출력합니다. 참(true)인 경우 체크박스가 활성화된 값을 보여줍니다. Boolean 값의 특성상 참(true)은 숫자 1, 거짓(false)은 숫자 0에 대응하기 때문에, 체크박스가 떠도 당황할 필요가 없습니다.

toNumber 함수는 필드를 숫자로 가공해주는 함수입니다. 날짜 필드는 13자리 타임스탬프 값으로, 체크박스 필드(Boolean 값)는 0 또는 1을 반환합니다. '반차' 태그가 포함되어 있다면 아래와 같이 값이 가공됩니다.

여기서 반환값을 2로 나눠주면 반차일 때 0.5, 그렇지 않을 때 0이라는 값을 얻어낼 수 있습니다.

물론 최종적으로 구해야 하는 실제 연차 사용 개수는 반차일 때 0.5, 그렇지 않을 때 1입니다. dateBetween 함수를 통해 구한 값에서 이 값을 뺄셈하면 원하는 값을 구할 수 있습니다.

반반차 제도가 있는 회사의 경우, '반반차' 태그를 활용하면 됩니다.

'반반차' 태그가 포함된 경우, 1에서 0.75를 빼도록 수식을 짜면 됩니다. 다만, '반반차' 태그에는 이미 '반차'라는 문자열이 포함되어 있기 때문에 이미 0.5만큼을 보상받은 상황입니다. 그렇기 때문에 0.75가 아니라 0.25만큼만 더 뺄셈하도록 수식을 짜면 됩니다.

템플릿에는 반반반차(0.125)에 해당하는 '시차' 태그까지 검사하는 최종 수식이 들어가 있습니다.

이제 템플릿 하단의 이용법을 참고해 휴가를 사용한 구성원의 이름, 휴가 종류, 휴가 사용 기간만 잘 입력해주면 자동으로 연차 현황을 한눈에 볼 수 있는 연차대장이 완성👏🎉😌


템플릿은 여기에 있습니다

템플릿은 여기를 클릭해 오른쪽 위의 Duplicate 기능을 통해 가져갈 수 있습니다. 이 템플릿을 처음 이용할 때는 템플릿 하단의 이용법을 참고해주세요. 연차대장은 회사와 구성원 모두에게 매우 중요한 HR 정보이기 때문에 Page Lock이나 Group 기능을 통해 편집 권한을 꼭 설정하는 것도 잊지 마세요. 노션이 처음이라면 먼저 노션에 대해 알아보세요.

포스타입 역시 구성원을 위한 연차 제도를 중요하게 생각합니다. 일하지 않는 시간에 잘 쉬어야 일하는 시간을 효율적으로 보낼 수 있기 때문입니다. 그래서 회사와 동료의 일에 지장을 주지 않는 범위에서 연차를 자유롭게 사용할 수 있습니다. 연차와 별도로, 생일 휴가, 근속 1년 보너스 휴가도 제공하고 있습니다.

이 글을 통해 연차대장_2020.xls을 켜놓고 한숨을 쉬고 있을 HR 담당자들이 모든 굴레와 속박을 벗어던지고 행복을 찾아 휴가를 떠날 수 있기를 기대해봅니다.

개인이나 회사의 지식 공유 ・기술 블로그를 구축하고자 한다면 포스타입을 이용해보세요. 주요 언어의 코드 에디터와 다양한 브랜딩 옵션을 제공하고 있습니다👐

국내 최초 개인 콘텐츠 판매 블로그 플랫폼, 포스타입입니다.

POSTYPE 님의 창작활동을 응원하고 싶으세요?

포스타입 팀
포스타입 팀
구독자 34

0개의 댓글

이 포스타입은 댓글을 사용하지 않습니다.

새로운 알림이 없습니다.