오픈 노트북 리뷰: 자체 호스팅 NotebookLM 대안

발행: (2026년 6월 9일 PM 07:10 GMT+9)
10 분 소요
원문: Dev.to

TL;DR

Open Notebook(Luis Novo / lfnovo가 만든)는 구글 NotebookLM에 대한 오픈소스 대안이며, 현재 큰 주목을 받고 있습니다. 이번 주에 GitHub에서 28,152개의 ⭐(일주일에 +3,891개) 를 기록했으며, 현재 주간 Python 트렌딩 상위 15위 안에 들어 있습니다. PDF, YouTube 동영상, 웹 페이지, 오디오, 오피스 문서를 넣고; 채팅하고, 검색하고, 다중 화자 팟캐스트를 생성할 수 있습니다 — 모두 여러분이 직접 운영하는 서버에서, 원하는 AI 제공자를 사용합니다.

  • 18개 이상의 AI 제공자 기본 지원 (OpenAI, Anthropic, Google, Mistral, Groq, xAI, DeepSeek, Ollama, LM Studio, OpenRouter, Voyage, ElevenLabs, Deepgram, Azure, Vertex, MiniMax, DashScope/Qwen, 그리고 OpenAI 호환 엔드포인트)

  • **다중 화자 팟캐스트(1–4명)**와 커스텀 Episode Profiles 제공 — NotebookLM의 고정된 2인 진행 포맷과 차별화

  • 다중 모달 소스: PDF, YouTube 전사, 웹 페이지, 오디오(Whisper / Deepgram), 오피스 문서

  • Docker Compose 기반 자체 호스팅 및 SurrealDB v2를 이용한 관계형 + 벡터 저장소. Ollama와 함께 완전 오프라인 사용 가능

  • REST API(포트 5055) 제공 — 자체 파이프라인에서 데이터 수집, 변환, 팟캐스트 생성 자동화 가능

  • MIT 라이선스, 다국어 UI(영어, 포르투갈어, 중국어, 일본어, 러시아어, 벵골어)

Google에 민감한 연구 데이터를 보내는 것이 꺼려지는 상황에서 NotebookLM을 팟캐스트용으로 사용해왔다면, 2026년 현재 가장 완전한 자체 호스팅 대안이라 할 수 있습니다. 명령 3개, 20초면 localhost:8502에 개인용 NotebookLM이 구축됩니다.


Quick Reference

FieldValue
Repolfnovo/open-notebook
AuthorLuis Novo (lfnovo) + 60명 이상의 기여자
Stars28,152 (+3,891 이번 주 — GitHub Trending Python 상위 15위)
LicenseMIT
StackPython (Streamlit UI + FastAPI on 5055) + Next.js/React + SurrealDB v2
StorageSurrealDB v2 (관계형 + 벡터 + 전체 텍스트를 하나의 엔진에 통합)
InstallDocker Compose(권장) 또는 소스 직접 설치
Default ports8502(UI), 5055(REST API)
API docshttp://localhost:5055/docs (자동 생성 OpenAPI)
Provider abstractionEsperanto — Luis가 만든 LLM/임베딩/STT/TTS 통합 라이브러리
Siteopen-notebook.ai
Discorddiscord.gg/37XJPXfz2w

Open Notebook은 실제로 무엇인가?

NotebookLM과 동일한 형태의 연구 노트북입니다 — 노트북을 만들고, 소스를 첨부하면 시스템이 해당 소스를 청크화·임베딩·인덱싱하고, 이후에 번들을 대상으로 채팅, 메모 생성, 요약, 변환, 혹은 팟캐스트 에피소드를 만들 수 있습니다.

전체 파이프라인 흐름:

Sources (PDF/YouTube/Web/Audio)

Loader (per type) → Chunker → Embedder (per provider) → SurrealDB (vectors + text)

                                                       Context selector

User chat → Context-aware LLM → Cited answer + transformation

                              Episode Profile → Multi-speaker TTS → Podcast .mp3

핵심은 Esperanto입니다 — Luis가 별도로 만든 라이브러리로, 모든 지원 제공자에게 동일한 .chat(), .embed(), .transcribe(), .speak() 인터페이스를 제공합니다. 그래서 19번째 제공자를 추가하는 일은 작은 PR에 불과하고, Notebook 코드를 바꾸지 않고도 (예: Claude로 채팅, Voyage로 임베딩, Groq로 STT, ElevenLabs로 팟캐스트 음성) 자유롭게 조합할 수 있습니다.


60초 안에 설치하기

권장 설치 방법은 Docker Compose입니다. Docker Desktop(또는 다른 Docker 엔진)이 실행 중인지 확인한 뒤, 다음을 실행하세요:

mkdir open-notebook && cd open-notebook

curl -o docker-compose.yml \
  https://raw.githubusercontent.com/lfnovo/open-notebook/main/docker-compose.yml

# 암호화 키를 수정합니다 — 임의의 문자열이면 됩니다
sed -i.bak 's/change-me-to-a-secret-string/'"$(openssl rand -hex 32)"'/' docker-compose.yml

docker compose up -d

SurrealDB가 시작되고 마이그레이션이 완료될 때까지 약 15초 정도 기다린 뒤, http://localhost:8502에 접속합니다. UI는 Streamlit 기반이며, 기능 위주라 다소 유틸리티적입니다.

최초 실행 흐름

  1. Settings → API KeysAdd Credential → 제공자를 선택하고 키를 붙여넣기 → Test Connection → Discover Models → Register Models
  2. Settings → Defaults → 기본 채팅 모델, 임베딩 모델, STT 모델, TTS 모델 선택 (노트북 별로 오버라이드 가능)
  3. New Notebook → 소스 파일을 드롭 → 채팅 시작

무료 로컬 전용 사용을 원한다면, examples/docker-compose-ollama.yml을 참고해 Ollama를 함께 연결할 수 있습니다. llama3.2:3b 혹은 qwen2.5:7b를 채팅 모델로, nomic-embed-text를 임베딩 모델로 사용하면 전체 노트북이 인터넷에 전혀 접속하지 않습니다.


실제로 뛰어난 점

1. 팟캐스트 생성이 핵심 기능

NotebookLM의 “Audio Overview”는 두 명의 진행자와 하나의 딥다이브 형식에 고정돼 있습니다. Open Notebook의 Episode Profiles는 1–4명의 화자, 화자별 TTS 음성 ID, 화자별 성격 프롬프트, 길이·인트로·아웃트로 템플릿을 자유롭게 정의할 수 있게 해줍니다.

예시: “VC 피치 토론” 프로파일을 만들었습니다 — 회의 진행자, 낙관주의자, 회의록 작성자 3명의 화자를 각각 다른 ElevenLabs 음성으로 지정하고, 스타트업 피치덱 PDF + Hacker News 런치 스레드 + CrunchBase 페이지를 입력했습니다. 결과는 14분 길이의 3인 팟캐스트이며, 화자 구분이 명확했습니다. NotebookLM에서는 불가능합니다.

2. 제공자 믹싱으로 비용 절감

Esperanto 덕분에 비용 기반 라우팅이 가능합니다. 예를 들어, 채팅은 Claude 4.5 Sonnet, 요약은 DeepSeek V3, 임베딩은 Voyage voyage-3, STT는 Groq Whisper, 팟캐스트 TTS는 ElevenLabs Flash v2를 각각 사용합니다. 50페이지 분량의 연구 번들을 이 조합으로 처리하면 약 $0.40에 끝나지만, OpenAI만 사용하면 약 $2.80이 듭니다.

3. SurrealDB 하나만으로 모든 저장소 해결

대부분의 NotebookLM 클론은 Postgres + pgvector + Elasticsearch + S3 조합을 사용합니다. Open Notebook은 SurrealDB v2 하나로 문서, 청크, 벡터, 전체 텍스트 인덱스, 그래프 관계까지 모두 관리합니다. 컨테이너 하나와 데이터 디렉터리 하나만 tar 하면 백업이 완료됩니다. 자체 호스팅 도구에서는 운영 단순성이 성능보다 더 큰 가치를 가집니다.

4. REST API가 연구 백본 역할

http://localhost:5055/docs는 전체 OpenAPI 스펙을 제공하며, UI에서 수행되는 모든 동작이 API 호출로 구현됩니다. 매일 Pocket 내보내기 파일을 자동으로 ingest하고, 새로운 RSS 장문을 “Reading” 노트북에 추가하고, 별표된 기사로 주간 팟캐스트를 자동 생성하거나, 공유 노트북을 질의하는 Slack 봇을 만들 수 있습니다. NotebookLM에는 이런 기능이 전혀 없습니다.


코드 예시: 파이프라인에서 자동 ingest

아래는 최소한의 Python 클라이언트 예시입니다. 노트북을 만들고, URL을 ingest한 뒤 처리 완료를 기다리고, 질문을 던집니다. 연구 에이전트에 Open Notebook을 연결하고 싶을 때 유용합니다.

# pipeline/auto_ingest.py
import os, time, requests

BASE = os.environ.get("OPEN_NOTEBOOK_URL", "http://localhost:5055")

def create_notebook(name: str, description: str = "") -> str:
    r = requests.post(f"{BASE}/api/v1/notebooks", json={
        "name": name,
        "description": description,
    })
    r.raise_for_status()
    return r.json()["id"]

def ingest_url(notebook_id: str, url: str, transformations: list[str] | None = None) -> str:
    payload = {
        "notebook_id": notebook_id,
        "type": "link",
        "url": url,
        "transformations": transformations or ["summary", "key_insights"],
    }
0 조회
Back to Blog

관련 글

더 보기 »

Eidentic 소개

Today we're releasing Eidentic, an open-source TypeScript SDK for building AI agents with self-improving memory and the production fundamentals built in — not b...

Typescript의 타입

Introdução Tipos são uma forma de definir a “forma” ou o contrato dos dados que estamos usando no código. Pensando em Javascript puro, ele é dinâmico: você pode...