YouTube URL 하나로 학습 노트 자동 완성 — Telegram + Claude Code + Neo4j로 개인 지식 그래프 만들기

AI/LLM 관련 YouTube 강의를 많이 보는 편인데요, 영상이 쌓일수록 오히려 지식이 휘발되는 느낌이었습니다. 보는 데 시간은 꽤 들어가는데, 배운 내용들이 머릿속에서 연결이 안 되고 흩어지더라고요. 배운 지식들을 어떻게 연결시킬지 고민하는 시간도 만만치 않았습니다.

그래서 만들었습니다. YouTube URL 하나를 Telegram에 보내면 AI가 자동으로 학습 노트를 생성하고, Neo4j 지식 그래프를 구축하고, Obsidian vault에 저장해주는 시스템 — LecMarkdown입니다.

한국어 텍스트가 적힌 컴퓨터 화면

🤔 해결하려던 문제

구체적으로 어떤 상황이었냐면, 두 재생목록(총 20개 영상)을 보면서 노트를 정리하고 있었는데 한계가 명확했어요.

  1. 지식의 휘발 → 영상 하나에 30~60분을 투자하는데, 며칠 지나면 핵심 내용이 기억 안 남음

  2. 지식의 파편화 → 비슷한 개념(예: RAG)이 여러 영상에 다른 맥락으로 나오는데, 이 연결 고리를 수동으로 만들자니 노력이 너무 많이 듦

  3. 비용 문제 → 노트의 퀄리티를 높이려면 좋은 AI 모델이 필요한데, API로 많은 영상을 처리하면 비용이 너무 많이 듦

특히 첫 번째 문제가 결정적이었습니다. 그래서 떠올린 아이디어가 유튜브 링크를 통해 자막을 다운받고 자막 내용을 분석하자라는 것이었어요. 비용 문제는 도커로 클로드코드를 상시 실행해 놓자는 아이디어로 풀었고요. Claude Code는 월 구독이라 사용량 제한 없이 쓸 수 있으니, 영상을 몇 개를 처리하든 추가 비용이 거의 없습니다.

원했던 건 간단했습니다. URL 하나 입력 → 구조화된 노트 자동 생성 → 기술/개념 간 관계를 그래프로 자동 연결 → 쌓인 지식이 휘발되지 않고 계속 연결되는 시스템.


🔧 사용한 도구

역할

도구

사용자 인터페이스

Telegram (URL 입력 + 결과 수신), Obsidian (노트 열람)

자동화 오케스트레이션

n8n (트리거 & 알림), Claude Code Agent (파이프라인 제어)

AI 엔진

GPT-4o (노트 생성/스키마 추출), Claude (에이전트 런타임), Gemini 2.0 Flash (보조)

지식 저장

Neo4j — Docker (관계 그래프), Obsidian Vault (마크다운 문서)

미디어 처리

yt-dlp (메타데이터/자막), faster-whisper (음성→텍스트)

채널 관리

Notion (허용 채널 DB)

언어/검증

Python 3.12, Pydantic


🚀 전체 아키텍처 — URL에서 지식 그래프까지

[사용자]
  │ YouTube URL을 Telegram에 전송
  ▼
[Telegram Bot → n8n]
  │ URL 추출 + Notion DB에서 채널 검증
  ▼
[n8n → SSH → Claude Code]
  │ process-youtube 에이전트 실행 (7개 스킬을 순서대로 호출하는 AI 오케스트레이터)
  ▼
[Step 1: extract-transcript]  yt-dlp 메타데이터 + 자막 (YouTube API→자동자막→Whisper 순)
[Step 2: generate-note]       LLM이 자막 → 구조화 학습 노트 (타임스탬프 + 보충 설명)
[Step 3: extract-schema]      노트에서 기술/개념/관계 JSON 추출
[Step 4: compose-and-load]    Obsidian vault 저장 + Neo4j MERGE 적재
[Step 5: update-knowledge]    기술별 종합 Knowledge 문서 자동 갱신
[Step 6: Git commit & push]   vault 자동 커밋
[Step 7: report-result]       파싱 가능한 결과 텍스트 출력
  ▼
[n8n → Telegram]
  처리 결과 알림 수신
비즈니스 프로세스의 흐름도

처음부터 이 구조는 아니었어요 (아래 고민 섹션에서 자세히 다룹니다). 여러 시행착오를 거쳐 도달한 최종 구조의 핵심 아이디어는 Claude Code를 오케스트레이터로 쓰는 것이에요. 전통적인 코드 파이프라인이 아니라 AI 에이전트가 7개 스킬을 순서대로 호출하며 전체 파이프라인을 제어해요. 각 스킬에는 eval 기준이 있어서 자동으로 프롬프트를 개선하는 루프도 붙어 있고요.


💡 구축하면서 가장 고민했던 세 가지

1. 이중 저장 — Neo4j와 Obsidian 둘 다 써야 하나?

처음엔 "굳이 Neo4j까지 필요한가?" 싶었어요. Obsidian만 써도 [[위키링크]]로 연결이 되니까요.

그런데 차이가 있었어요. Obsidian은 인간이 읽고 탐색하는 용도이고, Neo4j는 기계가 쿼리하는 용도예요. "RAG와 연관된 모든 기술을 찾아줘"를 Obsidian에서 하려면 손으로 훑어야 하지만, Neo4j에서는 Cypher(Neo4j의 쿼리 언어) 한 줄이면 돼요. 그래서 둘 다 쓰기로 했어요.

// "RAG와 연관된 기술들을 2단계까지 찾아줘"
MATCH (t:Technology {name: "RAG"})-[:RELATED_TO*1..2]-(related)
RETURN related.name, labels(related)

2. Claude Code를 오케스트레이터로 — 비용 문제의 해결책

처음엔 Python으로 단계를 순서대로 호출하는 스크립트를 짰어요. 그런데 각 단계에서 예외 처리, 재시도, 컨텍스트 전달이 복잡해지더라고요. 게다가 노트 생성과 스키마 추출에 좋은 모델을 쓰려면 API 비용이 영상 하나당 꽤 들었어요. 수십 개 영상을 처리하려면 비용이 너무 아까웠어요.

Claude Code Agent(Docker)로 바꾸면서 두 마리 토끼를 잡았어요. 첫째, 에이전트가 스킬 출력을 읽고 다음 스킬에 넘겨줄 컨텍스트를 알아서 판단하니 코드가 간결해졌어요. 에러가 나도 에이전트가 추론해서 처리합니다. 둘째, 이미 구독하고 있는 Claude Code 안에서 돌아가니 영상을 몇 개를 처리하든 추가 API 비용이 거의 없습니다.

3. n8n 연동 — 출력 형식을 API 스펙처럼 관리하기

n8n의 format-result.js가 에이전트 출력을 파싱해서 Telegram 메시지로 만들어줘요. 그런데 파서가 이렇게 생겼어요.

- 제목: {영상 제목}
- 채널: {채널명}
- 상태: ✅ 처리완료

한 글자라도 다르면 파싱 실패예요. 그래서 report-result 스킬의 출력 형식을 REST API 응답처럼 엄격하게 관리하게 됐어요. AI 에이전트 출력이 프로토콜이 되는 경험이 흥미로웠어요.


😅 시행착오 — 삽질 포인트 세 가지

삽질 1: Whisper가 기술 용어를 이상하게 인식함

Whisper STT로 자막을 뽑으면 기술 용어를 엉뚱하게 적더라고요. "LLM"을 "엘엘엠"으로, "Neo4j"를 "네오제이"로 적는 식이에요. 학습 노트에 이게 그대로 들어가면 나중에 검색도 안 되고 Neo4j에 적재할 때 노드 매칭도 실패해요.

해결책은 ASR 용어 정규화 레이어를 generate-note 단계에 추가하는 것이었어요. "엘엘엠" → "LLM", "랭체인" → "LangChain" 같은 매핑 목록을 만들어두고, 유사한 문자열이 나오면 정규화하는 방식이에요.

삽질 2: update-knowledge 단계 컨텍스트 초과

처음엔 "영상 노트 보고 관련 기술 문서 전부 한 번에 업데이트"를 하나의 LLM 호출로 처리하려 했어요. 강의 영상 하나에 기술/개념이 꽤 많이 나오는데, 이걸 한 번에 처리하면 컨텍스트가 폭발해요.

3단계로 나눴어요.

  • prepare: Neo4j를 쿼리해서 "이번 영상 때문에 업데이트가 필요한 엔티티 목록"을 먼저 정리

  • body: 각 엔티티별로 순차적으로 문서 작성 (한 번에 하나씩)

  • finalize: 작성된 문서들을 vault 저장 + Neo4j 갱신

이렇게 나누니까 컨텍스트 초과 없이 안정적으로 돌아가요.

삽질 3: Source Attribution을 처음부터 설계하지 않음

초기에는 LLM이 노트를 생성할 때 "영상에서 직접 나온 내용"과 "LLM이 배경 지식으로 추가한 내용"을 구분하지 않았어요. 나중에 보면 어디까지가 강사가 실제로 한 말인지 알 수 없더라고요.

그래서 source: video vs source: augmented 필드를 모든 기술/개념에 붙였어요. 그리고 augmented 비율을 30% 이하로 관리하는 규칙을 뒀고요. 원본 강의의 신뢰도를 유지하기 위해서예요.


✅ 결과

항목

Before

After

영상 1개 처리 시간

30~60분 수동 작성

URL 입력 후 3~5분 자동 처리

처리 방식

강의 보면서 직접 타이핑

Telegram에 URL만 전송

노트 품질

들리는 내용 위주

타임스탬프별 구조화 + AI 보충 설명

기술 간 연결

수동 관리 불가

Neo4j에서 자동 그래프 연결

"이 기술이 어느 영상에서?"

파일 열어서 직접 확인

Cypher 쿼리 한 줄

제 경험 기준으로 현재까지 20개 이상의 영상이 처리되어 있고, 그래프에는 개념 노드 약 700개, 기술 노드 약 500개, 관계 6,000개 이상이 쌓여 있어요. 영상에서 직접 언급된 내용(video)과 AI가 보충한 내용(augmented)의 비율도 30% 이하로 잘 유지되고 있고요.

macos macos macos macos macos macos macos macos macos macos

예상치 못한 부가 효과도 있었는데요, 강의를 볼 때 노트 걱정을 안 해도 되니까 내용에 집중하게 되더라고요. 강의 시청 경험 자체가 달라졌어요.


🎯 팁 / 꿀팁

1. Eval 기준을 먼저 만들고 프롬프트를 나중에 짜세요

저는 각 스킬마다 binary(yes/no) 평가 기준을 먼저 정의했어요. generate-note는 10개, extract-schema는 12개, 총 42개 기준이 있어요. optimize-skill 에이전트가 이 기준으로 자동으로 프롬프트를 평가하고 개선해요. Andrej Karpathy가 말한 Auto Research 방법론과 비슷한 접근인데, 막연하게 프롬프트를 수정하는 것보다 훨씬 체계적으로 품질이 올라가요.

2. Neo4j에서는 MERGE만 쓰세요 (CREATE 금지)

MERGE는 "이미 있으면 매칭, 없으면 생성"이에요. CREATE를 쓰면 같은 기술 노드가 영상마다 중복으로 생겨요. MERGE로 쌓아야 그래프가 의미 있는 연결망이 돼요.

3. Source Attribution은 처음부터 설계하세요

나중에 추가하려면 기존 데이터를 다 고쳐야 해요. 영상에서 직접 언급된 내용(source: video)과 AI가 배경 지식으로 추가한 내용(source: augmented)을 처음부터 구분해두면 원본 신뢰도 관리가 훨씬 쉬워요.

4. AI 에이전트 출력은 API 스펙처럼 고정하세요

위 고민 #3에서도 다뤘지만, 정말 중요해서 한 번 더 강조해요. n8n이나 Make 같은 자동화 도구와 연동할 때, 에이전트가 조금이라도 다르게 출력하면 전체 파이프라인이 조용히 깨져요. 출력 형식을 명세로 관리하는 습관이 중요해요.


🔭 여기서 끝이 아닙니다 — 지식 활용 단계까지 구현했어요

노트와 그래프를 쌓기만 하면 의미가 없겠죠. 그래서 쌓인 지식을 실제로 활용하는 기능까지 만들었어요.

1. 지식 기반 업그레이드 제안

프로젝트를 선택하면, 그래프에 저장된 기술 정보 중 해당 프로젝트에 적용할 수 있는 기술을 자동으로 추천해줘요. 예를 들어 "Knowledge Hub" 프로젝트를 선택하면 LangChain(18건 자료), Neo4j(14건 자료), Graphiti(2건 자료) 같이 적용 가능한 기술과 관련 자료 수를 보여줘요.

중국어로 된 대시보드 스크린샷

2. 그래프 품질 진단 & 자동 수정

지식 그래프의 품질을 자동으로 진단하고, 문제가 발견되면 자동으로 고치는 기능이에요. "진단 실행" 버튼 하나로 고아 노드(연결 없이 떠 있는 노드), 중복 관계(같은 관계가 두 번 들어간 것), 누락된 속성 등을 체크하고 수정해요.

앞으로 더 해보고 싶은 것

  • Graphiti 적용: 기술 버전 변화를 시간 축으로 추적 (예: "2024년 초 영상의 RAG 설명 vs 2025년 말 영상의 RAG 설명이 어떻게 달라졌나?")

  • 소스 확장: YouTube 외에 PDF 논문, Notion 문서, 팟캐스트도 같은 파이프라인으로 처리

지식을 쌓는 것에서 끝나는 게 아니라, 쌓인 지식이 실제 프로젝트에 도움을 주는 선순환 구조가 만들어진 게 가장 만족스러워요.


💬 이런 분들께 도움돼요

  • YouTube 강의를 보면서 수동으로 노트를 정리하고 계신 분

  • 공부한 내용이 파일 여러 개에 흩어져 있어서 나중에 찾기 힘드신 분

  • Claude Code나 n8n으로 자동화 파이프라인을 처음 만들어보려는 분

  • Neo4j 지식 그래프를 실제 프로젝트에 어떻게 활용하는지 궁금하신 분

  • 개인 지식 관리 시스템(PKM)을 자동화하고 싶으신 분

2
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요