본문 바로가기
프로그램 (PHP,Python)

NotebookLM 자동화 시스템 문서 기반 AI Knowledge Engine 만들기

by 날으는물고기 2026. 3. 6.

NotebookLM 자동화 시스템 문서 기반 AI Knowledge Engine 만들기

728x90

  1. 공식 NotebookLM Enterprise API는 엔터프라이즈급 인증·권한·감사(로그)·조직 관리와 함께 노트북 관리, 소스 추가(여러 타입), 오디오 오버뷰 등 핵심 기능을 REST/공식 클라이언트로 제공합니다.
  2. notebooklm-py(teng-lin)는 비공식 Python CLI/라이브러리로, UI·내부 RPC를 활용해 UI에서 가능한 많은 기능(및 UI에 노출되지 않는 내보내기/배치 기능)을 프로그래매틱하게 구현합니다. 다만 내부(문서화되지 않은) 엔드포인트를 사용하므로 변경·중단 리스크가 있습니다.
  3. 실무 권장: PoC/개발은 notebooklm-py로 빠르게 검증 → 프로덕션(민감데이터·규모 운영)은 NotebookLM Enterprise 공식 API + 서비스계정/조직 IdP로 전환.

공식 API(NotebookLM Enterprise) — 무엇이 제공되는가

  • 노트북 관리 (notebooks API)
    • 메서드: notebooks.create, notebooks.get, notebooks.listRecentlyViewed, notebooks.delete, notebooks.share 등.
    • 사용 사례: 프로젝트 단위 노트북 생성/목록 조회/삭제·공유.
  • 소스 관리 (sources API)
    • 지원 소스 타입: Google Docs/Slides, 업로드 파일(PDF/DOCX/TXT 등), 웹 URL, YouTube 등.
    • 기능: 단건 추가, 배치 추가(여러 파일/URL), 소스 업데이트/삭제, 일부 경우 인덱싱(처리) 대기 옵션.
  • Audio Overview (오디오 개요)
    • 기능: 노트북에서 요약/구성된 팟캐스트 스타일 오디오 생성(생성·삭제 등 관리). 노트북 당 한 번의 오디오 개요 등 제한 언급.
  • 엔터프라이즈 통제
    • 조직·프로젝트 연동, IdP 통합(SSO), 권한·라이선스 관리, DPA/계약 관련 규정 적용 가이드. (엔터프라이즈 문서 전반) 

참고: 공식 문서는 기능별, 엔드포인트별 예시(Request/Response)·인증(서비스 계정/OAuth)·쿼터·제한을 제공하므로, 실제 구현 시 해당 문서의 “Before you begin / Authentication / Quotas” 섹션을 따르는 것이 필수입니다.

비공식 라이브러리 notebooklm-py — 무엇을 더 해주는가 (핵심 기능)

  • 주요 기능: 노트북 CRUD, 소스 추가(파일/URL/YouTube/Drive), 질의(chat/ask), 다양한 아티팩트(오디오·슬라이드·퀴즈·마인드맵 등) 생성·대기·다운로드, 대량 배치 업로드, 소스 전체 텍스트 추출, 포맷별 익스포트.
  • 자동화 편의성: CLI와 Python API가 제공되어 즉시 스크립트·파이프라인으로 연동 가능. (예: notebooklm login, notebooklm create, notebooklm source add, notebooklm ask, notebooklm generate audio, notebooklm download)
  • 리스크: 내부 비공개/문서화되지 않은 RPC를 호출하므로 Google 측 API 변경 시 동작 불능 가능. 인증은 브라우저 세션/쿠키·토큰을 활용하는 편의 방식이 많아 조직적 제어가 어렵습니다.
300x250

기능 맵핑 — 공식 API와 비공식 클라이언트의 차이(표)

  • 노트북 생성/삭제/목록: 공식 / 비공식
  • 소스 추가(단건/배치, Drive, YouTube, URL, 파일): 공식 / 비공식 (더 많은 포맷·배치·자동화 옵션)
  • 질의(chat/ask): 공식(문서 기반 지원, 엔터프라이즈용 엔드포인트) / 비공식 (UI 동작과 유사한 상호작용 API 제공)
  • 아티팩트 생성(오디오 등): 공식(오디오 오버뷰 명시) / 비공식 (오디오뿐 아니라 슬라이드·퀴즈·마인드맵 등 다양한 포맷 생성·다운로드 편의 제공)
  • 대량 익스포트(PPTX/퀴즈 JSON 등): 공식(문서화된 범위 제한 가능) 제한적 / 비공식 광범위 (UI 기능 포함 거의 대부분)

구체적인 사용 예제 — 공식 API*와 *notebooklm-py (실전 코드/명령)

주: 아래 예제는 개념·구성·파라미터 흐름을 보여주기 위한 샘플입니다. 실사용 시 공식 문서의 최신 엔드포인트·파라미터를 확인하시고, 서비스 계정·토큰으로 인증하세요.

A. 공식 API — REST 호출 예시 (개념적)

  • 인증: Authorization: Bearer <ACCESS_TOKEN> (서비스 계정이나 OAuth2 토큰)
  1. 노트북 생성 (예시)
curl -X POST "https://notebooklm.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global/notebooks" \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "title":"My Research Notebook",
   "metadata": { "emoji":"🧠" }
 }'

응답: notebook 리소스 JSON — name(resource id), notebookId 포함

  1. 소스 추가 (URL)
curl -X POST "https://notebooklm.googleapis.com/v1/{notebook_name}/sources:batchAdd" \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "requests": [
     { "addUrlRequest": { "url": "https://en.wikipedia.org/wiki/Artificial_intelligence", "displayName":"AI - Wiki" } }
   ]
 }'

배치형 추가/인덱싱 지연 옵션 등 문서 참조

  1. 오디오 오버뷰 생성 (개념)
curl -X POST "https://notebooklm.googleapis.com/v1/{notebook_name}/audioOverview" \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{"voice":"alloy","instructions":"Make it brief and engaging."}'

생성 후 상태 확인 API로 완료 대기/다운로드

실제 엔드포인트 URL 패턴/파라미터는 공식 문서의 각 페이지(노트북 관리, 소스 관리, audio overview)를 참조하세요.

B. notebooklm-py(비공식) — Python 사용 예시 (실전형)

  • 설치: pip install notebooklm-py 또는 GitHub 소스.
  • 간단한 흐름(로그인 → 노트북 생성 → URL 추가 → 질의 → 오디오 생성→다운로드):
import asyncio
from notebooklm import NotebookLMClient

async def demo():
    # local storage에 로그인 정보가 저장되어 있어야 함 (notebooklm login 명령으로 세션 획득)
    async with await NotebookLMClient.from_storage() as client:
        nb = await client.notebooks.create("My Research")
        print("Notebook ID:", nb.id)

        # URL 소스 추가 (wait=True: 인덱싱 완료 대기)
        await client.sources.add_url(nb.id, "https://en.wikipedia.org/wiki/Artificial_intelligence", wait=True)

        # 질의 (chat/ask)
        resp = await client.chat.ask(nb.id, "Summarize the major topics in this source.")
        print("Answer:", resp.answer)

        # 오디오 생성 & 대기 & 다운로드
        task = await client.artifacts.generate_audio(nb.id, instructions="Summarize as an engaging 3-minute podcast")
        await client.artifacts.wait_for_completion(nb.id, task.task_id)
        await client.artifacts.download_audio(nb.id, "ai_overview.mp3")

asyncio.run(demo())
  • CLI 예: notebooklm login, notebooklm create "Title", notebooklm source add URL, notebooklm ask "질의", notebooklm generate audio --wait, notebooklm download audio ./file.mp3.

실무 전개(도입) 권장 절차 — 단계별

  1. 개념검증(PoC)
    • 목적: 자동 소스 수집·인덱싱, 질의응답 정확도 확인, 아티팩트(오디오/PPTX/퀴즈) 출력물 형식 확인.
    • 방법: notebooklm-py로 내부(비민감) 문서·웹 URL을 업로드 → 자동 요약·오디오 생성 → 결과 포맷 확인.
  2. 보안·거버넌스 검토
    • 확인: DPA·계약, 데이터 저장 위치(지역), 로그 보존 정책, IdP/서비스계정 인증 방식.
    • 조치: 민감데이터 업로드 금지 또는 익명화/마스킹, 감사 로그 연동(가급적 중앙 SIEM).
  3. 프로덕션 아키텍처 설계
    • 권장: 공식 NotebookLM Enterprise API + 서비스계정 기반 백엔드 파이프라인.
    • 보완: notebooklm-py에서 유용한 “내보내기/익스포트” 기능이 필요하면, PoC 결과를 바탕으로 내부 변환/포맷터 모듈로 대체.
  4. 마이그레이션·자동화
    • 배치 파이프라인: 파일 업로드→소스 추가→인덱스 완료 대기→질의/아티팩트 생성→다운로드/보관(객체 스토리지)
    • 모니터링: 처리 실패·API 에러 감지, E2E 헬스체크(예: 샘플 질의 성공/응답시간) 설정.

보안·운영 체크리스트 (구체적)

  • 인증/키 관리
    • 서비스 계정 사용(권장), 최소 권한 권한 부여(least privilege).
    • 로컬에 토큰·쿠키를 저장하는 비공식 툴 사용 금지/격리.
  • 데이터 분류·정책
    • 업로드 전 데이터 분류(민감/비민감) → 민감데이터는 전처리(마스킹/익명화) 또는 업로드 금지.
  • 감사·로깅
    • API 호출 로그, 누가 어떤 노트북(또는 소스)을 생성/삭제/질의했는지 SIEM에 연동.
    • 오디오 등 생성물의 접근 제어(공개 링크 허용 시 만료·권한 검토).
  • 변경 감지·회복 계획
    • 비공식 API 사용 시 엔드포인트 변경 감지(헬스체크) → 공식 API로 재구성 계획 마련.
  • 규정·계약
    • 엔터프라이즈 계약(DPA 포함) 적용 여부 확인(특히 EU/국내 규정에 영향).

차이점 때문에 생기는 운영 리스크와 대응 방안

  • 리스크1 — 공식 문서화 없는 엔드포인트 의존: Google이 내부 API 변경하면 자동화 파이프라인 중단.
    • 대응: PoC용으로만 한정, 운영은 공식 API 사용. 자동화된 E2E 헬스·알람 구성.
  • 리스크2 — 브라우저 세션 기반 인증(비공식 도구): 세션 탈취·환경 의존성 문제.
    • 대응: 서비스 계정(공식) 또는 별도 격리된 자동화 계정 사용. 로컬 세션 파일에 대한 접근 통제.
  • 리스크3 — 민감 데이터 유출 가능성(아티팩트 공유): 오디오/노트북 공유 링크로 노출.
    • 대응: 공유 링크 기본 비활성화, 만료·권한 정책 적용, 공유 이벤트 감사.

실무 예시: "사내 문서 폴더 → NotebookLM로 자동 수집 → 요약·오디오 생성 → S3에 저장" (아키텍처·단계)

  1. 트리거: Google Drive 동기화(혹은 파일 업로드 이벤트)
  2. 수집: 백엔드(서비스계정)에서 파일 메타 확인 → NotebookLM(공식 API)로 소스 추가(배치)
  3. 인덱싱 대기: sources:batchAdd 후 상태 모니터링 → 인덱스 완료 시 다음 단계.
  4. 처리: 자동 질의(요약/FAQ/오디오 생성) API 호출(오디오 overview 등).
  5. 저장: 생성된 아티팩트(예: mp3, PPTX, JSON)를 내부 객체 스토리지(S3/GS)로 저장하고 접근권한 관리.
  6. 감사: 모든 호출·파일 이벤트를 SIEM에 전송(누가 업로드했고 누가 다운로드했는지 기록).

권장 템플릿 코드(프로덕션 준비용, 의사 코드)

  • 목표: 서비스 계정 기반으로 NotebookLM 공식 API를 호출해 배치 업로드 → 오디오 생성 → 완료 시 S3 업로드
# (의사코드) - 실제 엔드포인트/라이브러리 함수는 공식 문서 확인 필요
from google.auth import default
import requests, boto3, time

creds, project = default(scopes=['https://www.googleapis.com/auth/cloud-platform'])
token = creds.token or creds.refresh(Request())  # google-auth 사용 패턴

HEADERS = {"Authorization": f"Bearer {token}", "Content-Type":"application/json"}

# 1) 노트북 생성
resp = requests.post(
    f"https://notebooklm.googleapis.com/v1/projects/{PROJECT_NUMBER}/locations/global/notebooks",
    headers=HEADERS, json={"title":"Auto Notebook"}
)
nb = resp.json()

# 2) 파일 배치 업로드 (파일 업로드 → sources.batchAdd)
# ... 업로드 로직 (multipart upload로 파일 업로드 후 sources API에 파일 reference 추가)

# 3) 오디오 생성 요청
audio_req = requests.post(f"https://notebooklm.googleapis.com/v1/{nb['name']}/audioOverview",
                          headers=HEADERS, json={"voice":"alloy","instructions":"Short briefing"})
task = audio_req.json()

# 4) 상태 폴링, 완료되면 artifact URL 획득 → S3 업로드
while True:
    status = requests.get(f"https://notebooklm.googleapis.com/v1/{nb['name']}/audioOverview", headers=HEADERS).json()
    if status.get("state") == "COMPLETED": break
    time.sleep(5)

artifact_url = status["output"]["gcsUri"]  # 예시
# S3 업로드/다운로드 등 처리

실제 코드는 공식 문서의 request/response 필드명을 그대로 사용해야 하므로, 배포 전 문서의 최신 스펙을 확인하세요.

추가 자료·오픈소스 참고

  • teng-lin/notebooklm-py (비공식 Python 클라이언트·CLI).
  • PyPI 배포 페이지(패키지 버전·릴리스 노트).
  • notebooklm-rest-api(notebooklm-py 기반 REST 래퍼) — 내부 PoC·서비스화 참고.
  • NBLM (Rust/Python) 문서화 프로젝트 — API 참조 예제.

권장 실무 체크리스트

  1. PoC: notebooklm-py로 비민감 데이터로 기능·포맷 검증.
  2. 인증설계: 서비스 계정 + 최소권한 정책 설계(프로덕션은 공식 API 사용).
  3. 거버넌스: DPA/규정 검토, 민감데이터 업로드 금지·익명화 절차 문서화.
  4. 모니터링: 헬스체크·E2E 테스트·알람 구성(비공식 사용 시 필수).
  5. 마이그레이션계획: 비공식 의존 기능을 공식 API로 재구현할 때의 우선순위·ROI 문서화.

추천 액션 (빠르게 시작할 3가지)

  1. PoC 스크립트 요청: 내부(비민감) PDF/URL을 notebooklm-py로 배치 업로드 → 자동 요약→오디오 생성→다운로드 예제 스크립트.
  2. 공식 API 검증: 귀사 GCP 프로젝트에서 NotebookLM Enterprise 라이선스·서비스 계정으로 간단한 노트북 생성·소스 추가·오디오 생성(REST 예제)을 직접 실행해 보시길 권장합니다.
  3. 보안 검토: 민감데이터 업로드 통제·로그 수집·서비스 계정 정책을 먼저 확정하세요.
728x90
그리드형(광고전용)

댓글