개요
이전 글에서는 RAG 기반 문서 검색 시스템에 문서 분류 및 권한 기반 접근 제어(RBAC) 기능을 구축하여, 카테고리 기반 검색과 역할 기반 접근 정책을 완성했다. 권한 변경 이력, 알림 시스템, 프론트엔드 UI 제어까지 포함한 종합적인 권한 관리 체계를 구현했다. 이번 글에서는 OCR(Optical Character Recognition) 기능을 RAG 시스템에 통합한 작업 내용을 정리한다. 이미지 또는 도면 내 텍스트를 자동으로 추출하고, 이를 임베딩 파이프라인과 연계하여 벡터 검색까지 연결하는 흐름을 구현하였다.
OCR 기능 통합 작업 흐름
1. OCR 파이프라인 설계 및 서비스 구현
- Tesseract OCR 엔진과 pytesseract 라이브러리를 기반으로 OCR 파이프라인 구현
- 파일 업로드 → 언어 감지 → OCR 처리 → 텍스트 파싱 → 임베딩 연동 → S3(현재는 minio) 저장
- 언어 설정, 고속/고정확도 모드, 파라미터 동적 설정 기능 제공
2. API 엔드포인트 구성
POST /ocr/upload: 이미지 업로드 및 OCR 처리GET /ocr/languages: 지원 언어 목록 조회GET /ocr/config: 현재 OCR 설정 정보 조회GET /ocr/health: OCR 헬스체크
3. 성능 벤치마킹 및 최적화
- 모드별 처리 속도: 고속(1.8초), 기본(2.5초), 고정확도(4.2초)
- 언어별 인식 정확도: 한글 88%, 영어 90%, 한영혼합 85%, 일본어 82%, 중국어 80%
- 성능 스크립트:
ocr_benchmark.py로 처리 시간 및 정확도 측정
4. 테스트 및 품질 보증
- 단위 테스트 및 E2E 테스트 파일 분리 작성, 전체 테스트 커버리지 90% 이상
- 대용량 이미지, 다양한 언어, 이미지 품질 저하 상황에서의 테스트 포함
- 보안 테스트: 파일 검증, 용량 제한, 민감 정보 마스킹 기능 적용
5. 운영 및 배포 환경 구성
- Dockerfile에 Tesseract 엔진 및 언어팩 설치
- Kubernetes Helm 템플릿에 OCR 전용 리소스 요청/제한, 헬스체크 구성 추가
- Prometheus, Grafana, Sentry 기반 모니터링 연동
결과 요약
주요 성과
- OCR API 및 서비스 기능 100% 구현 완료
- 13개 서브 태스크 전부 완료 및 통합 테스트 완료
- 이미지 기반 문서에서도 벡터 검색 연계 가능하도록 파이프라인 확장
- Docker/Kubernetes 기반 배포 및 운영 환경 안정화
성능 지표
- 평균 응답 시간: 2.5초
- p95 응답 시간: 4.2초
- OCR 정확도 평균: 85% (목표: ≥ 80%)
- 시스템 가용성: 99.9%
- 오류율: 1% 이하
보안 및 안정성
- 파일 크기 제한: 최대 50MB
- 민감 정보 마스킹 기능 적용
- 인증 사용자만 사용 가능하도록 접근 제어
- 메모리 누수 없음, 고부하 상황에서 안정성 검증
구현된 파일 구조 요약
backend/api/ocr.py: OCR API 엔드포인트backend/app/services/ocr_service.py: OCR 처리 서비스 로직backend/tests/test_ocr_e2e.py: 전체 흐름 테스트 코드backend/scripts/ocr_benchmark.py: 성능 측정 스크립트infra/helm/rag-system/templates/: Kubernetes 배포 템플릿 수정
용어 정리
| 용어 | 설명 |
|---|---|
| OCR | Optical Character Recognition, 이미지에서 텍스트를 인식하는 기술 |
| Tesseract | 구글에서 개발한 오픈소스 OCR 엔진 |
| pytesseract | Python에서 Tesseract를 사용할 수 있도록 해주는 래퍼 라이브러리 |
| OCR 파이프라인 | 파일 → OCR 처리 → 텍스트 파싱 → 임베딩 저장까지의 전체 흐름 |
| OCR 정확도 | 인식된 텍스트가 원본과 얼마나 일치하는지를 나타내는 지표 |
| OCR 벤치마킹 | 모드, 언어별로 OCR 성능을 테스트하고 비교하는 절차 |
마무리
이번 글에서는 Tesseract 기반 OCR 기능을 FastAPI 백엔드에 통합한 작업을 정리했다. 이미지와 도면에서 텍스트를 자동 추출하고, 이를 벡터 임베딩과 연계하여 기존 RAG 파이프라인에 자연스럽게 연결하는 구조를 구현했다.
다음 글에서는 문서 요약 및 태스크 기반 LLM 연동 기능 구현을 다룰 예정이다.
'사이드 프로젝트' 카테고리의 다른 글
| RAG 기반 문서 검색 시스템 - 정리 (1) | 2025.07.23 |
|---|---|
| RAG 기반 문서 검색 시스템 - 13(복합 질문 및 문서 요약 기능 구현) (1) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 11(문서 분류 및 권한 기반 접근 제어 구현) (0) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 10(문서 메타데이터 및 버전 관리 기능 구현) (1) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 9(근거 문장 UI 콜랩스/확장 구현) (3) | 2025.07.22 |