GCP로 한큐에 해결하기
예전에도 슬랙 url을 크롤링하는 작업을 했었는데 메세지를 수집해야 할 일이 있어서 다시 슬랙 api 를 들여다 보게 되었다. api가 변경된 것도 있고 수집하는 목적과 수집할 것이 달라졌기 때문에 새로 코드를 작성했다.
그때와 단계는 유사한데 조금 달라졌다.
이전에는 구글 스프레드 시트에 데이터를 붓고 배치도 로컬에서 임의로 돌렸는데(아니 돈 쓰기 싫다고 이걸 손수하다니.. 과거의 나는 용돈이 부족했나보다) 이번에는 cloud function, cloud scheduler를 사용했다. cloud function 외에도 firebase function이나 aws lambda도 고려했는데 내가 GCP에 더 친숙하고 python 위주로 사용하기 때문에 GCP를 활용했다. 매달 무료 용량이 있는 것도 아주 장점이다(아직도 용돈이 부족한 모양이다).
컨셉은 채널이 생성되면 봇이 자동으로 초대 되어 초대된 채널의 메세지를 주기적으로 크롤링하는 것이다.
1. slack 앱으로 봇을 생성하고 채널에 자동 초대되도록 하기(+잡다한 인증 과정. 이게 젤 짱남)
2. 데이터를 수집하여 저장하기
메세지를 수집하되 이번에는 테이블을 3개로 분리했다.
테이블은 bigquery에서 생성했다. 빈 테이블 만들고 pandas to_gbq 로 데이터를 넣었다.
a. member list
b. channel에 대한 메타 정보
c. message (channel, member id 포함)
3. 자동화를 위해 배치 설정하기
1, 2에 해당하는 부분은 google cloud function으로 작성하였다. 3번 단계엣& 외 않돼 했는데 리전이 달라서 안 되던 거였다.. 그리고 이것도 알고 나니 당연한 건데 타임존 설정을 잘 해야 한다. 12시간 단위로 수집되게 하려고 수집한 데이터를 12시간 단위로 필터링을 했더니 결과가 이상했다. 로컬에서는 kst여서 문제가 안 됐는데 gcp에서는 utc 기준이라 이상한 결과를 뱉은 거였다. 자나깨나 timezone 조심 ㅠㅠ
scheduler 설정은 더 간단하다. 아래 문서를 참고하면 된다.
https://cloud.google.com/scheduler/docs/quickstart
봇을 위해 썸네일도 직접 그렸다. 메세지를 수집하러 다니는 우체부 새라는 컨셉인데 그리고 나니 터키 아이스크림 같기도 하지만 나는 만족스럽다. 귀여워~