구글 시트 + 슬랙 = 온라인스터디 모임 출석 대시보드 만들기

책을 읽거나 외국어 공부를 해야한다고 항상 다짐을 하지만 혼자서 그 다짐을 지켜나가기란 쉽지 않다. 그러는 와중에 개인적으로 찾아낸 효과적인 방법은 온라인 모임을 통해 함께 할 사람들을 찾아서 그들과 함께 하는 것.

별로 새로울 아이디어랄 것은 없다. 요즘은 워낙 카카오톡 등을 이용해서 스터디 모임, 기상 인증 모임, 다이어트 식단 인증 모임 등을 많이 하는 트렌드라서 거기에 숟가락을 살짝 얹었을 뿐.

다만 그동안 다양한 성격의 온오프라인 모임을 진행, 참여해본 경험을 살려 끝까지 함께하면서 좋은 결과를 낼 수 있도록 하기 위한 몇가지 장치를 추가하긴 했다.

온라인 모임 만들고 진행할때의 팁

  • 일정한 기간 동안 진행한다
    • 끝이 없는 프로젝트는 지지부진해지기 마련이다. 목표하는 기간을 설정하자. 너무 길지도 짧지도 않게.
  • 너무 적지도 많지도 않은 적당한 인원
    • 모임을 진행하다보면 중도에 포기하는 사람도 있고, 참여율이 낮은 사람들도 분명히 있다. 그런 모습들이 너무 큰 비율을 차지 하게 되면 다른 사람들의 참여도에도 안좋은 영향을 미칠수 있다.
    • 그렇다고 너무 많은 인원이 참여하는 경우, 트랙킹이 어려워지는 부분도 있고, 참여 멤버들 사이에 ‘나하나쯤이야’하는 생각이 은연에 들 수 있으므로 긍정적이지 않음.
  • 페널티 혹은 리워드
    • 모든 사람이 무언가를 이루겠다는 동기를 가지고 모여서 처음 며칠은 참여율이 매우 높을 것이다. 하지만 모두에게는 인생이라는 것이 있고, 중간중간 귀찮음이라는 적도 만날 수밖에 없다. 모두가 원하는 결과를 얻기 위해서는 리워드 혹은 페널티 조건이 있는 편이 도움이 된다.
    • 개인적으로 이번 모임에서는 페널티 제도를 선택. 처음 모임 참여할때 일정한 보증금을 납부한다. 그리고 실패하는 일수마다 벌금을 제외하는 방식. 모임이 끝나면 남은 보증금을 반환한다.
    • 모아둔 벌금을 어떻게 이용할 것인가도 정해야 한다. 비슷한 서비스를 제공하는 카카오 프로젝트 100을 보면 나머지 보증금을 좋은 일에 기부하도록 선택할 수 있다. 우리 모임의 경우는 벌금을 좋은 일에 기부한다면 ‘어차피 좋은 곳에 기부할 건데, 뭐!’하는 식으로의 자기 합리화가 이루어질 수 있다는 생각에 ‘모두가 기부하기 싫어하는 곳에 기부하는 것’으로 방침을 정했다. (1기에는 유명한 웹툰작가 ㅇㅅㅇ에게 기부금을 보냈다. 2기에는 바이러스 전파에 앞장서는 사랑제일교회에 헌금을 보낼 예정이다.)
    • 페널티를 선택하지 않는다면, 우수 참여자에게 리워드를 지급해 모두의 보증금을 몰아주는 것도 괜찮은 방법이라고 생각.
  • 각자의 진행 상황을 알 수 있는 도구의 필요성
    • 여러가지 장치를 마련하더라도 그냥 가만히 놔두면 누구나 조금씩은 루즈해지는 부분이 생겨난다. 하지만 지금까지 잘 참여했다는 기록이 눈앞에 예쁘게 보인다면, 그 예쁨을 망치는 것을 피하고자 하는 심리가 작용한다.

온라인 모임 자동 출석부 대시보드 만들기

이런 나의 팁을 총동원하여 모임을 만들고, 필요한 대시보드를 만들었다.

인증은 카카오톡으로 올리는 것이 간편은 하겠지만 결산의 번거로움을 고려해 검색과 파일 업로드 등이 용이한 슬랙을 사용하기로 했다.

현황을 보여주는 대시보드는 구글 시트로 작성했는데, 1기때는 수작업으로 업데이트를 했더니 내가 중간에 게을러지면 실시간 현황을 아무도 볼 수 없다는 단점이 생겼다. 그렇다고 각자 업데이트를 해달라고 하기에는 슬랙도 쓰고 이것도 써야하니 번거롭고.

1기(완료)의 대시보드 (수작업으로 업데이트)

2기에는 몇가지 툴을 이용해 슬랙에 올라오는 메세지를 가져와서 구글 시트의 대시보드를 자동으로 구성할 수 있도록 시스템을 구축했다.

2기의 대시보드 (일 1회 자동으로 업데이트)

방법은 간단하다.

1. 슬랙과 구글 시트를 연결한다

Intergromat 이라는 자동화 서비스를 이용했다.

슬랙의 특정 채널에 올라오는 메시지를 구글 시트로 보내서 추가한다. 매일 11시 59분에 1회 실행. 무료 계정은 1000회까지 사용할 수 있다. 30일간 사용한다고 하면 하루에 33개의 데이터만 전송할 수 있음. 우리 모임은 멤버가 10명이라 최대 10건이니 사용에 크게 문제가 없다.

2. 데이터 후처리

구글 시트에 입력되는 데이터를 보면 바로 사용하기에 곤란한 점이 있다. 타임스탬프도 너무 복잡하고, User name이 닉네임으로 나오지 않는다.

이 두가지 데이터만 보기 쉽게 후처리를 해준다.

날짜만 꺼내기

User ID는 따로 참고할 정보가 없어서 일일이 슬랙 메시지를 올린 사람과 추가된 data를 보고 수작업으로 매칭시킨다.

UserID 테이블은 일일이 비교해서 만듬.
vlookup 함수 이용해서 닉네임 불러오기

3. 대시보드 만들기

이제 필요한 데이터가 다 갖춰졌으니 대시보드만 만들면 된다.

=if(countif(ArrayFormula(SlackMessage!$F$2:F&SlackMessage!$E$2:E),text(D$1,"yyyy-mm-dd")&$A2)=1,"✅",0)

D2셀에 쓰인 함수를 풀어보자.

  • SlackMessage!$F$2:F Slack Message에서 날짜 부분
  • SlackMessage!$E$2:E Slack Message에서 닉네임 부분
    • SlackMessage!$F$2:F&SlackMessage!$E$2:E &로 묶으면 각각의 Text를 붙여서 새로운 배열이 됨 (‘2020-09-14’와 ‘빈누’가 합쳐져서 ‘2020-09-14빈누’로 재탄생)
    • 이 부분을 ArrayFormula로 묶어야 F2&E2 에서 끝나지 않고 F2:F&E2:E 전체 배열에 적용이 됨. (ArrayFormula 함수는 이해가 조금 어려울 수 있어서 따로 검색해보면 좋음!)
  • text(D$1,”yyyy-mm-dd”) D1에 입력된 날짜 정보를 “yyyy-mm-dd” 포맷으로 만든다
    • text(D$1,”yyyy-mm-dd”)&$A2 날짜 정보와 닉네임 부분을 합침 (마찬가지로 ‘2020-09-14빈누’와 같은 포맷이 된다)
    • 이 함수를 만들어서 전체 영역에 복사+붙여넣기를 할 것이므로 날짜 영역은 D$1로 참조하여 열고정을 하고, 닉네임 부분은 $A2로 행고정을 해준다
  • countif를 이용하여 ‘2020-09-14빈누’라는 data점이 있는지 찾는다
  • if문을 이용하여 countif의 결과가 1이면(data가 있으면) 라고 출력하고, 없으면(data가 없으면) 0을 출력함

보기 좋게 만들기 위해 몇가지 서식 추가

  • 전체 테이블을 선택하고 서식 >> 교차색상 선택. 테이블 색깔을 예쁘게 꾸며준다.
  • 멤버별 날짜별 현황 부분을 전체 선택하고 서식 >> 조건부서식 적용. 셀 값이 0이면 연한 회색으로 설정했다.

마치며

혹자는 왜 이렇게 인생을 어렵게 사느냐고 생각할지도 모르겠다. 어찌보면 단순한 작업인데 굳이 이렇게까지 자동화를 할 필요가 있나? 싶기도 하고.

노가다하면 1시간이면 끝나는 업무를 1분만에 끝낼 수 있는 자동화 툴을 개발하기 위해 4시간을 코딩했다는 개발자의 웃픈 트위터가 생각나기도 한다.

하지만 이건 저의 개인적인 취미입니다. 존중해주시죠. 🙂

그리고 이렇게 쓸데 없는 것들을 조금씩 만들다보면 언젠가는 쓸모가 많은 것을 만들 수 있게 되리라고 생각한다.

%%footer%%

Leave a Reply