관리 메뉴

솜씨좋은장씨

[Python] Slack WebHooks 을 통해 작업 진행상황 알림 받아보기! (feat. Incoming WebHooks) 본문

Programming/Python

[Python] Slack WebHooks 을 통해 작업 진행상황 알림 받아보기! (feat. Incoming WebHooks)

솜씨좋은장씨 2020. 4. 24. 16:53
728x90
반응형

최근에 크롤링을 하면서 네이버 뉴스의 기사를 크롤링하고 그 크롤링한 데이터를 MariaDB에 insert하는데 

워낙 크롤링하는 데이터의 개수가 많다보니

time.sleep(0.5) 의 0.5초 시간까지 더하여 24시간 ~ 30시간 정도가 소요되었습니다.

 

짧은 시간 크롤링이라면 그냥 크롤링이 진행되는 동안 지켜보면서 문제가 발생했을 때 대응할 수 있지만 

많은 양의 데이터를 긴 시간 동안 크롤링할때는 중간중간 이동하는 시간이나 식사시간에 직접 일일이 확인할 수 없으니

뭔가 다른 루트를 통해 진행 과정이나 오류가나서 멈추거나 하는 것들을 확인하고 싶었습니다.

 

그러던 중 예전에 삼성 SOSCON 당시 케라스 코리아 밋업에서 들었던 내용중에 

딥러닝의 학습과정을 Slack에 기록을 남겨 어디서든지 확인할 수 있도록 custom을 한 것을 발표가 기억났고

이번 크롤링을 하는 크롤러에 한번 적용해보기로 했습니다.

 

서론이 길었습니다.

 

이제 Incoming WebHooks App을 생성하고 외부에서 Slack으로 메세지를 보내는 방법을 적어보려합니다.

 

1. 메세지를 받을 채널 생성하기

왼쪽 배너 메뉴에서 Channels에서 +를 클릭하고 Create a channel을 선택합니다.

원하는 채널 이름을 입력하고 Create를 클릭합니다.

이 채널을 공유할 사람이 있다면 이메일 주소를 입력하고 다음으로 넘어가고

없다면 Skip for now를 클릭합니다.

2. Incomming WebHooks App 생성하기

먼저 왼쪽 상단에 계정이름을 클릭하고

Settings & administration > Manage apps 를 선택합니다.

그럼 나오는 페이지에서 검색창에 incom~~ 이라고 검색하면 나오는 Incoming WebHooks를 선택합니다.

 

Add to Slack을 클릭합니다.

Post to Channel에서 조금 전 메세지를 받으려고 만든 채널을 선택합니다.

선택을 하였으면 Add Incoming WebHooks integration을 클릭합니다.

그럼 나오는 페이지에서 Webhook URLSending Messages에 있는 내용을 복사해둡니다.

추후 Webhook URL은 request를 보낼 url로 사용할 것이고

Sending Messages에 있는 내용은 url에 requests를 할때 같이 보낼 파라미터로 활용합니다.

 

Sending Messages

payload={"text": "This is a line of text in a channel.\nAnd this is another line of text."}

Customize Name에서 이름을 변경하고

Customize Icon 에서 이모티콘을 변경하면

Preview Message에서 어떤 모습으로 메세지가 오는지 미리볼 수 있습니다.

모든 항목이 잘 설정되었는지 확인하였다면 Save Settings를 클릭해서 생성을 마무리합니다.

상단에 Your settings have been saved. 라고 나오면 생성 완료!

 

3. 잘 동작하는지 테스트 해보기

curl -X POST --data-urlencode "payload={\"channel\": \"#error_log_channel\", \"username\": \"webhookbot\", \"text\": \"This is posted to #error_log_channel and comes from a bot named webhookbot.\", \"icon_emoji\": \":ghost:\"}"

터미널에서 위의 명령어 뒤에 아까 복사해 두었던 WebHook Url 주소를 붙여 실행하면

WebHook Url을 통해 메세지가 잘 보내지는 것을 확인할 수 있습니다.

 

4. Python을 활용하여 메세지 보내기

이번에는 Python을 활용해서 Slack에 메세지를 직접 보내보겠습니다.

pip install requests

먼저 메세지를 보내기 위해 필요한 라이브러리를 설치합니다.

import requests

def send_message_to_slack(text):
    url = "WebHook Url"

    payload = { "text" : text }

    requests.post(url, json=payload)

위처럼 텍스트를 인자값으로 받아 Slack에 메세지를 보내는 함수를 하나 만들어주고

send_message_to_slack("Send Message Using Python")

텍스트를 넣어 실행하면

아까 설정한 이모티콘과 이름이 잘 설정되어 메세지가 오는 것을 확인할 수 있습니다.

 

이제 이 함수를 활용하여 크롤링 과정 중 중간 중간 한 번씩 진행 과정을 보내라고 하던지

오류가 났을 경우 오류내용을 보내도록 하는 방식으로 사용하면 됩니다.

 

활용 예시

저는 크롤링을 하고 중복된 값을 제거한 후에 DB에 넣는 과정 과정마다 진행과정을 보내라고 하기도하고

파싱하는 과정에서 제대로 되지 않는 부분이 있으면 알림을 보내라고 하기도 했습니다.

 

필요할 때 적절하게 사용하면 좋을 것 같습니다.

 

앞으로는 이런 것을 활용하여 저번 케라스 코리아 밋업에서 봤던 것처럼 딥러닝 학습 과정을 기록하는 것도 해보려고합니다.

 

읽어주셔서 감사합니다.

Comments