AI한테 주간 리포트 + 텔레그램 알림까지 자동화시켰더니

이런 것도 됩니다··17분 읽기·
AI 주간 리포트 자동화 시스템 — Supabase 데이터에서 분석 리포트 생성 후 텔레그램 알림까지 자동 전송하는 흐름

"AI 분석 앱"인데 리포트는 사람이 쓰고 있었다

로또 분석 앱에 주간 리포트 기능을 넣었는데, 매주 토요일 추첨 후에 제가 직접 데이터를 확인하고 글을 쓰고 있었습니다. 8개 AI 엔진의 예측 결과를 비교하고, 패턴을 분석하고, 어떤 엔진이 잘 맞혔는지 평가하는 작업이었거든요.

한 번 쓰는 데 2시간쯤 걸렸습니다. "AI 분석 앱"이라면서 리포트는 사람이 쓴다는 게 좀 아이러니했죠.

AI 에이전트한테 "분석가" 역할을 부여했다

Before — 초급 프롬프트:
주간 리포트 자동으로 만들어줘
After — 중급 프롬프트:
당신은 AI 에이전트 설계 전문가입니다.

[맥락]
- 로또 6/45 주간 AI 예측 분석 리포트를 자동 생성하는 에이전트가 필요합니다
- 데이터 소스: Supabase의 weekly_reports, prediction_archive, LotteryDraw 테이블
- 리포트는 블로그에 발행되고, X/인스타/쓰레드/카카오/텔레그램 5개 채널로 알림이 갑니다

[페르소나 요구사항]
- "PICK6 AI 분석가" 역할 (존댓말, 데이터 기반 냉정한 평가)
- 절대 금지: 당첨 보장/암시, 근거 없는 예측, 과도한 이모지
- AI 성과를 과장하지 않고 부족한 점도 솔직하게 인정

[요청]
1. 에이전트 페르소나 정의서
2. 4단계 워크플로우 (데이터 수집 → 패턴 분석 → 성과 평가 → 리포트 작성)
3. SQL 쿼리 (어떤 테이블에서 뭘 가져올지)
4. 리포트 6개 섹션 구조
5. 출력 4종류 (전체 리포트 + SNS 단문 + SEO 메타 + 목록 헤드라인)

"자동으로 만들어줘"에서 "페르소나 + 워크플로우 + 출력 형식"을 구체적으로 지정하니까, AI가 154줄짜리 에이전트 정의서를 만들어냈습니다.

4단계 워크플로우가 실제로 하는 일

에이전트가 리포트를 만드는 과정은 4단계입니다.

1단계 — Supabase에서 데이터 수집
당신은 데이터 엔지니어입니다.

[요청]
다음 3개 테이블에서 해당 회차 데이터를 조회해주세요:
1. LotteryDraw → 실제 당첨번호 6개 + 보너스 번호
2. prediction_archive → 8개 알고리즘별 예측 번호, 일치 개수, 당첨 등수
3. weekly_reports → 해당 회차 기본 통계 (총 예측 건수, 참여 사용자 수)

[출력]
JSON으로 정리해서 다음 단계에 넘겨주세요.
2단계 — 패턴 분석: 당첨번호의 홀짝 비율, 고저 비율(1-22 vs 23-45), 번호합, 연번 쌍, 끝수 분포, 보너스번호 특성을 계산합니다. 이걸 이전 회차와 비교해서 "이번 회차가 평균과 얼마나 다른지"를 수치로 보여주는 거예요. 3단계 — 8개 알고리즘 성과 평가: ALPHAGO, LSTM, STATISTICAL, ASSOCIATION, ENHANCED, UNIFIED, TREND, lucky 8개 엔진별로 총 예측 건수, 평균 일치 개수, 최고 일치 개수, 등수별 당첨 현황을 계산합니다. MVP 엔진과 아쉬운 엔진을 선정하는 것도 이 단계에서 처리하고요. 4단계 — 리포트 작성 + 4종 출력

리포트 본문만 나오는 게 아니라, 한 번에 4가지 버전이 생성됩니다:

| 출력 | 용도 | 길이 |
|------|------|------|
| summary_text | 블로그 전체 리포트 | 2,000~4,000자 |
| sns_short_text | X/쓰레드/텔레그램 | 200자 이내 |
| meta_description | SEO 메타 | 150~160자 |
| headline | 리포트 목록 | 120자 이내 |

SNS 5개 채널 자동 발행 — 어댑터 패턴

리포트가 생성되면 5개 SNS 채널로 동시에 발행됩니다. 각 플랫폼별 어댑터를 만들어서 하나의 postToAllPlatforms() 함수로 통합했거든요.

당신은 SNS API 통합 전문가입니다.

[맥락]
- 주간 리포트 발행 시 5개 SNS 채널에 자동 포스팅해야 합니다
- 각 플랫폼 API가 다르므로 어댑터 패턴으로 통합하려 합니다

[플랫폼별 요구사항]
1. X (Twitter): OAuth 1.0a, twitter-api-v2, 텍스트만 (shortText)
2. Instagram: Graph API v21.0, 2단계 (컨테이너 생성→발행), 이미지 필수
3. Threads: Graph API v1.0, TEXT/IMAGE 타입
4. 카카오톡: 채널 메시지, 피드 템플릿 + 버튼
5. 텔레그램: Bot API, HTML 파싱 모드

[요청]
각 플랫폼별 어댑터 함수와, 이를 순차 실행하는 통합 서비스를 만들어주세요.
실패한 플랫폼이 있어도 나머지는 계속 발행되어야 합니다.

결과적으로 5개 어댑터가 각각 28~63줄, 통합 서비스가 46줄로 완성됐습니다. 텔레그램 어댑터가 41줄로 가장 간단한데, Telegram Bot API에 fetch 하나만 날리면 되거든요.

텔레그램 봇 — 구독자별 선호 알고리즘

단순 알림을 넘어서, 텔레그램 봇에 구독 시스템을 넣었습니다.

당신은 텔레그램 봇 개발 전문가입니다.

[요청]
구독자가 선호하는 AI 알고리즘을 설정하면,
해당 알고리즘의 예측 번호만 받아볼 수 있는 시스템을 만들어주세요.

[명령어]
- /start: 구독 활성화
- /stop: 구독 해제
- /algorithm 3: 3번(STATISTICAL) 알고리즘 선호 설정
- /myinfo: 현재 구독 정보 확인

[동작]
주간 예측 발송 시 각 구독자의 preferred_algorithm에 맞춰
해당 알고리즘 상위 5개 번호 집합을 선택해서 전송

봇 서비스 133줄 + 웹훅 API 167줄로 구현됐습니다. 구독자 테이블에 preferred_algorithm 컬럼이 있어서, "나는 LSTM만 보고 싶어"라는 사용자한테는 LSTM 결과만 보내는 거예요.

리포트 페이지 72KB → 9.6KB — 87% 줄인 과정

처음에 AI가 만든 리포트 페이지가 72KB였습니다. 원인은 명확했거든요.

당신은 Next.js 성능 최적화 전문가입니다.

[현재 상태]
- 주간 리포트 상세 페이지: 72KB (1,331줄 단일 파일)
- 문제: 불필요한 클라이언트 컴포넌트, Mock 데이터 잔존, CSR 기반

[요청]
1. 1,331줄 파일을 5개 서버 컴포넌트로 분리해주세요
2. Mock 데이터 완전 제거 → prediction_archive 실제 데이터만 사용
3. CSR → SSR 전환 (ISR 1시간 캐시)
4. 전문 용어 제거 (합의율→평균 적중 개수, 다양성 점수→3개↑ 적중률)
5. 탭/옵션 UI 삭제 → 스크롤 기반 단일 페이지
6. 번들 크기 목표: 10KB 이하

핵심은 3번이었습니다. CSR에서 SSR로 바꾸니까 데이터를 서버에서 미리 가져와서 HTML로 내려보내는 방식이 되면서, 클라이언트 번들이 확 줄었거든요. 결과:

| 항목 | Before | After |
|------|--------|-------|
| 페이지 크기 | 72KB | 9.6KB (87% 감소) |
| 메인 파일 | 1,331줄 단일 파일 | 87줄 + 5개 컴포넌트 |
| 렌더링 | CSR (클라이언트) | SSR + ISR 1시간 캐시 |
| Mock 데이터 | 잔존 | 완전 제거 |
| SEO | 없음 | 메타태그 + JSON-LD + OG 이미지 |

4번도 의미 있었습니다. "합의율"이라는 용어를 AI가 만들어서 쓰고 있었는데, 사용자 입장에서는 "평균 적중 개수"가 훨씬 직관적이거든요.

자동화의 현실 — 90% 자동, 10% 사람

처음에는 cron으로 매주 토요일 밤 자동 실행되게 했는데, 문제가 하나 있었습니다. 동행복권 사이트에서 당첨번호 데이터가 올라오는 시간이 매번 달랐거든요. 데이터가 아직 안 들어온 상태에서 리포트가 생성되는 경우가 생겼습니다.

그래서 지금은 "수동 트리거 + AI 자동 작성"으로 운영하고 있습니다. 제가 하는 건 데이터가 들어왔는지 확인하고 버튼 하나 누르는 것뿐이에요. 나머지 — 데이터 수집, 6가지 패턴 분석, 8개 엔진 성과 비교, 리포트 4종 생성, SNS 5개 채널 발행, 텔레그램 구독자별 맞춤 알림 — 은 전부 자동입니다.

2시간 걸리던 작업이 버튼 한 번으로 끝나는 거죠. 완전 자율 100% 자동화가 아니라 "10% 사람 판단이 들어가는 90% 자동화"가 현실적으로 더 안정적이었습니다.

공유

댓글