ksungz
Engineering

텔레그램 봇으로 만드는 개인 뉴스 에이전트

GeekNews 크롤링 → AI 분석 → 블로그 PR 자동 생성까지, 뉴스 소비를 콘텐츠 생산으로 바꾸는 파이프라인

텔레그램 봇Claude CLI자동화GeekNews블로그

뉴스를 읽는 건 좋은데

개발자라면 기술 뉴스를 읽는 게 일상이다. GeekNews, Hacker News, 트위터 — 매일 쏟아지는 글 중에서 읽을 만한 걸 골라내고, 읽고, "아 이거 재밌네" 하고 넘어간다.

문제는 이게 소비로 끝난다는 것.

읽고 5분이면 잊는다. 나중에 "그거 어디서 봤더라" 하면서 브라우저 기록을 뒤지거나, 결국 다시 검색한다. 글을 읽은 시간 대비 남는 게 없다는 느낌이 계속 들었다.

그래서 만든 게 텔레그램 봇이다. 뉴스를 읽는 행위를 블로그 콘텐츠로 전환하는 파이프라인.

전체 흐름

매일 아침 8시, 봇이 텔레그램으로 메시지를 보낸다.

GeekNews 최신 글 목록

GeekNews 최신 글 15개를 크롤링해서, 제목과 링크를 번호로 정리해준다. 출근길에 훑어보고 숫자를 답장하면 — 그게 전부다. 내가 하는 건 여기까지.

숫자 답장 → 분석 시작

나머지는 봇이 처리한다:

  1. 선택된 글의 원문 본문GeekNews 커뮤니티 토론 코멘트를 병렬로 가져온다
  2. Claude CLI로 각 글을 분석한다 — 요약, 핵심 인사이트, 블로그 각도, 관련 프로젝트, 적용 가능한 아이디어
  3. 분석 결과를 지식베이스(JSON, 최대 300개)에 저장한다
  4. 분석 결과를 바탕으로 블로그 초안 MDX 파일을 생성한다
  5. GitHub API로 PR을 자동 생성한다

분석 결과 + 블로그 초안 생성

텔레그램에서 숫자 몇 개 답장하면, 10분 뒤에 GitHub에 블로그 PR이 올라와 있다.

자동 생성된 GitHub PR

핵심은 "사람이 고르는 단계"

자동화할 수 있는 건 전부 자동화했지만, 어떤 글을 읽을지 고르는 단계만큼은 의도적으로 사람한테 남겨뒀다.

이유가 있다. 처음에는 "AI가 중요한 글을 알아서 골라주면 되지 않나?"라고 생각했다. 근데 AI가 고른 글은 대체로 무난하다. 조회수 높고, 키워드 핫한 글을 잘 골라주긴 하는데, "이건 내 프로젝트에 써먹을 수 있겠다" 같은 감각은 사람만 가지고 있다.

15개 제목을 훑어보는 데 30초면 된다. 그 30초의 판단이 뒤에 나오는 블로그 글의 품질을 결정한다.

분석 단계에서 벌어지는 일

숫자를 답장하면 봇이 가장 먼저 하는 건, 선택된 글의 원문과 GeekNews 토론 코멘트를 동시에 가져오는 것이다.

원문만으로는 부족하다. GeekNews 토론에는 실무 개발자들이 "우리 팀에서 써봤는데"라든가 "이거 실제로는 이런 문제가 있다"는 코멘트를 달아둔다. 이게 원문보다 가치 있을 때가 많다.

두 소스를 합쳐서 Claude CLI에 넘기면, 이런 구조로 분석 결과가 나온다:

{
  "summary": "핵심 내용 3~4줄",
  "keyInsights": ["구체적 인사이트들"],
  "blogAngle": "이 글로 블로그를 쓴다면 전달할 핵심 관점",
  "tags": ["태그"],
  "relevantProjects": ["내 프로젝트 중 관련된 것"],
  "applicableIdeas": ["실제로 적용 가능한 아이디어"]
}

relevantProjects가 특히 유용하다. 읽은 글이 내 프로젝트 중 어떤 것과 연결되는지를 자동으로 매핑해주니까, 나중에 "이 프로젝트에 적용할 만한 아이디어 뭐가 있었지?" 하고 지식베이스를 검색할 수 있다.

블로그 초안 → PR 자동 생성

분석이 끝나면 블로그 초안을 만든다. 여기서도 몇 가지 신경 쓴 게 있다.

글쓰기 관점 파일. 내 블로그에는 글 주제별로 "이런 관점으로 써라"는 가이드가 별도 파일로 정리되어 있다. 봇이 이 파일을 읽어서, 분석된 글과 가장 관련 높은 관점을 골라 프롬프트에 주입한다. 그래서 자동 생성된 글도 내 블로그 톤과 크게 벗어나지 않는다.

Claude 우선, Ollama 폴백. 초안 생성은 Claude CLI를 먼저 쓰고, 실패하면 로컬 Ollama로 폴백한다. Claude가 대부분의 경우 훨씬 낫지만, API 문제로 실패할 때 파이프라인이 멈추면 안 되니까.

초안이 나오면 ksungz-blog 레포에 브랜치를 만들고, MDX 파일을 커밋하고, GitHub API로 PR을 생성한다. 텔레그램에 PR 링크가 날아온다. 나는 그걸 열어서 읽고, 괜찮으면 머지한다. 수정이 필요하면 직접 손을 댄다.

pm2로 상시 실행

봇은 Mac에서 pm2로 돌아간다. 의존성이 telegraf, node-cron, dotenv 세 개뿐이라 가볍다.

매일 08:00 KST에 cron이 크롤링을 돌리고, 나머지 시간에는 텔레그램 메시지를 기다리고 있다. 실제로 이 봇이 내려간 적은 한 번도 없다 — 서버가 아니라 내 맥이니까, 맥이 켜져 있는 한 돌아간다.

이 파이프라인으로 바뀐 것

지금까지 이 봇으로 생성된 블로그 포스트가 10편, 지식베이스에 쌓인 글이 12건이다. 숫자 자체는 아직 크지 않지만, 뉴스를 읽는 습관 자체가 바뀌었다.

예전에는 글을 읽고 넘겼다. 지금은 아침에 봇이 보내준 목록을 보고, "이 중에 블로그로 풀 만한 게 뭘까?"를 생각한다. 읽는 시선이 달라진다. "재밌네" → "이걸 내 독자한테 어떤 각도로 전달하지?"

그리고 지식베이스가 쌓이면서, 비슷한 주제의 글이 반복될 때 "전에 이거랑 비슷한 게 있었는데"라고 연결 짓는 게 가능해졌다.

결국 이 봇의 핵심 가치는 자동화 자체가 아니다. 소비를 생산으로 바꾸는 구조를 만들어둔 것 — 이게 가장 큰 차이다.