blevels

Home / AI / AI 바이브코딩 / AI로 PDF 요약 봇 만들기 — 문서 분석 자동화 1시간 완성

VIBE

AI로 PDF 요약 봇 만들기 — 문서 분석 자동화 1시간 완성

게시일 2026-04-30수정일 2026-04-30
공식 링크
On this page

매일 쌓이는 보고서와 논문, 직접 다 읽기엔 시간이 부족하다. PDF를 업로드하면 핵심을 뽑아주는 요약 봇을 Claude API와 Node.js로 1시간 안에 완성할 수 있다.

기준 환경: Node.js 20 / Anthropic SDK 0.52 / claude-sonnet-4-6 (2026-04 기준). 라이브러리 업데이트 시 코드 검토 권장.

목표

이 튜토리얼에서는 PDF 파일을 입력받아 주요 내용을 한국어로 요약해주는 CLI 기반 봇을 만든다.

완성 후 다음이 가능해진다:

  • PDF 파일 경로를 입력하면 자동으로 텍스트 추출
  • Claude API로 핵심 요약 + 주요 키워드 + 인사이트 추출
  • 결과를 터미널 출력과 .txt 파일로 동시 저장

준비물

  • Node.js 20 이상 (node -v로 확인)
  • Anthropic API 키 (발급: console.anthropic.com)
  • 테스트용 PDF 파일 1개
# Node.js 버전 확인
node -v  # v20 이상이어야 함

# 프로젝트 폴더 생성
mkdir pdf-summarizer && cd pdf-summarizer
npm init -y

1. 패키지 설치 및 환경 설정

npm install @anthropic-ai/sdk pdf-parse dotenv
  • @anthropic-ai/sdk: Anthropic 공식 Node.js SDK
  • pdf-parse: PDF 텍스트 추출 라이브러리
  • dotenv: 환경변수 관리

.env 파일 생성 (.gitignore에 반드시 추가):

ANTHROPIC_API_KEY=sk-ant-xxxxx
# .gitignore에 추가
echo ".env" >> .gitignore
AD

2. PDF 텍스트 추출 함수

src/extract.mjs 파일 생성:

import pdf from 'pdf-parse';
import { readFile } from 'fs/promises';

export async function extractText(pdfPath) {
  const buffer = await readFile(pdfPath);
  const data = await pdf(buffer);
  return data.text;
}

pdf-parse는 PDF의 텍스트 레이어를 추출한다. 스캔 이미지로만 구성된 PDF(OCR 미적용)는 빈 텍스트가 반환된다. 이 경우 Tesseract.js 등 OCR 라이브러리가 추가로 필요하다.

3. Claude API 요약 함수

src/summarize.mjs 파일 생성:

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic();

export async function summarize(text) {
  // 컨텍스트 윈도우 초과 방지: 약 5만 자로 제한
  const truncated = text.slice(0, 50000);

const response = await client.messages.create({
    model: 'claude-sonnet-4-6',
    max_tokens: 1024,
    messages: [{
      role: 'user',
      content: `다음 문서를 한국어로 요약해 주세요.

요약 형식:
1. 핵심 요약 (3~5문장)
2. 주요 키워드 (5개)
3. 주목할 인사이트 (2~3개)

문서:
${truncated}`
    }]
  });

return response.content[0].text;
}
AD

4. 메인 실행 파일

index.mjs 파일 생성:

import 'dotenv/config';
import { writeFile } from 'fs/promises';
import { extractText } from './src/extract.mjs';
import { summarize } from './src/summarize.mjs';

const pdfPath = process.argv[2];

if (!pdfPath) {
  console.error('사용법: node index.mjs <PDF 파일 경로>');
  process.exit(1);
}

console.log('PDF 텍스트 추출 중...');
const text = await extractText(pdfPath);
console.log(`추출 완료: ${text.length}자`);

console.log('Claude 요약 중...');
const summary = await summarize(text);

console.log('\n=== 요약 결과 ===\n');
console.log(summary);

const outputPath = pdfPath.replace('.pdf', '-summary.txt');
await writeFile(outputPath, summary, 'utf-8');
console.log(`\n결과 저장: ${outputPath}`);

5. 실행 및 결과 확인

node index.mjs ./sample.pdf

정상 작동 시 터미널에 요약이 출력되고 sample-summary.txt가 생성된다.

오류 대응 체크리스트:

| 오류 메시지 | 원인 | 해결 방법 | |---|---|---| | ANTHROPIC_API_KEY is not set | .env 파일 누락 | .env 파일 생성 확인 | | Cannot find module 'pdf-parse' | 패키지 미설치 | npm install 재실행 | | 빈 텍스트 추출 | 스캔 이미지 PDF | OCR 도구 추가 필요 | | context_length_exceeded | 문서가 너무 긺 | truncated 길이를 줄임 |

다음 단계

CLI에서 웹 인터페이스로 확장하거나, 폴더 단위 일괄 처리로 발전시킬 수 있다.

  • 웹 UI 추가: nextjs + Vercel Functions로 파일 업로드 폼 구성
  • 배치 처리: fs.readdir + Promise.all로 폴더 내 전체 PDF 일괄 요약
  • 프롬프트 캐싱: 동일 문서를 여러 번 질의할 경우 cache 적용으로 API 비용 절감
  • 관련 튜토리얼: cursor를 활용한 코드 자동 생성 가이드
AD