업무보고 오토메이션에서 중복항목 제거 사례

‘업무보고 오토메이션 사례’에 소개한 방법으로 퇴근할 때 하루 동안 한 일을 자동으로 모아 이들의 목록을 표시하게 했었습니다. 이런 업무보고는 ‘퇴근할 때 그날 한 일을 간단히 기록해 달라’는 요구를 충족했지만 이 보고가 결코 실제 도움이 되는 보고로써 동작하지 못하리라는 점은 아쉬웠습니다. 또 우리들이 하루하루 수행하는 온갖 자잘한 일들은 분명 필요하기는 하지만 회사 지라에 기록하기에는 너무 자잘하고 또 기록하지 않으면 아예 아무것도 안 한 것처럼 보이기 쉬워 하루하루 수행하는 업무를 어느 정도 수준까지 기록해야 할지 고민한 계기가 되었습니다.

그건 그렇고 그 날 수행한 업무 목록을 만들기 위해 개인 지라에서 지난 12시간 동안 업데이트 한 태스크 목록을 가져왔었는데 문제가 있었습니다. 지라에서 한 태스크 끼리 링크를 걸면 링크가 설정된 양쪽 태스크 모두가 업데이트 됩니다. 가령 어제 진행한 ‘기획팀 회의’와 오늘 진행한 ‘기획팀 회의'는 지라 상에서 서로 다른 태스크입니다.

어제 진행한 ‘기획팀 회의’ 태스크는 원래 오늘 업무 목록에 나타나지 않아야 하고 이 조건은 그리 나쁘지 않은 것 같았습니다. 하지만 두 태스크를 링크하면 양쪽 태스크가 업데이트 되어 ‘지난 12시간 안에 업데이트 된 태스크’ 목록에 오늘의 기획팀 회의와 어제의 기획팀 회의가 모두 나타나 업무보고에 같은 일이 두 번 중복된 것처럼 보이게 되는 문제가 있었고 이를 수정하기로 했습니다.

퇴근, 지라 상태를 한국어로 변환

오늘 한 일

설명

퇴근, 지라 상태를 한국어로 변환

오늘 한 일

설명

 

근태기록 숏컷에서 퇴근을 실행하면 먼저 현재 자리비움 상태인지 확인합니다. 만약 자리비움 상태에서 퇴근을 시도하면 먼저 자리비움을 종료한 다음 퇴근 메시지를 이어서 보냅니다.

 

출근 상태인지 확인합니다. 출근했고 출근 메시지를 정상적으로 보냈다면 출근 메시지의 스레드에 나머지 근태 기록을 남기기 위한 스레드 번호가 있을 겁니다. 만약 이 번호가 없다면 출근하지 않았거나 뭔가 잘못된 상황이니 퇴근 메시지를 보내면 안됩니다.

 

출근 메시지의 스레드 번호를 가져와 저장합니다. 생각해보니 이 부분은 바로 위 출근 메시지 번호 확인화 한번에 처리하도록 고치는 것이 좋겠습니다.

이제 ‘오늘 한 일’ 숏컷을 불러 오늘 한 일 목록을 작성합니다. 이때까지는 명시적 리턴을 할 수 있다는 것을 몰라 서브루틴 실행 결과를 글로벌 변수를 통해 가져오고 있습니다.

 

오늘 한 일 목록은 오늘 업데이트 된 개인 지라 태스크 목록을 가져오는 것입니다. 미리 작성해 둔 JQL을 가져옵니다.

 

JQL은 다른 곳에서 사용하거나 수정하기 편하게 하려고 글로벌 변수에 따로 빼놨습니다. 숏컷 코드 상에서 JQL을 직접 고치다 보면 실수할 일이 많아 이렇게 했습니다. 이전과 달라진 점은 필터를 통해 지난 12시간 이전에 완료된 태스크를 제외하는 필터를 추가한 것인데 JQL이 조인을 지원하는지 모르겠어서 이렇게 했습니다. JQL이 조인을 지원한다면 필터를 통하는 대신 JQL 한 줄에 모든 조건을 포함하게 할 생각입니다.

 

중복된 것처럼 보이는 태스크가 오늘 한 일 목록에 나타나지 않도록 고친 JQL을 실행해 결과를 얻습니다.

 

JQL은 실행 결과를 ‘이슈키:이슈이름’의 형태로 돌려줍니다. 그래서 ':' 문자를 기준으로 문자열을 나눠 각각을 변수에 저장해 이후 사용에 대비합니다.

 

지라 태스크의 현재 상태에 따라 업무 목록에 태스크 상태를 표시해 주고 싶습니다. 그런데 지라 태스크 상태를 그대로 보여주는 대신 한국어로 바꿔 보여주고 싶어 ‘지라 상태를 한국어로 변환’이라는 서브루틴을 불러 줍니다.

 

‘지라 상태를 한국어로 변환’ 숏컷은 영문으로 되어 있는 지라 상태 각각을 적당한 한국어 이름으로 바꿔 돌려주는 역할을 합니다.

 

‘Done’은 ‘완료’, ‘In Progress’는 ‘진행’, ‘Today'는 대기, ‘Backlog’ 역시 ‘대기’로 바꿨습니다. 이 부분을 작성할 때는 명시적인 리턴이 가능하다는 것을 몰라 이렇게 묵시적으로 딕셔너리에서 꺼낸 값이 알아서 리턴되는 모양으로 만들었습니다.

 

이슈의 상태를 받아 슬랙에 보낼 메시지를 만듭니다.

 

오늘 한 일과 각 일의 현재 상태를 조합해 만든 텍스트를 글로벌 변수에 저장했습니다. 이 부분 역시 명시적 리턴을 사용할 줄 모르는 상태여서 이렇게 만들었습니다.

 

슬랙의 근태 채널에 보낼 텍스트를 생성합니다. 퇴근 시각, 퇴근 메시지, 그리고 업무목록을 줄바꿈 문자로 쭉 연결해 만들었습니다.

 

메시지를 보낼 채널 이름을 가져옵니다.

 

위에서 준비한 퇴근 메시지를 URL 인코딩 합니다.

 

슬랙 API 키를 가져옵니다.

 

슬랙 API 주소에 메시지를 보냅니다.

 

슬랙이 돌려준 메시지를 확인해 메시지가 성공적으로 올라갔는지 확인하고 메시지가 올라갔다면 내일을 위해 출근 스레드 번호를 삭제해 오동작 하지 않게 합니다.

 

슬랙에 퇴근 메시지와 업무 보고는 이런 모양으로 나타납니다.

이 수정의 핵심은 오늘 한 일을 판단하는 기준을 좀 더 단단하게 만든 것입니다. 기존에는 퇴근 메시지를 보내려는 시점으로부터 지난 12시간 안에 태스크가 업데이트 되었으면 오늘 한 일이라고 판단했습니다. 그런데 두 태스크를 연결하거나 다른 날 이미 완료한 지라 태스크에 답글을 달면 이 태스크 역시 오늘 한 일 목록에 나타납니다. 어쨌든 아주 조금이라도 오늘 업무에 관여한 일이니 업무보고에 들어가도 아주 이상한 것은 아니지만 이름이 같은 태스크가 중복으로 표현되는 것처럼 보이거나 며칠 전에 끝난 날이 아무 설명 없이 오늘 다시 나타나는 상황은 좋지 않아 보였습니다.

오늘 한 일의 기준을 기존 12시간 안에 태스크가 업데이트 된 것과 함께 지난 12시간 이전에 완료된 일은 제외하도록 수정했습니다. 그러면 중복처럼 보이거나 이미 완료된 일에 답글을 단 정도로는 오늘 한 일 목록에 나타나지 않아 다른 사람들에게 보여줄 목록으로는 더 나은 모양이 되었습니다.

다만 JQL이 두 가지 검색 조건을 조인할 수 있는지 확실하지 않아 부득이하게 한 쪽 조건을 필터로 만들어야 했습니다. 메인 JQL에는 ‘지난 12시간 안에 업데이트 한 것’을 언급하고 필터에는 ‘지난 12시간보다 더 이전에 완료 처리된 것’을 언급해 전자에는 해당되고 후자인 필터에는 해당하지 않는 것을 가져오도록 했는데 JQL에 모든 조건이 표시되지 않아 마음이 불편했습니다. 조인을 지원하는지 확인해 지원한다면 필터 대신 JQL 한 덩어리에 모든 조건을 언급하도록 수정할 작정입니다.