n8n 로컬 설치 그리고 텔레그램 봇

저장소 정리 후, n8n에서 텔레그램 첫 발송까지 성공한 날

date: 2026-08-05

summary: RSS→Claude→텔레그램 첫 발송 성공, 메시지 포맷 다듬기부터 매일 오후 6시 자동 발송(Publish)까지 완성한 날. git 커밋 이메일 정리와 자동 커밋 훅 추가도 함께

---

## 오늘 뭘 했나 (텔레그램 발송 성공 중심)

오늘은 "저장소 정리"로 시작해서 "n8n 텔레그램 자동 발송 완성"으로 끝난 하루였다.

① n8n 텔레그램 발송 연결 — 오늘의 핵심 — 세부계획을 다시 보고 2주차 ②(텔레그램 발송 연결)를 오늘 할 일로 골랐다. 시작 전에 오픈소스로 이미 있는 게 있는지 찾아봤는데, n8n에 공식 내장된 Telegram 노드는 있지만 이 프로젝트만의 섹터 분류·위키 저장 기능을 담은 완성형 템플릿은 없어서 직접 이어붙이기로 했다. 학습메이트가 조작하는 자동화 브라우저는 비밀번호 입력이 막혀서 n8n 로그인이 안 됐고, 그래서 내가 직접 로그인해서 화면을 캡처해 보내면 학습메이트가 다음 버튼을 짚어주는 방식으로 바꿔서 진행했다. Telegram 노드를 추가하고 Credential(봇 토큰)·Chat ID를 넣은 뒤, Text 칸은 타이핑 없이 Basic LLM Chaintext 출력을 드래그해서 연결했다. Execute step을 눌렀더니 실제로 내 텔레그램에 "키워드: 고속충전" 메시지가 도착했다. RSS→Aggregate→Claude→Telegram, 파이프라인이 처음부터 끝까지 실제로 돌아가는 걸 처음 본 순간이었다.

② git 커밋에 남아있던 실제 이메일 발견 — 저장소 전체(파일+git 히스토리)를 개인정보 기준으로 다시 훑다가, API 키나 비밀번호는 없었지만 모든 커밋의 작성자 정보에 내 실제 Gmail 주소가 그대로 찍혀 있던 것을 발견했다. 파일 내용만 신경 쓰다가 놓칠 뻔한 부분이었다. 로컬 저장소의 커밋 이메일을 GitHub이 주는 비공개 주소로 바꿔서, 오늘 이후 커밋부터는 실제 이메일이 안 찍히게 정리했다.

③ 밀린 학습일지 발견 → 자동 커밋 훅 추가 — GitHub 저장소를 비공개로 바꾸는 김에 확인해보니, 7/30·8/2 학습일지 3개가 로컬에만 있고 GitHub엔 한 번도 안 올라가 있었다. 원인은 7/30 GitHub Desktop과 터미널이 동시에 저장소를 건드리며 lock 충돌이 났던 그날 이후로 아무도 커밋을 실행하지 않아서였다. 재발 방지로 journal 폴더에 파일이 쓰일 때마다 자동으로 커밋·푸시하는 훅을 만들어 테스트까지 마쳤다.

④ 메시지 포맷 다듬기 + 자동 발송 완성 — 텔레그램 발송 성공 후, 오늘 세운 다음 계획 세 가지를 그대로 만들었다. 먼저 Aggregate 노드에 link 필드를 추가해서 제목뿐 아니라 링크도 함께 넘기게 하고, Basic LLM Chain 프롬프트를 "🔋 배터리 / 키워드 / 설명 / 사례 / 원문" 형식으로 바꿔서 원문 링크까지 뽑아내게 했다. 중간에 Claude가 줄바꿈을 진짜 줄바꿈이 아니라 글자 그대로 \n으로 답해서, Telegram 노드의 Text 칸에 .replace(/\\n/g, '\n')을 추가해 해결했다. 이어서 n8n이 자동으로 붙이는 첨부 문구("Append n8n Attribution")를 껐고, 마지막으로 수동 실행 트리거를 지우고 Schedule Trigger(매일 오후 6시)로 바꿔 연결한 뒤 Publish까지 눌러서 자동 발송을 완성했다. 그 과정에서 오늘 뽑힌 기사가 실제론 배터리가 아니라 데이터센터 냉각 기사였다는 것도 발견했다 — 지금 쓰는 RSS가 배터리 전용이 아니라서 생기는, 이미 알고 있던 한계였다.

## 그때그때 느낀 것

- Telegram 액션 목록에서 "Send a text message"를 검색으로 못 찾아서 스크롤로 찾아야 했을 때 살짝 답답했다.

- 자동화 브라우저 로그인이 막혔을 때 방법을 바로 바꿔서 넘어간 게 다행이었다.

- 첫 텔레그램 메시지가 실제로 왔을 때가 오늘 제일 뿌듯한 순간이었다 — "대성공!"

- Claude가 줄바꿈을 글자 \n으로 그대로 답했을 때 신기하면서도 살짝 당황스러웠다.

- Publish 버튼을 눌러서 "매일 저절로 돈다"는 걸 실제로 만들어낸 게 뿌듯했다.

- 배터리가 아닌 기사가 뽑힌 걸 보고 "역시 어제랑 똑같은 문제구나" 싶었다.

## 배운 것 (누적)

- "저장했다/배포됐다"는 말을 그대로 믿지 말고 직접 확인해야 한다 — 오늘도 밀린 커밋과, 예전에 잘못 확인했던 배포 주소로 두 번이나 겪었다.

- git 커밋에는 파일 내용 말고도 작성자 이메일 같은 메타데이터가 따라붙는다.

- n8n에서 표현식은 타이핑 안 해도 INPUT 패널의 필드를 드래그하면 자동으로 연결된다.

- 자동화 브라우저는 보안상 비밀번호 입력이 막혀 있어서, 로그인이 필요한 화면은 본인이 직접 하고 캡처로 공유하는 게 낫다.

- n8n Aggregate 노드는 필드를 여러 개 등록하면 각각 배열로 나오는데, 같은 인덱스끼리는 원래 순서가 유지된다 — title[i]link[i]를 짝지어 쓸 수 있다.

- LLM이 줄바꿈을 실제 줄바꿈 대신 글자 그대로 \n으로 답할 수도 있다 — .replace(/\\n/g, '\n')으로 마지막에 정리하면 안전하다.

- n8n에서 "저장"과 "Publish"는 다르다 — Schedule Trigger 같은 자동 트리거는 Publish해야 실제로 작동한다.

- RSS 피드가 주제 전용이 아니면, LLM이 조건에 안 맞아도 제일 비슷한 걸 억지로 골라 답한다는 한계는 여전히 남아있다.

## 다음 계획

오늘 세운 계획 세 가지(포맷·첨부문구·스케줄)는 다 끝났다. 다음 할 일은 반도체·배터리 전문 매체 RSS를 추가해서, 진짜 배터리 기사가 없는 날 엉뚱한 기사를 억지로 고르는 문제를 줄이는 것이다. (참고: 로컬 설치라 컴퓨터가 켜져 있고 n8n이 실행 중일 때만 오후 6시 발송이 되는 제약은 3주차 "스케줄링 안정화"에서 다루기로 한 그대로 남아있다.)

3
4개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.