회사에서 EP 데이터를 자동으로 수집하고 관리하는 작업을 하고 있다. 이 과정에서 수집 상태를 매번 확인하기 어렵다는 문제가 있었고, 이를 해결하기 위해 슬랙봇을 직접 만들어 연동해보게 되었다.
EP 파일이 매일 새벽 자동으로 수집되긴 하지만, 실제로 잘 업로드되었는지, 데이터가 유효한지 확인할 방법이 필요했다. 이전에는 그냥 수동으로 URL 접속 후 파일을 확인하거나, 로그를 따로 살펴봐야 했다.
그래서 매일 슬랙에 상태를 자동으로 알려주는 슬랙봇이 있으면 훨씬 편하겠다는 생각이 들었다.
thread_ts
를 유지할 방법이 필요했다.이런 고민 끝에 다음과 같은 구조로 구성했다.
전체 흐름은 다음과 같다.
create-daily-ep-thread
)verify-ikea-ep-file
)export-ikea-products
)스레드 ID는 thread_ts
라는 값으로 관리되며, 이 값을 GCS 버킷(ikea-thread-tracker
)에 텍스트로 저장해서 이후 댓글 전송 시 불러오는 방식이다.
모든 작업은 Cloud Function으로 구현되었고, 각각 HTTP 트리거 방식으로 배포한 뒤 Cloud Scheduler로 스케줄링했다. 사용된 함수는 다음과 같다:
create-daily-ep-thread
verify-ikea-ep-file
export-ikea-products
크론 표현식을 이용해 정해진 시간에 함수가 실행되도록 했다:
0 0 * * *
→ 매일 00:00 (스레드 생성)50 0,9,13,17 * * *
→ 하루 4번 상태 확인5 0 * * *
→ 업로드 작업 (스레드 생성 직후)0 15 * * *
→ 오후 업로드 1회 추가thread_ts
값은 ikea-thread-tracker/thread.ts
에 저장된다.thread_ts
로 사용.chat.postMessage
API를 사용하여 메시지를 전송했다.thread_ts
파라미터 포함<@Uxxxxxx>
)과 상태 텍스트 포함ikea-auto-ep/
├── main.py # Cloud Function entry-point
├── env.yaml # 환경변수 파일
├── requirements.txt
├── .env # 로컬 테스트용
├── .gitignore / .gcloudignore
│
├── deploy/
│ ├── deploy.sh
│ ├── deploy_thread.sh
│ └── notify_deploy.sh
│
└── localpackage/
├── fetch.py # JSON 데이터 수집
├── filter.py # EP 필터링
├── save.py # TSV 저장
├── transform.py # 포맷 변환
├── uploader.py # S3 업로드 + 캐시 무효화
├── notify.py # 슬랙 전송
├── thread.py # 스레드 생성/저장/불러오기
└── verify.py # 검증 로직
앞으로는 이 구조를 다른 프로젝트에도 확장해볼 생각이다.