Django(Python), Slack API, Crontab을 이용한 출석체크 자동화

이현민·2022년 5월 2일
0

Django(Python), Slack API, Crontab을 이용한 출석체크 자동화


  • 아이디어 배경

    • 업무 자동화로 일상생활의 불편함을 해소하고자 함
    • 불편한 점
      • 강사님께서 매번 사진을 찍어야 하는 번거로움
      • 찍은 사진으로 매니저님이 따로 또 출석체크를 해야하는 반복작업
      • 꾀죄죄한 모습으로 캠을 켜야하는 부끄러움 (지금은 신경 안 쓰시는듯)
    • 해결 방법
      • Slack에서 클릭 한번으로 출석체크를 하고자 함
  • 09:00,14:00,17:50에 Crontab 및 Slack Bot을 이용해 Slack의 #출석체크 채널에 출석체크 메시지를 보내고 버튼을 클릭하면 출석체크가 되는 방식

    • Crontab에 Scheduling된 시간에 출석체크봇이 출석체크 라는 메시지를 전송
      • Slack에서 제공하는 Incoming WebHook를 이용하여 출석체크 메시지를 전송하게 됨
        • Incoming WebHook : 외부 소스에서 워크스페이스로 정보를 공유할 수 있는 간단한 방식
      • 출석체크봇이 출석체크 메시지를 입력했다면 Slack에서 채팅 이벤트가 있을 때 호출하는 API를 Django 내에서 Post 요청을 받아 Slack 채널에 응답(버튼을 포함한 메시지)을 주는 방식
    • 수강생이 버튼을 눌렀을 때
      • Slack에서 버튼 클릭 이벤트가 있을 때 호출하는 API를 Django 내에서 Post 요청을 받아 Pandasopenpyxl를 이용해 출석부를 만듬
      • 지각인 수강생이 버튼을 누르게 되면 해당 버튼을 포함한 메시지에서 버튼을 없애고 출석이 마감되었다는 메시지로 Update시킴
    • 예시
      출석체크 버튼 활성화

      출석체크 마감 - 출석 시간이 지나고 누군가 버튼을 누르게 되면 마감 처리
  • 출석체크 알고리즘 - 평일에만 작동


    09:00~09:11 : 버튼 클릭시 출석 인정

    09:11 이후 출석체크 버튼 클릭 시 버튼이 없어짐

    14:00~14:11 : 버튼 클릭시 출석 인정

    14:11 이후 출석체크 버튼 클릭 시 버튼이 없어짐

    17:50~18:01 : 버튼 클릭시 출석 인정

    18:01 이후 출석체크 버튼 클릭 시 버튼이 없어짐


    • 출석 인정

      • 오전, 오후, 저녁으로 나누어 해당 시간내에 버튼을 누를시에만 출석 인정
      • 오전, 오후, 저녁 모두 나왔을 경우만 하루 출석 인정 - check
      • 오전, 저녁을 모두 나오지 않은 경우 결석 처리 - absent
      • 이외에는 지각처리 - tardy
    • 출석 계산
      - 훈련일수 : 강의 일수
      - 출석일수 : check로 표시된 수
      - 지각일수 : tardy로 표시된 수
      - 결석일수 : absent로 표시된 수 (출석 버튼을 누르지 않으면 default absent)
      - 출석률 : (출석일수+지각일수-지각일수/3)/훈련일수 (3번 지각 시 결석 1)
      - 훈련지원금 : (출석일수+지각일수-지각일수/3) * 10,000원


    • Crontab - 평일 및 정해진 시간에만 Scheduling

  • 최종 결과물 예시

  • 2022-03-08.xlsx
  • 2022-03.xlsx
profile
BI 관련 솔루션 회사를 퇴사한 후 데이터 엔지니어 준비중입니다

0개의 댓글