지금 상태 (2026-09-03 기준) — PRD에서 정한 MVP 4개 항목이 전부 작동 중입니다. 구글 클라우드 무료 VM에 n8n을 직접 설치해서, 제 컴퓨터가 꺼져 있어도 하루 3번 알아서 돕니다.
9월 3일에 근거 기사 링크가 엉뚱한 기사를 가리키던 버그를 잡고, 텔레그램·위키가 쓰던 LLM 노드를 하나로 합쳤습니다. 자세한 내용은 링크 88개 전수 검증 사례글에 정리했습니다.
무엇을
매일 세 번(9시·12시·18시), 반도체·배터리·AI 세 섹터의 뉴스를 훑어서 그날 공통으로 뜨는 키워드를 뽑고, 설명과 실제 사례를 붙여 텔레그램으로 보내주는 봇입니다. 같은 키워드가 동시에 이 사이트의 학습위키 용어 사전에도 자동으로 저장돼서, 쓰면 쓸수록 저만의 반도체·배터리·AI 용어 사전이 자랍니다.
왜
의료기기 업계에서 반도체·배터리·AI 분야로 이직을 준비하고 있는데, 이 분야 뉴스는 양이 너무 많아서 하나하나 다 읽고 분석할 시간이 없습니다. 그런데 여러 기사를 보면 그날그날 공통으로 뜨는 키워드가 있습니다 (예: 배터리 뉴스면 “전고체 배터리”). 이 키워드만 잡아 부연 설명과 사례를 받으면, 짧은 시간에 트렌드를 따라갈 수 있습니다. 지식도 쌓고, 이직 면접·포트폴리오에서 “제가 만들어 쓰고 있습니다”라고 보여줄 수도 있습니다.
지금 어떻게 돌아가나 (2026-09-03)
전체 흐름
n8n 워크플로 하나로 돌아갑니다. 기사 수집부터 Claude 호출까지 하나로 공유하고, 그 결과를 텔레그램 가지와 위키 저장 가지가 나눠 씁니다.
Schedule Trigger (매일 9시·12시·18시)
↓
RSS Read × 3 (세 매체 동시 수집)
↓
Merge (Append, 3 inputs)
↓
Remove Duplicates (기사 link 기준, 지난 실행에서 보낸 건 제외)
↓
Aggregate (title · link 두 배열로 묶기)
↓
Wiki_LLM (Claude, JSON 출력 — 섹터별 용어·유형·설명·사례·기사번호)
├─→ [위키 가지] Code(섹터 분리 + 번호→링크 조회)
│ → GitHub API GET (현재 문서+sha 읽기)
│ → Code (기존 용어면 동향 갱신, 새 용어면 섹션 추가)
│ → GitHub API PUT (커밋)
└─→ [텔레그램 가지] Code(문장 조립 + 번호→링크 조회) → Telegram 발송
처음엔 텔레그램용·위키용 LLM 노드를 따로 뒀는데, 같은 기사 목록을 두 번 물어보는 낭비였습니다. 게다가 두 번 물으니 텔레그램과 위키에 서로 다른 키워드가 뜰 수 있었습니다. 9월 3일에 하나로 합쳐서 Claude 호출이 하루 6번 → 3번으로 절반이 됐고, 두 곳이 항상 같은 키워드를 말하게 됐습니다.
RSS 소스 (3개, 실제 작동 확인 완료)
| 매체 | 피드 URL | 가져오는 건수 | 역할 |
|---|---|---|---|
| ZDNet Korea | https://feeds.feedburner.com/zdkorea | 30 | IT 전반·보안·AI |
| 한국경제 (IT·과학) | https://www.hankyung.com/feed/it | 50 | 산업·기업 동향 |
| 디일렉 (THE ELEC) | https://www.thelec.kr/rss/allArticle.xml | 50 | 반도체·배터리 전문 |
세 피드 다 반도체/배터리/AI로 미리 나뉘어 있지 않아서, Claude가 기사 내용을 보고 섹터를 분류합니다. 디일렉을 넣은 뒤로 “배터리 섹터에 기사가 없습니다”가 뜨던 문제가 해결됐습니다.
텔레그램 메시지 포맷 (섹터별로 3블록 반복)
🔋 배터리
키워드: 전고체 배터리
설명: 액체 전해질 대신 고체를 써서 화재 위험을 줄인 배터리
사례: 삼성SDI, 2027년 양산 목표 발표
원문: [기사 링크]
이 메시지는 Claude가 직접 쓰는 게 아니라, Claude가 낸 JSON을 Code 노드가 문장으로 조립합니다. 그래야 링크를 프로그램이 붙일 수 있습니다(바로 아래 참고).
원문 링크는 AI가 쓰지 않습니다
처음엔 Claude에게 기사 목록을 제목 | 링크 형태로 보여주고 “고른 기사의 링크를 그대로 써라”고 시켰습니다. 그런데 링크가 엉뚱한 기사를 가리키는 일이 계속 생겼습니다. 130줄짜리 목록에서 비슷하게 생긴 URL을 잘못 베낀 겁니다.
지금은 이렇게 바꿨습니다.
- 프롬프트에 링크를 아예 안 보여줍니다.
[0] 기사 제목처럼 번호만 붙여서 줍니다. - Claude는 기사번호와 기사제목만 답합니다. (URL을 쓰지 말라고 명시)
- Code 노드가
Aggregate의 원본 배열에서 그 번호의 진짜 링크를 꺼내 붙입니다.
번호가 한 칸 밀려도 제목으로 다시 찾는 안전망을 3단으로 뒀고, 그래도 못 찾으면 그 섹터는 저장하지 않습니다. 틀린 링크를 남기느니 하루 건너뛰는 쪽을 택했습니다.
학습위키 자동 저장
n8n이 GitHub Contents API로 이 사이트 저장소에 직접 커밋합니다. 섹터마다 문서 한 개씩, 총 3개가 계속 자랍니다.
용어 하나가 저장되는 형태는 이렇습니다.
## 용어명— LLM이 매번 다르게 쓰던 괄호 설명(HBM(High Bandwidth Memory))은 떼어내고 저장해서, 같은 용어가 여러 섹션으로 쪼개지지 않게 했습니다.- 설명 — 처음 등장할 때 한 번만 기록하고 이후로는 안 바꿉니다.
- 최근 동향 — 몇 번 언급됐는지 세면서 최신 내용으로 갱신합니다.
- 근거 기사 — 접힌 블록에 최근 3개만 남기고 오래된 건 잘라냅니다. 1년이 지나도 문서가 무한정 길어지지 않게 한 장치입니다. 링크는 AI가 아니라 프로그램이 붙입니다(위 참고).
커밋이 올라가면 Vercel이 자동으로 재배포해서, 몇 분 안에 이 사이트에 반영됩니다.
실행 환경
구글 클라우드(GCP) 무료 VM에 n8n을 직접 설치(셀프호스팅)해서 씁니다.
| 항목 | 내용 |
|---|---|
| OS | Debian 13 |
| 설치 방식 | Docker (n8nio/n8n, 포트 5678, --restart unless-stopped) |
| 시간대 | Asia/Seoul |
| 접근 제어 | 방화벽에서 제 IP만 허용 |
| LLM | Claude API (Anthropic Chat Model 노드) |
메모리가 1GB뿐이라 n8n이 조용히 죽는 문제가 있었는데, 스왑 1GB를 붙여서 해결했습니다. docker ps는 Up으로 멀쩡해 보이는데 접속만 안 되는 증상이라 원인 찾는 데 제일 오래 걸렸습니다.
발송 스케줄
매일 9시 · 12시 · 18시 하루 3회 (0 9,12,18 * * *). PRD 원안은 오후 6시 1회였지만, 위키 저장이 붙고 나니 촘촘한 쪽이 낫다고 판단해서 3회로 유지하고 있습니다.
기능 요구사항 (MVP) — 4/4 완료
- RSS 피드에서 그날 올라온 새 기사만 수집 (중복 발송 방지)
- LLM이 반도체·배터리·AI로 기사 분류 후 섹터당 키워드 1개(설명+사례+원문 링크) 생성
- 매일 정해진 시각에 텔레그램 발송
- 뽑힌 키워드를 위키 용어 사전 페이지에 자동 저장
원안(PRD)에서 바뀐 것
만들면서 실제로 부딪혀 바꾼 것들입니다. 왜 바꿨는지까지 남겨둡니다.
| 항목 | PRD 원안 (2026-07-30) | 지금 | 바꾼 이유 |
|---|---|---|---|
| 실행 환경 | 내 PC에 npx n8n 로컬 설치 | GCP 무료 VM 셀프호스팅 | 컴퓨터를 켜둬야만 돌아가는 제약이 실제로 발목을 잡음. 오라클 클라우드를 먼저 시도했다가 카드 결제 단계에서 막혀 GCP로 선회 |
| RSS 소스 | 한국경제 + 비즈니스포스트 2개 | ZDNet Korea + 한국경제 + 디일렉 3개 | 비즈니스포스트는 User-Agent가 비면 403인데 n8n RSS Read 노드로는 UA를 못 바꿈. 배터리 기사가 자주 비어서 전문 매체(디일렉)를 추가 |
| 발송 횟수 | 오후 6시 1회 | 9시·12시·18시 3회 | 위키에도 쌓이게 되면서, 촘촘히 도는 편이 사전이 빨리 자람 |
| 위키 저장 단위 | 개념 페이지에 키워드별 저장 | 섹터별 문서 3개에 누적 | 키워드마다 문서를 만들면 문서 수가 무한정 늘어남. 텔레그램도 섹터별로 나눠 보내고 있어서 구조를 통일 |
| 위키 동향 갱신 | 기존 동향 + 새 기사를 LLM이 재요약 | 오늘 뽑은 사례 문장으로 덮어쓰기 | LLM 호출을 아끼려고 1차 버전은 단순하게 감. 항상 최신이라 실용상 문제는 없음 — 업그레이드 과제로 남김 |
| 원문 링크 | LLM이 고른 기사의 링크를 그대로 출력 | LLM은 기사번호만, 링크는 Code 노드가 조회 | 긴 목록에서 비슷한 URL을 잘못 베끼는 일이 잦았음. 링크 88개를 전수 확인해보니 27개가 엉뚱한 기사를 가리킴 |
| LLM 노드 | 텔레그램용·위키용 2개 | 하나로 통합 (Wiki_LLM) | 같은 기사 목록을 두 번 묻는 낭비였고, 두 곳의 키워드가 달라질 수 있었음. Claude 호출 6회 → 3회 |
앞으로 다듬을 것
- 최근 동향 재요약 업그레이드 — 지금은 덮어쓰기라 흐름이 안 남습니다. 기존 동향과 새 기사를 함께 넣어 LLM이 1~2문장으로 다시 쓰게 하면 맥락이 이어집니다.
- 실패 알림 —
Error Trigger→ 텔레그램. 지금은 워크플로가 실패하면 조용히 아무것도 안 옵니다. - 원문 본문 요약 — 지금은 원문 링크만 붙습니다. 링크를 열어 본문을 읽고 짧게 요약한 줄을 메시지에 추가하면, 클릭하기 전에 감을 잡을 수 있습니다.
- 섹터 누락 감지 — 세 섹터 중 하나가 빠져도 조용히 넘어갑니다. 지금은 프롬프트에 “반드시 셋 다 고르라”고 적어 완화해뒀지만, 빠졌을 때 알려주는 장치가 있으면 좋겠습니다.
여기까지 해결된 것
새 기사가 없는 날— 중복 제거가 전부 걸러내면 메시지가 아예 안 오던 문제. 텔레그램 조립 Code 노드에서"오늘은 새로 뽑힌 소식이 없습니다."를 보내도록 해결했습니다. (2026-09-03)원문 링크 오배정— LLM이 URL을 받아 적던 구조를 번호 방식으로 바꿔 해결했습니다. (2026-09-03)
하루 단위로 잘게 쪼갠 세부 실행계획은 4주 세부 실행계획에서 확인할 수 있어요. 자세한 4주 로드맵은 학습위키에서 확인할 수 있어요.