본문 바로가기
Tech Notes

OCR 이 뭘까? 개념과 어떻게 사용해야 하는지 알아보자!

by miracle-tech 2025. 10. 15.
728x90
반응형
PDF OCR 완벽 가이드 - 오픈소스 vs 클라우드 서비스

📄 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. 결론

핵심 요약

클라우드 서비스를 쓰는 진짜 이유

  1. 🎯 정확도 (90~98%)
  2. 😌 편리함 (설치/관리 불필요)
  3. 속도 (GPU, 자동 스케일링)
  4. 🛠️ 고급 기능 (표/양식 분석)

⚠️ 보안은 오픈소스가 더 안전합니다!

최종 추천

상황 추천 솔루션 이유
프로토타입/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'
}

다음 단계

  1. Tesseract 기본 구현 (Day 10.5)
  2. AWS Textract 연동 (Day 11)
  3. Provider 추상화 레이어 (Day 11.5)
  4. 문서화 및 예제 작성

📚 Backend 모듈 라이브러리 PRD v2.1

OCR 모듈 추가 계획 문서

728x90