← All work

Experiment

Slack Analytics Bot

Temply의 사용자 행동 로그를 자연어 질의와 정기 보고서로 바꿔 Slack에 전달한 내부 분석 봇입니다. MySQL 집계, LLM 기반 SQL 생성, Slack 이벤트 검증과 서버리스·상시 서버 두 실행 구조를 구현했습니다.

Backend · Data · AI · Infrastructure / 2025.09

Slack의 자연어 질문을 제한된 조회 쿼리로 바꾸고, 정기 집계와 함께 원천 근거를 확인할 수 있는 내부 분석 흐름을 실험했습니다.

Why I built it

Temply의 사용자 행동 로그는 데이터베이스에 쌓였지만, 정해진 대시보드 밖의 질문에 답하려면 개발자가 SQL을 작성하고 결과를 다시 전달해야 했습니다. 이 과정을 Slack 안에서 줄이되, LLM이 만든 쿼리를 그대로 실행하거나 설명만 믿지 않도록 통제 가능한 경계가 필요했습니다.

How it works

사용자가 봇을 멘션하면 OpenAI가 허용된 스키마를 바탕으로 MySQL 조회문을 생성합니다. 서버는 SELECT·CTE 여부, 변경 및 파일 출력 키워드, 결과 크기 제한을 검사한 뒤 쿼리를 실행하고 스레드에 결과를 남깁니다.

정기 보고서는 전단 저장, 메시지 발송과 POP 인쇄 로그를 완료된 주·월, 요일과 마트 단위로 먼저 집계합니다. LLM은 계산된 JSON을 Slack Block Kit 설명으로 바꾸고, 서버는 원천 JSON도 함께 첨부합니다.

Key decisions

  • LLM은 질문 해석과 서술을 맡고, 애플리케이션은 실행 가능 여부와 결과 범위를 결정하도록 나눴습니다.
  • Slack 요청은 원문 body와 timestamp로 HMAC 서명을 검증하고, 재시도와 봇 메시지를 조기에 제외했습니다.
  • 진행 중인 기간을 이전의 완결된 기간과 비교하지 않도록 집계 기준을 SQL에서 고정했습니다.
  • 같은 기능을 AWS SAM 기반 Lambda·API Gateway·EventBridge와 Express·node-cron 기반 상시 서버로 구현해 실행 환경과 분석 로직을 분리했습니다.

Limits and learnings

저장소에는 지속적인 사용량이나 업무 시간 절감 효과를 보여 주는 지표가 없습니다. 생성 SQL 검증도 허용 스키마와 문자열 규칙, 결과 제한을 적용한 방어선이며 별도의 데이터 샌드박스를 대체하지 않습니다.

이 실험을 통해 LLM 기능의 신뢰도는 프롬프트만으로 결정되지 않으며, 입력 범위·실행 규칙·원천 결과 공개가 함께 있어야 한다는 점을 확인했습니다. 정기 보고서 역시 문장 생성보다 비교 가능한 기간과 집계 기준을 먼저 고정하는 일이 중요했습니다.