[Proj] 다육이 프로젝트 날짜봇

이슬비·2022년 11월 1일
0

ToyProject

목록 보기
1/2
post-thumbnail

1. 왜?

매일 다육이 프로젝트(Github 1일 1커밋 프로젝트) 날짜를 올리기 어느덧 6주차 ...
나 이슬비 ,,, 프로그래밍 공부하는 사람인데 왜 이런 바보같은 반복작업을 42일이나 지속한거냐 !!! 싶은 마음에 날짜를 알려주는 Slack Bot을 만들기로 했다!

무엇보다 다육이 프로젝트 날짜봇은 스터디 시작할 때부터 만들어봐야지 ~! 라고 수없이 생각했는데 중간고사 + 연구실 프로젝트 + 동아리 등등등 ,,, 수많은 일들에 치여 미룬 게 fact ^^

2. 어떻게?

단순히 Slack APIpython, 그리고 crontab을 이용했다.
원래는 flask까지 도입하고 싶었지만, flask에 대한 지식이 정말 전-무한 상태라 도전해도 겨울방학 때 토이 프로젝트로 진행해보자 싶었다.

아무도 안 궁금하겠지만 기간은 이틀 ,,,ㅎㅂㅎ
사실 Slack봇은 레퍼런스도 너무 많고 그게 내가 아주 익숙한 언어라면 이해와 응용은 기본이니께!

2-1. Slack API ⚡️

슬랙봇을 만들기 위해서는 일단 Slack APP을 만들어야 한다. 이와 관련된 자료는 인터넷에 정말 넘쳐나니까 넘어가도록 하겠다.

2-2. Python 🛠

사용한 코드는 다음과 같다.

import requests
from datetime import datetime
import time

def notice_message(token, channel, text):
    response = requests.post("https://slack.com/api/chat.postMessage",
        headers={"Authorization": "Bearer "+token},
        data={"channel": channel, "text": text})

weekdays_dict = { 
    0 : '월요일',
    1 : '화요일', 
    2 : '수요일', 
    3 : '목요일', 
    4 : '금요일', 
    5 : '토요일', 
    6 : '일요일' }
    
Token = ''
today = datetime.today().strftime('%Y년 %m월 %d일 ')
day = datetime.weekday(datetime.today())
title = today + weekdays_dict[day]

notice_message(Token, '#다육이봇-테스트', title)

이것의 결과값은 2022년 11월 1일 화요일로 반환된다.

단순하게 request와 Slack API, Slack에서 제공하는 Token, Channel의 값들을 잘 조합했다. 뭐 일단 출력값 자체가 그렇게 고난이도 아니기 때문에 ㅋㅋ,,, 이 값을 Slack에 찍는 것 자체는 어렵지 않았다.

2-3. Crontab

가장 고민이 많았던 건 어떻게 저렇게 보내는 걸 자동화 시킬까 라는 점이었다. 처음에는 flask를 사용해서 항상 서버를 켜놓는 방법,,,을 고안했지만 일단 난 백엔드 지식이 정말 0에 가깝기 때문에 이상하게 일이 커질 것 같아 그만 뒀다.

그래서 그냥 내가 python notice.py라는 코드를 시간이 되면 실행 시켜야 하는 건가? 라고 생각했다가 결국 노가다구만 이라는 생각이 들어 다른 방법을 생각해보았다.

크게 다음의 두 가지였다.
1. Schedule Module
2. Crontab + 맥 잠자기/깨우기

일단 최종적으로 선택된 방법은 후자이다. 첫 번째 방법이 탈락한 이유는 (일단 내 지식으로는) While문을 무한으로 돌려야하는 것이라 생각했기 때문이다. While로 반복문이 돌다가 시간이 맞으면 해당 함수 실행하기 ...
결국 그만큼 계속 컴퓨터 리소스를 잡아먹을 것이고, 내가 항상 컴퓨터를 켜놓을 수 있는 입장이 아니기 때문에 접었다.

다음으로 Crontab! 일단 Crontab이 무엇이냐 하면,
간단하게 말하면 리눅스 작업 스케줄러이다.
맥도 어짜피 리눅스 자체를 지원하기(?) 때문에 사용이 가능하다!
무엇보다 추가적으로 무언갈 설치하지 않아도 된다는 아주 좋은 점을 가지고 있다.

Crontab을 사용하면서 문제는 아래의 모든 에러를 다 겪었다 ^^...
<< Permission denied + Operation not permitted + ModuleNotFoundError >>
(에러 해결 참고 블로그: https://23log.tistory.com/171)
참고로 Operation not permitted 의 해결 방법으로 Permission denied 문제도 해결했다.

내가 택한 플로우는,

올려야 하는 시각에 맥북 자동 깨우기 실행 -> Crontab을 통해 코드 실행 -> 맥북 자동 잠자기

이다.

이 역시 한 가지 문제가 있었는데 ^^...
자동 깨우기가 파워 어댑터에 연결이 되어 있어야만 한다는 것이었다.
이건 연구실 아이맥에다가 다시 설정해두면 문제 없을 듯하다.

3. 마치며

아주 아주 짧게 끝난 나의 토이 프로젝트 🌵
그래도 하기 귀찮은 일을 이렇게 자동화 시킬 수 있는 능력이 나에게 있다니!
내가 그동안 헛수고 하지 않았다는 생각이 아주 살짝 들었다 🫠

겨울방학에는 이를 좀 더 디벨롭 시켜서,
flask를 이용하는 방법을 이용해보도록 해야겠다! :)

4. 에필로그 😂

  1. 깃헙에 토큰 공개!
    : 어제 아이맥에서 작업하다가, 퇴근해야 했기 때문에 깃헙에 푸쉬를 했는데 정말 git push origin main을 하니 정말 바로 Slack에서 토큰 비활성화 연락이 왔다. 토큰만 비활성화 된 게 아니라 그냥 어플 자체가 삭제됐다 ^^,,, 앞으로 토큰 다루는 프로젝트에서는 꼭 조심해서 푸쉬해야겠다.

  2. vim에서 되지 않는 esc...
    : 내 키보드 문제인가 싶긴 한데, vim에서 esc가 먹질 않는다 ㅋㅋㅋ ㅠㅠ ctrl+3 이나 ctrl + [ 을 눌러주면 해결이 된다고 했는데 나는 심지어 ctrl+3 만 먹혔다 ㅠㅂㅠ

  3. 마지막으로 수많은 시도들...

profile
정말 알아?

0개의 댓글