Claude로 매일 아침 날씨 카톡 받기 - 판교 날씨 자동화 구축기
Claude로 매일 아침 날씨 카톡 받기 - 판교 날씨 자동화 구축기
기상청 API + Claude API + 카카오톡 + GitHub Actions로 매일 아침 6시에 AI 날씨 브리핑이 카톡으로 오게 만든 과정을 기록합니다.
최종 결과물
매일 아침 6시, 날씨봇 나나🐱가 카카오톡으로 이런 메시지를 보내줍니다:
🐱 오늘(2/12 목) 날씨 브리핑 ☀️
💻 분당
▸ 최저 2°C / 최고 8°C
▸ 하루 종일 맑은 하늘
▸ 저녁부터 기온 뚝, 습도는 85%까지 올라가요
🌲 서천
▸ 최저 0°C / 최고 7°C
▸ 종일 화창한 날씨
▸ 밤 10시부터 영하, 습도 95%로 쌀쌀해요
🌡️ 두 동네 온도차
▸ 분당이 서천보다 2도 높지만, 밤엔 둘 다 매서워요
👗 나나의 옷장
▸ 코트에 니트 조합이면 딱!
🐱 나나의 한마디
▸ 퇴근길엔 목도리 꼭 챙기세요, 체감온도 더 낮아요!
분당과 서천 두 지역 날씨를 동시에 조회하고, 기온별 옷차림까지 추천해주는 AI 날씨 비서입니다.
전체 아키텍처
[매일 아침 6시 KST]
│
▼
GitHub Actions (cron: 0 21 * * * UTC)
│
▼
pangyo_weather_kakao.py 실행
│
├─① 기상청 단기예보 API 호출 × 2 (data.go.kr)
│ → 분당(nx=62, ny=123) + 서천(nx=55, ny=94) 날씨 데이터
│
├─② 기온별 옷차림 매칭 (CLOTHING_MAP)
│ → 낮 최고기온 기준 옷차림 후보 선정
│
├─③ Claude Sonnet API 호출 (Anthropic)
│ → 두 지역 날씨 + 옷차림을 자연스러운 브리핑으로 변환
│
└─④ 카카오톡 '나에게 보내기' API 호출
→ 나나🐱의 브리핑 메시지를 카톡으로 전송
Step 1. 카카오톡 ‘나에게 보내기’ 스킬 설정 (Claude 웹)
첫 시작은 Claude 웹(claude.ai)에서 했습니다.
1-1. 카카오톡 MCP 스킬 설치
Claude 웹에는 외부 서비스와 연동할 수 있는 스킬(Skill) 기능이 있습니다. 로빈이 만들어둔 카카오톡 ‘나에게 보내기’ 스킬을 다운로드했습니다. 다운로드 링크 아지트
이 스킬은 카카오톡 REST API를 통해 나에게 보내기 기능을 사용할 수 있게 해주는 MCP(Model Context Protocol) 스킬입니다.
설치 후 카카오 개발자 앱 설정이 필요합니다. 상세 단계는 아래와 같습니다:
카카오 앱 설정 상세 가이드
1단계: 앱 생성
- 카카오 개발자에 카카오 계정으로 로그인
- “내 애플리케이션” → “애플리케이션 추가하기”
- 앱 이름: 아무거나 (예: “날씨봇”)
- 생성 후 앱 키 탭에서
REST API 키복사 → 이게KAKAO_REST_API_KEY
2단계: 카카오 로그인 활성화
- 앱 선택 → “카카오 로그인” 메뉴
- 활성화 설정: ON
- Redirect URI 등록:
https://example.com/oauth(아무 URL이나 OK, 코드만 받을 용도)
3단계: 동의항목 설정
- “카카오 로그인” → “동의항목”
카카오톡 메시지 전송(talk_message) → 선택 동의로 설정
4단계: Client Secret 발급 (선택이지만 추천)
- “보안” 메뉴 → Client Secret 발급
- 상태를 “사용함”으로 변경
- 발급된 값 복사 → 이게
KAKAO_CLIENT_SECRET
5단계: OAuth 인증으로 토큰 발급
브라우저에서 아래 URL을 접속합니다 (REST_API_KEY를 본인 키로 교체):
https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY}&redirect_uri=https://example.com/oauth&response_type=code&scope=talk_message
카카오 로그인 → 동의 → 리다이렉트된 URL에서 code=XXXXX 부분을 복사합니다.
그 다음 터미널에서:
curl -X POST "https://kauth.kakao.com/oauth/token" \
-d "grant_type=authorization_code" \
-d "client_id={REST_API_KEY}" \
-d "redirect_uri=https://example.com/oauth" \
-d "code={위에서 복사한 CODE}"
응답에서 access_token과 refresh_token을 복사합니다. 이게 각각 KAKAO_ACCESS_TOKEN, KAKAO_REFRESH_TOKEN입니다.
주의: access_token은 6시간 만료, refresh_token은 2개월 만료입니다. 스크립트에 자동 갱신 로직이 있어서 refresh_token만 살아있으면 됩니다.
1-2. Claude에게 날씨 카톡 요청
스킬 설정이 끝나고, Claude 웹에서 이렇게 요청했습니다:
“판교 내일 날씨 카톡 메시지로 보내줘”
Claude가 기상청 API를 호출하고, 카카오톡 스킬을 통해 메시지를 보내주는 걸 확인했습니다. 잘 동작하는 것을 보고, 이걸 매일 자동으로 돌리고 싶어졌습니다.
1-3. Python 스크립트 생성 요청
“판교 날씨 카톡 메시지로 보내주는 파이썬 스크립트 작성해줘”
Claude 웹이 pangyo_weather_kakao.py를 만들어줬습니다. 이 스크립트는:
- 기상청 단기예보 API로 판교 날씨를 조회
- 시간대별 기온, 하늘 상태, 강수 정보를 파싱
- 카카오톡으로 메시지 전송
이 파일을 로컬에 저장하고, 여기서부터 Claude Code로 작업을 이어갔습니다.
Step 2. GitHub Actions 자동화 구축 (Claude Code)
Claude Code에게 요청했습니다:
“pangyo_weather_kakao.py를 매일 아침 6시에 실행하도록 수정하고, GitHub Action 스크립트 만들어줘”
2-1. 스크립트 수정 - 환경변수 지원
원본 스크립트는 API 키가 코드에 하드코딩되어 있었습니다. GitHub Actions에서 돌리려면 GitHub Secrets로 관리해야 하므로, 환경변수를 우선 사용하도록 수정했습니다.
# 변경 전
CONFIG = {
"KMA_API_KEY": "YOUR_API_KEY_HERE",
"KAKAO_SCRIPT": "/mnt/skills/user/kakaotalk/scripts/send_message.py",
}
# 변경 후
CONFIG = {
"KMA_API_KEY": os.environ.get("KMA_API_KEY", "YOUR_API_KEY_HERE"),
"KAKAO_ACCESS_TOKEN": os.environ.get("KAKAO_ACCESS_TOKEN", ""),
"KAKAO_REFRESH_TOKEN": os.environ.get("KAKAO_REFRESH_TOKEN", ""),
"KAKAO_REST_API_KEY": os.environ.get("KAKAO_REST_API_KEY", ""),
"KAKAO_CLIENT_SECRET": os.environ.get("KAKAO_CLIENT_SECRET", ""),
# ...
}
2-2. 카카오톡 REST API 직접 호출 추가
원본은 로컬의 send_message.py 스크립트를 subprocess로 호출하는 방식이었는데, GitHub Actions에는 그 스크립트가 없습니다. 카카오톡 REST API를 직접 호출하는 코드를 추가했습니다.
def send_kakao_api(message, prefix, access_token):
"""카카오톡 REST API로 '나에게 보내기' 메시지를 전송"""
url = "https://kapi.kakao.com/v2/api/talk/memo/default/send"
headers = {"Authorization": f"Bearer {access_token}"}
template = {
"object_type": "text",
"text": f"{prefix} {message}",
"link": {"web_url": "https://weather.naver.com"},
}
data = {"template_object": json.dumps(template)}
resp = requests.post(url, headers=headers, data=data)
return resp.status_code == 200
전송 우선순위도 설계했습니다:
- 카카오 REST API 직접 호출 (GitHub Actions용)
- 실패 시 → 토큰 자동 갱신 후 재시도
- 그래도 실패 시 → send_message.py 스크립트 폴백 (로컬용)
2-3. GitHub Actions 워크플로우 생성
.github/workflows/pangyo-weather.yml:
name: 판교 날씨 카카오톡 전송
on:
schedule:
# 매일 아침 6시 (KST) = UTC 21:00 (전날)
- cron: '0 21 * * *'
workflow_dispatch: # 수동 실행 지원
jobs:
send-weather:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip'
- run: pip install -r requirements.txt
- name: 🌤️ 날씨 조회 및 카카오톡 전송
env:
ANTHROPIC_API_KEY: $
KMA_API_KEY: $
KAKAO_ACCESS_TOKEN: $
KAKAO_REFRESH_TOKEN: $
KAKAO_REST_API_KEY: $
KAKAO_CLIENT_SECRET: $
TZ: Asia/Seoul
run: python pangyo_weather_kakao.py
포인트:
cron: '0 21 * * *'— GitHub Actions의 cron은 UTC 기준이므로 KST 6시 = UTC 전날 21시TZ: Asia/Seoul— Python의datetime.now()가 한국 시간을 반환하도록workflow_dispatch— Actions 탭에서 수동 실행도 가능
Step 3. GitHub 레포 생성 및 Secrets 등록
3-1. API 키 준비
필요한 키 목록:
| 키 | 발급처 | 용도 |
|---|---|---|
KMA_API_KEY |
data.go.kr → 기상청_단기예보 조회서비스 | 날씨 데이터 |
KAKAO_REST_API_KEY |
developers.kakao.com → 앱 키 | 카카오 인증 |
KAKAO_CLIENT_SECRET |
카카오 개발자 → 보안 → Client Secret | 토큰 갱신 |
KAKAO_ACCESS_TOKEN |
OAuth 인증 후 발급 | 카톡 전송 |
KAKAO_REFRESH_TOKEN |
OAuth 인증 후 발급 | 토큰 자동 갱신 |
ANTHROPIC_API_KEY |
console.anthropic.com | AI 브리핑 |
기상청 API 키 발급 상세
- 공공데이터포털 회원가입
- 검색창에 “기상청_단기예보 조회서비스” 검색
- 활용신청 클릭 → 목적 아무거나 작성 → 신청
- 보통 즉시 ~ 1시간 이내 승인 (자동 승인)
- 마이페이지 → 인증키 발급현황 → 일반 인증키 (Decoding) 복사
⚠️ Encoding 키가 아닌 Decoding 키를 사용해야 합니다!
Anthropic API 키 발급 상세
- console.anthropic.com 가입
- Settings → API Keys → “Create Key”
- 키 복사 (sk-ant-… 형태)
- Settings → Billing → $5 충전 (이 용도로는 수년간 사용 가능)
참고: Claude Max 플랜(월 $100/$200)은 claude.ai 웹 전용이고, API는 별도 과금입니다.
내 동네 격자 좌표(nx, ny) 찾기
기상청 API는 위경도가 아닌 격자 좌표를 사용합니다.
찾는 방법:
- 기상청 격자 좌표 엑셀 다운로드 후 동네 검색
- 또는 스크립트의
latlon_to_grid()함수 사용:
# 예: 강남역 좌표 확인
python3 -c "
from pangyo_weather_kakao import latlon_to_grid
print(latlon_to_grid(37.4979, 127.0276)) # 강남역
"
# 출력: (61, 126)
주요 지역 격자 좌표:
| 지역 | nx | ny |
|---|---|---|
| 서울(종로) | 60 | 127 |
| 분당/판교 | 62 | 123 |
| 강남역 | 61 | 126 |
| 서천 | 55 | 94 |
| 제주 | 52 | 38 |
| 부산 | 98 | 76 |
LOCATIONS 리스트에 원하는 지역을 추가/수정하면 됩니다.
3-2. GitHub CLI(gh) 설치 및 레포 생성
gh CLI 설치
# macOS
brew install gh
# Ubuntu/Linux
sudo apt install gh
# Windows
winget install --id GitHub.cli
GitHub 인증 + 레포 생성
# GitHub 로그인 (처음 한 번만)
gh auth login
# workflow 권한 추가 (Actions 파일 push에 필요)
gh auth refresh -h github.com -s workflow
# 레포 생성 (private)
gh repo create my-weather-bot --private --source=. --push
Claude Code가 gh CLI로 한번에 처리했습니다:
# 레포 생성 (private)
gh repo create pangyo-action --private --source=. --push
# Secrets 등록
gh secret set KMA_API_KEY -b "xxx..."
gh secret set KAKAO_REST_API_KEY -b "xxx..."
gh secret set KAKAO_CLIENT_SECRET -b "xxx..."
gh secret set KAKAO_ACCESS_TOKEN -b "xxx..."
gh secret set KAKAO_REFRESH_TOKEN -b "xxx..."
gh secret set ANTHROPIC_API_KEY -b "xxx..."
보안 포인트: 코드에는 API 키가 전혀 없고,
os.environ.get()으로만 참조합니다. GitHub Secrets는 암호화 저장되어 로그에도***로 마스킹됩니다.
3-3. 첫 번째 테스트 — 토큰 갱신 실패
⚠️ access_token 만료 - 갱신 시도 중...
❌ 토큰 갱신 실패: 401 Client Error
access_token이 만료된 상태에서 refresh_token으로 갱신을 시도했는데 401 에러가 발생했습니다.
원인: 카카오 앱에 Client Secret이 설정되어 있으면, 토큰 갱신 시에도 client_secret 파라미터를 포함해야 합니다.
# 수정: client_secret 파라미터 추가
def refresh_kakao_token(refresh_token, rest_api_key, client_secret=""):
data = {
"grant_type": "refresh_token",
"client_id": rest_api_key,
"refresh_token": refresh_token,
}
if client_secret:
data["client_secret"] = client_secret # 이거 빠져서 401이었음
KAKAO_CLIENT_SECRET을 Secrets에 추가하고 다시 실행 → 성공! 첫 번째 카톡이 도착했습니다.
Step 4. 오늘 날씨로 변경
처음 스크립트는 내일 날씨가 기본값이었습니다. 하지만 매일 아침 6시에 실행되니까 오늘 날씨가 맞습니다.
# 변경 전: 내일이 기본
if args.today:
target = now
else:
target = now + timedelta(days=1) # 기본값
# 변경 후: 오늘이 기본
if args.tomorrow:
target = now + timedelta(days=1)
else:
target = now # 기본값
Step 5. Claude API로 자연스러운 브리핑 생성
5-1. 문제: 딱딱한 데이터 나열
초기 메시지는 이랬습니다:
🐰🔔 판교 날씨 (2/13 금) 맑음 ☀️
🌡️ 1°C / 11°C
🌤️ 맑음 ☀️
☂️ 강수 예상 없음
🕐 6시 1° → 9시 3° → 12시 8° → 15시 10° → 18시 8° → 21시 6°
👉 좋은 하루 보내세요!
나쁘지 않지만, 이런 형태를 원했습니다:
🐰🔔 오늘(2/12 목) 판교 날씨 ☀️
▸ 하루종일 화창한 맑은 날씨가 이어져요.
▸ 기온은 2~9°C로 선선하며, 오후 3시경 8°C까지 올라갑니다.
▸ 바람은 약하고 강수 확률 0%로 쾌청한 하루예요.
▸ 저녁부터 습도가 올라가며 체감온도가 낮아질 수 있어요.
👉 햇살은 좋지만 쌀쌀하니 가벼운 겉옷 챙기세요!
“흐리다가 오후부터 맑아짐” 같은 자연스러운 서술은 코드 로직만으로는 한계가 있습니다. Claude API를 한번 더 태워서 기상 데이터를 자연어 브리핑으로 변환하기로 했습니다.
5-2. 구현: 기상 데이터 → Claude → 브리핑
기상청 API 응답을 시간대별로 정리해서 Claude에게 넘깁니다:
def build_message_claude(forecast, location, label):
# 시간대별 데이터를 텍스트로 구성
weather_data = f"""날짜: 2/12 (목)
지역: 판교
최저기온: 2°C / 최고기온: 9°C
대표 하늘: 맑음 ☀️
시간대별:
6시: 2°C, 맑음, 강수확률=0%, 풍속=1.4m/s
9시: 3°C, 맑음, 강수확률=0%, 풍속=1.1m/s
12시: 5°C, 맑음, 강수확률=0%, 풍속=2.0m/s
..."""
prompt = f"""아래 기상청 데이터를 바탕으로 카카오톡 날씨 브리핑 메시지를 작성해줘.
{weather_data}
규칙:
- 첫 줄: "오늘(2/12 목) 판교 날씨 [이모지]"
- ▸ 로 시작하는 3~5줄의 자연스러운 한국어 브리핑
- 하늘 변화 흐름을 자연스럽게 서술
- 마지막에 👉 한줄 팁 (친근한 톤)
- 메시지 본문만 출력"""
client = anthropic.Anthropic(api_key=api_key)
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=500,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text.strip()
폴백 구조도 만들었습니다:
- Claude API 성공 → AI 브리핑 사용
- Claude API 실패 → 기본 템플릿 메시지로 폴백 (카톡은 어떻게든 감)
5-3. 모델 선택: Haiku vs Sonnet
처음에는 가장 저렴한 Haiku로 시작했는데, 카톡이 이렇게 왔습니다:
👉 퇴근 시간쯤엔 쌌쌌하니까 겨울옷 필수예요!
“쌀쌀”을 “쌌쌌”으로 쓰는 맞춤법 실수가 있었습니다 😂
비용을 비교해보니:
| 모델 | 1회 호출 비용 | 월 비용 (매일 1회) |
|---|---|---|
| Haiku 4.5 | ~$0.002 | ~$0.06 |
| Sonnet 4.5 | ~$0.006 | ~$0.18 |
월 $0.18이면 큰 차이가 없어서 Sonnet 4.5로 업그레이드했습니다. 한국어 품질이 확연히 좋아졌습니다.
참고: Claude Max 플랜(월 $100/$200)은 claude.ai 웹/앱 전용이고, API는 별도 과금입니다. console.anthropic.com에서 크레딧을 충전해야 합니다.
Step 6. 두 지역 동시 브리핑 + 날씨봇 나나 🐱
블로그를 읽다 보니 욕심이 생겼습니다. 평일엔 분당에서 일하고, 주말엔 종종 서천에 내려가는데 — 두 동네 날씨를 한번에 보면 어떨까?
6-1. 설계
Claude Code에게 요청했습니다:
“분당 날씨와 서천 날씨를 둘 다 알려주고, 몇 도나 차이나는지 브리핑해줘”
메시지 구조를 함께 설계했습니다:
- 💻 분당 — 출근하는 곳
- 🌲 서천 — 주말에 가는 곳
- 🌡️ 두 동네 온도차 — 기온 비교
- 🐱 나나의 한마디 — 날씨봇에 이름과 성격을 부여!
- 월~목: 분당 출퇴근 기반 팁
- 금~일: “서천에 간다면!” 톤의 주말 팁
# 조회 지역 목록
LOCATIONS = [
{"name": "분당", "emoji": "💻", "nx": 62, "ny": 123},
{"name": "서천", "emoji": "🌲", "nx": 55, "ny": 94},
]
6-2. 구현
기존에 단일 지역을 조회하던 구조를 LOCATIONS 리스트를 순회하며 두 번 호출하도록 변경했습니다.
forecasts = []
for loc in LOCATIONS:
items = fetch_kma_forecast(target_date, loc["nx"], loc["ny"], api_key)
forecast = parse_forecast(items, target_date)
forecasts.append((loc, forecast))
message = build_message(forecasts, label)
Claude 프롬프트에는 요일에 따라 나나의 한마디 톤을 다르게 지정했습니다:
if is_weekend: # 금, 토, 일
tip_rule = '🐱 나나의 한마디: "서천에 간다면!" 톤으로 한줄 팁'
else: # 월~목
tip_rule = '🐱 나나의 한마디: 분당 출퇴근 기반 한줄 팁'
Step 7. 나나의 옷장 — 기온별 옷차림 추천 👗
7-1. 탄생 배경
이 날씨봇을 팀에 공유했더니 반응이 왔습니다:
팀원: “오 저도 이거 카톡 신청해도 되나요?(안됨ㅋ) 아침에 어느 두께의 옷을 입어야 할지도 알려주면 좋겠음”
그 말을 듣고 대학생 때가 떠올랐습니다.
나: “오 그거 저 대학생 때 HCI 수업에서 팀 프로젝트로 만들었던 서비스인데ㅋㅋ 앱 이름이 ‘이거입어’였어요”
그러자 조이가:
조이: “이거입어 테일러버전 만들어줘요!”
2018년에는 3개월 동안 계획하고 만들었던 서비스를, 이번에는 10분 만에 만들었습니다.
7-2. 데이터 구축
기온별 옷차림 이미지 3장을 Claude Code에 넘기고, 중복을 제거하여 8단계 기온 구간으로 정리했습니다.
CLOTHING_MAP = [
(28, None, "민소매, 반팔, 반바지, 숏팬츠, 린넨 의류, 원피스"),
(23, 27, "반팔, 티셔츠, 얇은 셔츠, 반바지, 면바지"),
(20, 22, "블라우스, 긴팔 티, 셔츠, 얇은 가디건, 면바지, 청바지, 7부바지"),
(17, 19, "얇은 니트, 맨투맨, 가디건, 후드티, 바람막이, 긴바지, 청바지, 슬랙스"),
(12, 16, "자켓, 가디건, 청자켓, 야상, 기모후드티, 니트, 맨투맨, 스타킹, 청바지"),
(9, 11, "트렌치코트, 야상, 자켓, 점퍼, 니트, 청바지, 스타킹, 기모바지"),
(5, 8, "코트, 울 코트, 가죽자켓, 히트텍, 니트, 후리스, 기모 옷, 레깅스"),
(None, 4, "패딩, 두꺼운 코트, 누빔 옷, 기모제품, 히트텍, 목도리, 장갑"),
]
7-3. Claude가 센스있게 골라주기
이 옷차림 후보 전체를 나열하면 구구절절해지니까, Claude Sonnet이 1~2개만 센스있게 골라서 자연스럽게 추천하도록 했습니다.
프롬프트에 이렇게 지시합니다:
오늘 낮 최고기온(8°C) 기준 옷차림 후보: 코트, 울 코트, 가죽자켓, 히트텍, 니트, 후리스, ...
규칙:
- "👗 나나의 옷장" 섹션: 위 후보에서 센스있게 1~2개만 골라 자연스럽게 추천
예: "코트에 니트 조합이면 딱!" 또는 "후드티 하나면 충분해요~"
결과:
👗 나나의 옷장
▸ 코트에 니트 조합이면 딱!
트러블슈팅 정리
1. GitHub Actions에서 workflow 파일 push 거부
! [remote rejected] refusing to allow an OAuth App to create or update workflow
해결: gh auth refresh -h github.com -s workflow로 workflow 스코프를 추가한 후 push.
2. 카카오 토큰 갱신 401 에러
❌ 토큰 갱신 실패: 401 Client Error
해결: 카카오 앱에 Client Secret이 설정되어 있으면 갱신 요청에 client_secret 파라미터가 필수. GitHub Secrets에 KAKAO_CLIENT_SECRET을 추가.
3. Anthropic API 크레딧 부족
Your credit balance is too low to access the Anthropic API
해결: console.anthropic.com에서 $5 충전. 이 용도로는 수년간 사용 가능.
최종 프로젝트 구조
pangyo-action/
├── .github/
│ └── workflows/
│ └── pangyo-weather.yml # GitHub Actions (매일 6시 KST)
├── pangyo_weather_kakao.py # 메인 스크립트
└── requirements.txt # requests, anthropic
GitHub Secrets (총 6개)
| Secret | 용도 |
|---|---|
KMA_API_KEY |
기상청 단기예보 API |
KAKAO_REST_API_KEY |
카카오 앱 REST API 키 |
KAKAO_CLIENT_SECRET |
카카오 앱 Client Secret |
KAKAO_ACCESS_TOKEN |
카카오톡 전송용 토큰 |
KAKAO_REFRESH_TOKEN |
토큰 자동 갱신용 |
ANTHROPIC_API_KEY |
Claude API (브리핑 생성) |
운영 비용
| 항목 | 월 비용 |
|---|---|
| GitHub Actions | 무료 (public/private 모두 월 2,000분 무료) |
| 기상청 API × 2 (분당+서천) | 무료 (공공데이터) |
| 카카오톡 API | 무료 |
| Claude Sonnet API | ~$0.20 (하루 1회, 토큰 증가분 반영) |
| 합계 | ~$0.20/월 |
향후 개선 아이디어
- 미세먼지 정보 추가: 에어코리아 API 연동
- 주간 날씨 요약: 일요일 저녁에 한 주 날씨 브리핑
- 카카오 refresh_token 자동 갱신: 만료 1개월 전 자동으로 GitHub Secrets 업데이트 (현재는 수동)
- 팀원 구독 기능: 원하는 사람도 나나한테 카톡 받을 수 있게
마치며
Claude 웹에서 시작해서 Claude Code로 자동화까지, 기본 버전은 1시간도 안 걸렸습니다. 거기서 두 지역 비교, 옷차림 추천, 날씨봇 캐릭터까지 추가하는 데도 30분이면 충분했습니다.
특히 인상적이었던 점:
- Claude Code가
ghCLI로 레포 생성, Secrets 등록, 워크플로우 실행까지 한번에 처리 - 토큰 갱신 에러도 로그 보고 바로 원인 파악 → 수정 → 재배포
- Claude API를 한번 더 태워서 데이터 나열 → 자연어 브리핑으로 퀄리티 업
- 기온별 옷차림 이미지 3장을 넘기면 데이터를 알아서 추출하고 코드화
- 2018년에 HCI 수업 팀프로젝트로 3개월 걸려 만들었던 “이거입어” 서비스를, 2026년에는 10분 만에 만듦
월 300원도 안 되는 비용으로 매일 아침 AI 날씨 비서 나나🐱가 카톡을 보내주는 시스템이 완성됐습니다.