728x90
반응형
📄 PDF OCR 완벽 가이드
오픈소스 vs 클라우드 서비스 비교 분석
1. OCR이란 무엇인가?
OCR = Optical Character Recognition (광학 문자 인식)
이미지나 스캔된 문서에서 텍스트를 인식하여 편집 가능한 텍스트로 변환하는 기술
용어 분석
- Optical (광학): 빛을 이용한, 시각적인
- Character (문자): 글자, 텍스트
- Recognition (인식): 인지하고 판별하는 것
관련 기술들
- ICR (Intelligent Character Recognition): 손글씨 인식
- OMR (Optical Mark Recognition): 마크 인식 (시험 답안지 등)
- OBR (Optical Barcode Recognition): 바코드 인식
2. OCR의 두 가지 방식
🏠 오픈소스 라이브러리 = 내 집 주방에서 요리
내 서버에 설치해서 직접 실행. 무료지만 내가 관리해야 함. 인터넷 없어도 작동.
☁️ 클라우드 서비스 = 배달 음식 시키기
다른 회사 서버에 API 요청. 유료지만 관리 안 해도 됨. 인터넷 필수.
3. 오픈소스 라이브러리
⭐ Tesseract OCR 가장 인기
개발: Google
지원 언어: 100개 이상
Node.js 버전: tesseract.js
장점
- 완전 무료
- 오프라인 가능
- 커스터마이징 자유
- 데이터 외부 유출 없음
단점
- 정확도 낮음 (70~85%)
- 설치/관리 필요
- 서버 리소스 필요
코드 예시
import Tesseract from 'tesseract.js';
const { data } = await Tesseract.recognize(
'image.png',
'kor+eng' // 한국어 + 영어
);
console.log(data.text);
console.log('정확도:', data.confidence);
PaddleOCR
개발: 중국 바이두
특징: 높은 정확도, 중국어 특화, Python 기반
EasyOCR
지원 언어: 80개 이상
특징: 사용이 쉽고, 딥러닝 기반
4. 클라우드 OCR 서비스
⭐ AWS Textract Lambda 연동
제공: Amazon Web Services
가격: 페이지당 $0.0015 (1,000페이지 = $1.5)
특징:
- 표(Table) 구조 분석
- 양식(Form) 필드 추출
- 손글씨 인식
- 신분증, 여권 자동 분석
- AWS Lambda와 완벽 통합
코드 예시
import { TextractClient, DetectDocumentTextCommand } from "@aws-sdk/client-textract";
const client = new TextractClient({ region: "us-east-1" });
const command = new DetectDocumentTextCommand({
Document: {
S3Object: {
Bucket: "my-bucket",
Name: "document.pdf"
}
}
});
const response = await client.send(command);
console.log(response.Blocks);
⭐ Google Cloud Vision API 최고 정확도
제공: Google Cloud
가격: 1,000페이지당 $1.5
특징:
- 업계 최고 정확도 (95~98%)
- 50개 이상 언어 지원
- 손글씨 인식 우수
- 이미지 객체 인식 통합
- PDF 일괄 처리
Microsoft Azure Computer Vision
제공: Microsoft Azure
가격: 1,000페이지당 $1~$10 (기능별 차등)
특징:
- Office 문서 통합
- 명함 인식 특화
- 다양한 언어 지원
- 레이아웃 분석
⭐ Naver Clova OCR 한국어 특화
제공: Naver Cloud
가격: 1,000건당 ₩2,000~₩10,000 (도메인별)
특징:
- 한국어 인식률 최고 (95~99%)
- 영수증, 명함, 신분증 템플릿
- 사업자등록증, 계약서 특화
- 한글 손글씨 우수
- 국내 서버 (빠른 속도)
Amazon Rekognition
제공: AWS
특징: 이미지/비디오 분석 + OCR 통합
ABBYY Cloud OCR
특징: 엔터프라이즈급, 200개 언어, 매우 높은 정확도
IBM Watson Document Understanding
특징: AI 기반 문서 분류 + OCR
5. 상세 비교
기능 비교
| 항목 | 오픈소스 (Tesseract) | 클라우드 (AWS/Google) |
|---|---|---|
| 설치 | 내 서버에 설치 필요 | API 키만 발급 |
| 비용 | 무료 (서버 비용만) | 사용량만큼 과금 |
| 정확도 | 70~85% | 90~98% |
| 속도 | 서버 성능에 따라 | 매우 빠름 (GPU) |
| 오프라인 | ✅ 가능 | ❌ 불가능 |
| 데이터 보안 | ✅ 내 서버에만 | ⚠️ 외부로 전송 |
| 유지보수 | 내가 업데이트 | 자동 업데이트 |
| 고급 기능 | 텍스트만 | 표/양식 분석 |
🚨 중요: 보안 비교
보안은 오픈소스가 더 유리합니다!
- 오픈소스: 데이터가 내 서버에만 존재
- 클라우드: 데이터를 AWS/Google 서버로 전송해야 함
⚠️ 의료 기록, 금융 문서, 법률 문서 등 민감한 정보는 오픈소스 권장
비용 비교 (실제 사용량 기준)
| 월 처리량 | 오픈소스 | AWS Textract | Google Vision | 권장 |
|---|---|---|---|---|
| 1,000페이지 | 서버 비용 ($50~100) | $1.5 | $1.5 | 클라우드 |
| 10,000페이지 | 서버 비용 ($50~100) | $15 | $15 | 클라우드 |
| 100,000페이지 | 서버 비용 ($100~200) | $150 | $150 | 하이브리드 |
| 1,000,000페이지 | 서버 비용 ($200~500) | $1,500 | $1,500 | 오픈소스 |
6. 선택 가이드
오픈소스를 선택해야 하는 경우
- 💰 비용을 최대한 아껴야 함
- 🔒 민감한 문서 (외부 전송 불가)
- 📶 오프라인 환경
- 🎓 학습/프로토타입 단계
- 📊 정확도 70~80%로도 충분
- 🏢 대량 처리 (월 10만장 이상)
클라우드를 선택해야 하는 경우
- 💎 정확도가 매우 중요 (95%+ 필요)
- 🚀 빠르게 시작하고 싶음 (설치 불필요)
- 📈 자동 스케일링 필요
- 🛠️ 서버 관리 하기 싫음
- 📋 표/양식 분석 필요
- ✍️ 손글씨 인식 필요
- 💵 비용보다 품질 우선
하이브리드 전략 (추천!)
// 똑똑한 OCR 선택 전략
async function smartOCR(file, options) {
// 1단계: Tesseract로 먼저 시도 (무료)
const result = await tesseractOCR(file);
// 2단계: Confidence가 낮으면 클라우드 사용
if (result.confidence < 80) {
console.log('정확도 낮음, 클라우드 API 사용');
return await awsTextract(file); // 유료지만 정확
}
return result;
}
// 민감한 문서는 무조건 오픈소스
if (document.isSensitive) {
return await tesseractOCR(file);
}
7. OCR 처리 프로세스
전체 흐름도
파일 업로드
→
PDF 검증
→
이미지 추출
→
OCR 처리
→
텍스트 추출
→
결과 반환
Phase 1: 파일 수신 & 검증
- Multer로 PDF 파일 수신
- 파일 크기 제한 (예: 10MB)
- MIME 타입 검증 (
application/pdf) - 보안 검사 (확장자, 매직 넘버)
Phase 2: PDF 처리
- PDF를 이미지로 변환 (페이지별)
- 이미지 전처리 (그레이스케일, 노이즈 제거)
- 라이브러리:
pdf2pic,sharp
Phase 3: OCR 처리
- Tesseract 또는 클라우드 API 호출
- 언어 설정 (한국어:
kor, 영어:eng) - 페이지별 병렬 처리 (
Promise.all) - Confidence Score 체크
Phase 4: 후처리 & 반환
- 페이지별 텍스트 병합
- 메타데이터 추출 (처리 시간, 정확도)
- 결과 저장 (DB, S3)
실제 구현 코드
// 1. 파일 업로드 엔드포인트
app.post('/api/ocr/upload',
authenticate,
upload.single('pdf'),
async (req, res) => {
const file = req.file;
// 2. Job Queue에 추가 (백그라운드 처리)
const job = await ocrQueue.add('process-pdf', {
fileId: file.id,
filePath: file.path
});
res.json({ jobId: job.id, status: 'processing' });
}
);
// 3. Job 처리 로직
ocrQueue.process('process-pdf', async (job) => {
const { filePath } = job.data;
// PDF → 이미지 변환
const images = await convertPDFToImages(filePath);
// 각 페이지 OCR (병렬)
const results = await Promise.all(
images.map(async (imagePath, index) => {
const processed = await preprocessImage(imagePath);
const { data } = await Tesseract.recognize(
processed,
'kor+eng'
);
return {
page: index + 1,
text: data.text,
confidence: data.confidence
};
})
);
return results;
});
8. 결론
핵심 요약
클라우드 서비스를 쓰는 진짜 이유
- 🎯 정확도 (90~98%)
- 😌 편리함 (설치/관리 불필요)
- ⚡ 속도 (GPU, 자동 스케일링)
- 🛠️ 고급 기능 (표/양식 분석)
⚠️ 보안은 오픈소스가 더 안전합니다!
최종 추천
| 상황 | 추천 솔루션 | 이유 |
|---|---|---|
| 프로토타입/MVP | Tesseract | 무료, 빠른 테스트 |
| 민감한 문서 | Tesseract | 데이터 외부 유출 없음 |
| 한국어 문서 | Naver Clova | 한국어 최고 정확도 |
| 글로벌 서비스 | Google Vision | 다국어 지원 우수 |
| AWS 인프라 | AWS Textract | Lambda 연동 용이 |
| 대량 처리 | 하이브리드 | 비용 효율성 |
Backend 모듈 라이브러리 통합 계획
// 환경변수로 제어
// .env
OCR_PROVIDER=tesseract // 또는 aws, google, naver
// 사용법 통일
import { ocr } from './modules/ocr';
const result = await ocr.process(file, {
provider: process.env.OCR_PROVIDER,
language: 'kor+eng'
});
// 결과 형식 동일
{
pages: [...],
confidence: 92.5,
processingTime: '3.2s'
}
다음 단계
- Tesseract 기본 구현 (Day 10.5)
- AWS Textract 연동 (Day 11)
- Provider 추상화 레이어 (Day 11.5)
- 문서화 및 예제 작성
728x90
'Tech Notes' 카테고리의 다른 글
| Flutter 앱 : 환경 구축하기 - fvm 설치하기[window] (0) | 2025.10.22 |
|---|---|
| nvm? npm? fvm? 헷갈리지? (1) | 2025.10.22 |
| 언제 try-catch, throw를 써야할까? (1) | 2025.10.11 |
| aws의 cdn, cloudfront 에 대해 알아보자 (1) | 2025.10.10 |
| AWS bucket의 권한 관리 (0) | 2025.10.10 |