사례 1주차 2026-07-23 · AI 개인비서 텔레그램봇 만들기 연재

매일 아침 8시, 오늘 하루를 요약해서 보내주는 비서 만들기

무엇을 받나

매일 아침 8시 정각에 텔레그램으로 이런 메시지가 옵니다.

☀️ 좋은 아침이에요. 오늘 일정 정리해 드릴게요.

━ 오늘 일정 ━
· 10:00 ○○ 미팅
· 15:30 △△ 약속
· 19:00 저녁 모임

━ 시장 요약 ━
· 나스닥 +0.8% / S&P500 +0.4% / 다우 -0.1%
· 반도체 섹터는 전반적으로 강세였습니다
· 주요 기업 실적 발표: ○○ 예상치 상회

━ 오늘 날씨 ━
· 최고 28℃ / 최저 19℃, 강수확률 60%
· 오후에 비 소식이 있어요. 우산 챙기세요 ☂️

오늘 하루도 무리하지 마시고, 차분하게 잘 보내시길 바라요.

핸드폰을 열어 앱을 여러 개 확인할 필요가 없습니다. 캘린더, 날씨 앱, 증시 앱을 각각 볼 일을 아침 한 통으로 줄인 게 목적이었어요.


밤 브리핑과 무엇이 다른가

저는 밤에도 가계부 브리핑을 받고 있는데, 둘의 성격이 완전히 다릅니다.

밤 브리핑모닝 브리핑
데이터가 어디서 오나내가 만든 것 (내 지출 기록)바깥에서 끌어옴 (캘린더·날씨·시장)
핵심 난이도문자열 파싱, 계산 규칙여러 API를 인증해서 붙이기
어디서 실행구글 시트에 붙은 스크립트클라우드 서버

밤 브리핑은 “내 데이터를 어떻게 정확히 계산할까”의 문제였고, 모닝 브리핑은 “남의 서비스에서 데이터를 어떻게 가져올까” 의 문제였습니다.


전체 구조

[서버의 스케줄러(cron)]  ← 매일 정해진 시각에 실행


[수집 스크립트]  ── 구글 캘린더 API → 오늘 일정
      │           ── 날씨 API      → 기온·강수확률
      │           ── 시장 데이터 API → 지수·실적

[생성 AI]  ← 모아온 숫자를 사람이 읽을 문장으로


[텔레그램 봇]

저는 월 몇 천 원짜리 저렴한 클라우드 서버에 파이썬 스크립트를 올려두고 cron으로 돌리고 있습니다.


왜 서버를 썼나 (구글 앱스스크립트로도 되는데)

밤 브리핑은 구글 시트에 딸린 Apps Script로 만들었고 서버가 전혀 필요 없었습니다. 무료고, 트리거만 걸면 자동 실행돼요.

그런데 모닝 브리핑은 서버로 옮겼습니다. 이유는:

  • 외부 API를 여러 개 붙이는데 파이썬 쪽이 다루기 편했음
  • 수집한 데이터를 파일로 쌓아두고 여러 스크립트가 나눠 쓰기 좋았음
  • 실행 시간 제한이 없음 (Apps Script는 한 번에 오래 못 돌립니다)

처음 만드는 분이라면 Apps Script로 시작하시는 걸 권합니다. 캘린더와 날씨만이라면 Apps Script로 충분하고 무료예요. 서버는 “이것만으로는 안 되네” 싶을 때 옮기면 됩니다.


구글 캘린더 연결하기 (이게 핵심이었어요)

왜 캘린더를 바꿨나

원래 다른 캘린더 서비스를 쓰고 있었는데 구글 캘린더로 옮겼습니다. 기능이 더 좋아서가 아니라, 프로그램이 읽을 수 있는 API가 제대로 열려 있어서였어요.

이게 자동화의 첫 번째 갈림길입니다. 아무리 좋은 앱이라도 API가 없으면 자동화 대상이 될 수 없습니다. 화면을 긁어오는 방법도 있지만 툭하면 깨져요.

무언가를 자동화하고 싶다면, 그 서비스에 API가 있는지 먼저 확인하세요. 없으면 도구를 바꾸는 게 코드로 씨름하는 것보다 빠릅니다.

인증이 제일 번거로운 부분

캘린더는 개인 데이터라서 “이 프로그램이 내 캘린더를 봐도 된다”는 허락이 필요합니다. 문제는 서버에서 새벽에 혼자 돌아갈 때는 허락을 눌러줄 사람이 없다는 거예요.

그래서 처음 한 번만 사람이 허락하고, 그때 받은 인증 정보를 저장해두는 방식을 씁니다. 이후에는 프로그램이 그걸 꺼내 쓰면서 자동으로 갱신해요.

구글 클라우드 콘솔에서 프로젝트를 만들고 → 캘린더 API를 켜고 → 인증 정보를 발급받아 서버에 두는 흐름입니다. 처음 하면 낯설지만 한 번만 넘으면 끝이에요.

여기서 배운 것: 자동화에서 가장 많이 막히는 지점은 코드가 아니라 인증이었습니다. 그리고 이 인증 파일은 내 캘린더를 열 수 있는 열쇠라서, 절대 남에게 보여주거나 공개 저장소에 올리면 안 됩니다.

가져와서 하는 일

오늘 날짜의 일정을 불러와 시작 시각 순으로 정리합니다. 종일 일정과 시각이 있는 일정을 구분해서 표시하고, 아무것도 없으면 “오늘 등록된 일정은 없어요”로 넘어갑니다.


날씨 — 기온보다 “그래서 뭘 챙기지”

날씨 API에서 최고·최저 기온과 강수확률을 받아옵니다. 위치는 자주 출근하는 지역 기준으로 잡았어요. 집 근처 날씨보다 그게 실용적이었습니다.

여기서 신경 쓴 건 숫자를 그냥 나열하지 않는 것입니다.

  • ❌ “강수확률 60%, 최고 28℃”
  • ✅ “오후에 비 소식이 있어요. 우산 챙기세요”

행동으로 바꿔주는 한 줄이 붙으면 체감 효용이 확 올라갑니다. 아침에 숫자를 해석할 여유는 없으니까요.


시장 정보 — 필요한 만큼만

지수 등락률, 관심 섹터 동향, 주요 실적 발표를 요약해서 받습니다.

처음엔 욕심을 내서 이것저것 다 넣었는데 메시지가 너무 길어져서 안 읽게 됐습니다. 그래서 “아침에 30초 안에 훑을 수 있는 양”으로 줄였어요. 항목을 늘리는 것보다 줄이는 게 어려웠습니다.


개인 데이터를 보여주는 규칙 (여기가 제일 얘기하고 싶은 부분)

투자 현황도 브리핑에 넣었는데, 표시 규칙을 꽤 까다롭게 정했습니다.

1. 장기 보유 계좌는 아예 표시하지 않는다

장기로 들고 갈 것들은 매일 볼 필요가 없습니다. 매일 보면 팔고 싶어집니다. 그래서 브리핑에서 완전히 배제했어요.

2. 손실 중인 항목은 보여주지 않는다

아침에 마이너스 숫자를 보는 게 하루에 도움이 안 된다고 판단했습니다. 플러스인 것만 표시하고, 하나도 없으면 이렇게만 나옵니다.

· 수익률이 플러스(+)인 항목이 없습니다.

숨기는 게 아니라 “확인이 필요할 때 직접 열어보면 된다” 는 판단이었어요. 어차피 앱을 열면 다 보이니까요.

3. 왜 이런 규칙을 정했나

자동 브리핑은 내가 선택하지 않아도 눈에 들어옵니다. 그래서 “볼 수 있는 정보”가 아니라 “매일 봐서 좋은 정보”만 넣어야 한다고 생각했습니다.

자동화에서 “무엇을 넣을까”보다 “무엇을 빼야 할까” 가 더 중요한 결정이었습니다. 넣는 건 쉽지만, 매일 강제로 보게 되는 것의 무게는 무겁습니다.


AI에게 문장을 맡기면서 정한 원칙

모아온 숫자를 사람이 읽을 문장으로 바꾸는 건 생성 AI에 맡겼습니다. 다만 지시를 꽤 강하게 걸어뒀어요.

1. 주어진 숫자 밖의 이야기는 절대 하지 말 것

이게 제일 중요했습니다. 안 그러면 그럴듯하게 지어냅니다. “오늘 반도체가 좋으니 내일도 오를 것 같네요” 같은 말을 아침마다 들으면 판단이 흐려져요.

2. 모르면 모른다고 할 것

API 호출이 실패했을 때 “데이터를 가져오지 못했습니다”라고 하는 게, 대충 채워 넣는 것보다 백 배 낫습니다.

3. 형식은 고정, 문장만 자유

항목 순서와 구성은 코드로 고정하고, AI에게는 문장 다듬기와 마지막 응원 한마디만 맡겼습니다. AI가 구조까지 정하게 하면 매일 형식이 달라져서 훑어보기가 어려워요.

4. 마지막 한 줄은 사람 말투로

기능적으로는 아무 쓸모 없는 응원 한마디를 넣었는데, 이게 의외로 계속 쓰게 만드는 요소였습니다. 알림이 아니라 누가 챙겨주는 느낌이 나요.


시행착오

시간대 때문에 한 번 헤맸습니다. 서버의 스케줄러는 보통 UTC 기준으로 돌아가는데, 저는 한국 시간 8시에 받고 싶었어요. 처음에 이걸 놓쳐서 엉뚱한 시각에 왔습니다. 9시간 차이를 계산해서 설정해야 했어요.

메시지가 너무 길었습니다. 처음엔 정보를 최대한 담았는데, 길면 안 읽습니다. 지금은 스크롤 없이 한 화면에 들어오는 길이를 지키려고 해요.

API 키를 코드에 그대로 써두고 있었습니다. 편하다는 이유로 코드 안에 키를 적어뒀는데, 나중에 코드를 남에게 보여줄 일이 생기면서 키가 그대로 노출된다는 걸 깨달았습니다.

이건 정말 조심해야 하는 부분입니다. 이번에 정리하면서 이렇게 바꿨습니다.

  • 키는 코드가 아니라 환경변수나 별도 설정 저장소에 두기
  • 실수로 노출됐다면 미련 없이 재발급 (지우는 것보다 새로 받는 게 확실합니다)
  • 남에게 코드를 보여줄 때 키·토큰·주소·개인정보가 없는지 먼저 훑기

특히 텔레그램 봇 토큰은 그것만 있으면 남이 내 봇으로 메시지를 보낼 수 있습니다. 캘린더 인증 파일도 마찬가지로 위험해요.


정리하면

1. API가 있는 서비스를 고르는 게 시작이다

캘린더를 옮긴 게 가장 결정적인 선택이었습니다. 도구를 바꾸는 게 코드로 우회하는 것보다 빠릅니다.

2. 자동화의 진짜 난관은 코드가 아니라 인증이다

로직은 몇 줄인데, “내 데이터를 이 프로그램이 봐도 된다”를 설정하는 데 시간이 더 걸립니다. 처음 한 번만 넘으면 되니 여기서 포기하지 마세요.

3. 숫자를 행동으로 바꿔줘야 쓸모가 있다

“강수확률 60%“가 아니라 “우산 챙기세요”. 이 차이가 매일 읽게 만듭니다.

4. 무엇을 뺄지를 먼저 정한다

매일 자동으로 눈에 들어오는 정보는 무게가 다릅니다. 손실 수치를 아침에 보지 않기로 한 게 이 시스템에서 가장 잘한 설계라고 생각해요.

5. AI에게는 구조가 아니라 표현을 맡긴다

형식은 코드로 고정하고, 문장만 다듬게 하기. 그리고 없는 얘기는 하지 말라고 명확히 지시하기.


다음 글에서는 **밤에 받는 가계부 브리핑**을 다뤄봅니다. 폰 결제 알림을 자동으로 모아서 가계부를 채우는 쪽인데, 그쪽은 성격이 완전히 달라서 시행착오가 훨씬 많았습니다.