학과 공지를 놓치는 많은 학우를 위해서 간단하게 만든 사이드 프로젝트
해당 프로젝트 관련 상세 포스팅 (https://yureutae-log.vercel.app/?tag=1%3A%3AProjects%3A%3AToy-Serverless+Notice+Bot) (읽는 것을 매우 추천)
학교 공지는 학교 알리미 앱을 통해서 놓치지 않지만, 학과의 공지들은 알림이 오는 경우가 적다. 학과 공지에는 장학금, 대회, 캡스톤 디자인, BEAR 프로그램 지원, 연구실 모집 등의 중요한 정보가 있음에도 놓치는 경우가 많습니다.
이를 개선하기 위해서 동아리 협업도구로 사용하고 있는 slack을 이용하여 학우들에게 자동으로 정보를 제공하고자 하는 간단한 토이프로젝트를 만들었습니다.
(2023.02.28) ver 1.1.0 -> GCP Cloud Run Jobs, Cloud Storage 및 Cloud Scheduler 사용로 변경
(2024.03.19) GCP 정책 업데이트로, Cloud Container Registry -> Cloud Artifact Registry로 Migration (https://yureutae-log.vercel.app/artifact-registry-migration)
.
- Slack API를 활용하여 notification channel을 따로 만듭니다. (토큰 등을 할당받아야 함)
- python request, bs4 모듈을 사용하여 학과 사이트에서 정보를 가져옵니다.
- 최근 정보만 pickle로 저장한 후 주기적으로 이후 공지와 비교해서, 동일하면 공지 x 다르다면 새로 공지하는 비교적 간단한 구조를 만듭니다..
- bash로 파이썬 프로젝트가 동작하게 합니다.
- 해당 프로젝트 또는 컨테이너 이미지를 서버/서버리스에 업로드합니다.
- linux crontab 또는 scheduler를 활용하여 이벤트 기반으로 동작하게 만듭니다.
- (2023.02.28) gcp container 기반 serverless 서비스인 Cloud Run Jobs를 사용하고 scheduler으로 이벤트 트리거한 덕분에 리소스 및 비용 최적화했습니다 (비용 0원).
- state를 유지하지만 최근 공지만 저장하여 비교하므로, 메모리 사용량이나 cloud storage(s3/Cloud Storage) 사용량이 적기에 Serverless 장점을 유지했습니다.
python
docker
gcp (run jobs, artifact storage, cloud storage, cloud scheduler, IAM)
gcp artifact storage에 docker image를 업로드한 후, cloud run tasks에 등록하고, cloud scheduler로 trigger를 걸어주면 됩니다.
configuration.json에서 Slack token 값 및 채널 값 할당 필요. GCP에서 Service Account Token 할당 후 cloudstorage_token.json으로 저장 필요.
dockerfile로 이미지 생성 후 gcp Artifact Registry 업로드(local에서 container 째로 사용해도 무방합니다.)
gcp cloud Run Jobs에 등록
gcp cloud scheduler로 생성한 cloud run jobs trigger 설정