프로젝트 배경
1) 문제점
- 사내 문서가 여러 채널(이메일, 메신저, 드라이브 등)에 분산돼 있어 정보 검색이 어려움
- 파일명이 아닌 내용을 기준으로 검색이 어려워 원하는 정보를 찾기까지 시간이 많이 소요됨
- 많은 문서가 개인 PC에 저장되어 있어 퇴사자나 부서 이동 시 정보 유실 발생
2) 프로젝트 목표
- 문서 전체 내용을 분석해 하나의 인터페이스에서 통합 검색이 가능한 시스템 구축
- 문서 내용을 기반으로 한 자연어 질의응답 기능 개발
- 문서 중앙화와 유실 방지를 위한 저장소 및 백업 체계 구축
3) 주안점
- 유사 파일명 및 내용 기반 클러스터링 → 통합 검색 제공
- 사용자 권한에 따라 검색 결과를 필터링 및 제한
- 문서 형식 다양성 대응 (PDF, PPT, 이미지 내 텍스트 등)
- 사내 문서가 여러 채널(이메일, 메신저, 드라이브 등)에 분산돼 있어 정보 검색이 어려움
- 파일명이 아닌 내용을 기준으로 검색이 어려워 원하는 정보를 찾기까지 시간이 많이 소요됨
- 많은 문서가 개인 PC에 저장되어 있어 퇴사자나 부서 이동 시 정보 유실 발생
2) 프로젝트 목표
- 문서 전체 내용을 분석해 하나의 인터페이스에서 통합 검색이 가능한 시스템 구축
- 문서 내용을 기반으로 한 자연어 질의응답 기능 개발
- 문서 중앙화와 유실 방지를 위한 저장소 및 백업 체계 구축
3) 주안점
- 유사 파일명 및 내용 기반 클러스터링 → 통합 검색 제공
- 사용자 권한에 따라 검색 결과를 필터링 및 제한
- 문서 형식 다양성 대응 (PDF, PPT, 이미지 내 텍스트 등)
프로젝트 성과
사내 검색 시간 70% 감소
기존 평균 2~3분 소요되던 정보 검색이 30초 이내로 단축
자연어 질문 응답 정확도 85% 이상
사용자 질문의 의도 파악 후 문서에서 근거 찾아 응답
문서 분산도 감소 60%
개인 PC 내 문서 → 중앙 서버로 통합 저장 유도
OCR 기반 이미지 문서 검색 정확도 90% 이상
스캔 문서, 사진 등에서 텍스트 추출 후 검색 가능
사용자 만족도 4.5/5 획득
시범 운영 후 사용자 인터뷰 및 설문 기반 수치 확보
핵심 기능
문서 전체 내용 기반 검색
키워드가 아닌 문서 내용 전체를 분석해 관련도 높은 문서 자동 랭킹
자연어 질의응답 기능 (RAG)
사용자가 질문하면 관련 문서 내용을 근거로 응답을 생성
OCR 이미지 텍스트 검색
사진/스캔본에서 텍스트를 인식하고 내용 기반으로 검색 가능
문서 유사도 기반 클러스터링
내용이 비슷한 문서를 그룹화해 중복 문서 제거 및 탐색 효율화
UMAP 기반 문서 분포 시각화
문서 임베딩 결과를 2D 시각화하여 주제별 분포 확인 가능
진행 단계
기획 및 요구사항 정의
2024.04.
검색 니즈, 문서 형태, 접근 제한 요구 분석
데이터 수집 및 전처리
2024.05.
문서 메타데이터 정제 및 OCR 적용
벡터화 및 검색 시스템 구축
2024.06.
FAISS 기반 유사도 검색 시스템 구축
LLM 질의응답 시스템 연동
2024.07.
LangChain을 활용한 문서 질의응답 구성
테스트 및 배포
2024.08.
시범 부서 테스트 및 성능 개선, Cloud Run 배포
프로젝트 상세
1) 배경
- 분산된 문서 관리 문제
회사 내 이메일, 메신저, 클라우드 드라이브, 개인 PC 등에 흩어진 수만 건의 문서를 한 곳에서 검색할 수 없어, 직원들이 원하는 정보를 찾기 위해 평균 2~3분 이상 소요
- 검색 효율성 저하
파일명 기준 검색만 가능해, 내용이 긴 보고서나 이미지 기반 문서는 전혀 검색되지 않음
- 정보 유실 리스크
개인 PC에 저장된 핵심 문서가 퇴사나 부서 이동 시 사라져 업무 연속성이 깨짐
2) 과정
1. 요구사항 수집 (2024.04)
- 주요 사용자(영업, R&D, 품질관리부서) 인터뷰 진행
- 검색 대상 문서 유형(Office 파일, PDF, 스캔 이미지) 목록화
- 권한 정책, 보안 수준 정의
2. 데이터 파이프라인 구축 (2024.05)
- 각 저장소 연동 스크립트 개발 (Google Drive API, 내부 NAS)
- PDF → 텍스트 추출, 이미지 → OCR 처리 (EasyOCR)
- 메타데이터(작성자, 날짜, 키워드) 자동 태깅
3. 검색·질의응답 엔진 개발 (2024.06–07)
- 문서 임베딩: SentenceTransformers로 768-dim 벡터 생성
- 벡터 색인: FAISS를 이용한 Approximate Nearest Neighbor 구현
- RAG(Retrieval-Augmented Generation): LangChain + OpenAI API로 사용자 질문 시 근거 문서 스니펫 포함 답변 생성
4. 시각화 UI 및 배포 (2024.08)
- Streamlit 대시보드에 검색 결과, 문서 클러스터 뷰, UMAP 분포 맵 탑재
- FastAPI + Docker로 컨테이너화, Google Cloud Run에 서버리스 배포
- 사내 SSO 연동 및 접근 권한 설정
3) 기술적 이슈
- 대규모 색인 성능 저하
- 20만 건 문서를 FAISS에 색인했을 때 검색 응답 지연(평균 500ms → 1.2s) 발생
- OCR 정확도 및 속도 트레이드오프
- 이미지 해상도에 따라 EasyOCR 처리 시간이 0.8s~2.5s로 들쑥날쑥
- RAG 응답의 일관성 문제
- 동일 질문에 대해 때때로 관련 없는 스니펫을 인용해 답변 품질이 떨어짐
4) 해결 방안
- 색인 샤딩 & 캐시 도입
- FAISS 인덱스를 4개 샤드로 분할 후 멀티스레드 검색
- 빈번히 조회되는 상위 10개 쿼리 결과를 Redis에 캐싱
→ 검색 평균 응답 시간 1.2s → 350ms로 개선
- Adaptive OCR 해상도 조절
- 이미지 메타데이터(파일 크기, DPI)에 따라 저해상도/고해상도 모드 자동 전환
- 병렬 처리 워커 풀(pool) 구성해 동시 8개 작업 처리
→ OCR 처리 평균 시간 1.4s → 0.9s 단축, 정확도 90% 유지
- RAG 답변 필터링 레이어
- 유사도 0.7 이하 스니펫 자동 제외
- 사용자별 피드백(“관련 없음” 플래그) 수집해 Fine-tuning 데이터로 활용
→ 응답 연관도(정확도) 75% → 85%로 향상
5) 정량적 지표 & 성공 사례
- 검색 응답 시간 70% 감소
- 배포 전 평균 2.5s → 배포 후 0.75s
- 자연어 질의응답 정확도 85%
- 내부 평가 100문제 기준, 정답 문서 스니펫 근거 답변 비율
- 문서 중앙화율 60% 상승
- 개인 PC 보관 문서 12,000건 → 중앙 저장소 이전 7,200건
- OCR 검색 정확도 90%
- 스캔 문서 5,000건 테스트, 4,500건 이상 정확 검색
- 사용자 만족도 4.5/5
- 사내 시범 운영 후 50명 대상 설문 결과
- 분산된 문서 관리 문제
회사 내 이메일, 메신저, 클라우드 드라이브, 개인 PC 등에 흩어진 수만 건의 문서를 한 곳에서 검색할 수 없어, 직원들이 원하는 정보를 찾기 위해 평균 2~3분 이상 소요
- 검색 효율성 저하
파일명 기준 검색만 가능해, 내용이 긴 보고서나 이미지 기반 문서는 전혀 검색되지 않음
- 정보 유실 리스크
개인 PC에 저장된 핵심 문서가 퇴사나 부서 이동 시 사라져 업무 연속성이 깨짐
2) 과정
1. 요구사항 수집 (2024.04)
- 주요 사용자(영업, R&D, 품질관리부서) 인터뷰 진행
- 검색 대상 문서 유형(Office 파일, PDF, 스캔 이미지) 목록화
- 권한 정책, 보안 수준 정의
2. 데이터 파이프라인 구축 (2024.05)
- 각 저장소 연동 스크립트 개발 (Google Drive API, 내부 NAS)
- PDF → 텍스트 추출, 이미지 → OCR 처리 (EasyOCR)
- 메타데이터(작성자, 날짜, 키워드) 자동 태깅
3. 검색·질의응답 엔진 개발 (2024.06–07)
- 문서 임베딩: SentenceTransformers로 768-dim 벡터 생성
- 벡터 색인: FAISS를 이용한 Approximate Nearest Neighbor 구현
- RAG(Retrieval-Augmented Generation): LangChain + OpenAI API로 사용자 질문 시 근거 문서 스니펫 포함 답변 생성
4. 시각화 UI 및 배포 (2024.08)
- Streamlit 대시보드에 검색 결과, 문서 클러스터 뷰, UMAP 분포 맵 탑재
- FastAPI + Docker로 컨테이너화, Google Cloud Run에 서버리스 배포
- 사내 SSO 연동 및 접근 권한 설정
3) 기술적 이슈
- 대규모 색인 성능 저하
- 20만 건 문서를 FAISS에 색인했을 때 검색 응답 지연(평균 500ms → 1.2s) 발생
- OCR 정확도 및 속도 트레이드오프
- 이미지 해상도에 따라 EasyOCR 처리 시간이 0.8s~2.5s로 들쑥날쑥
- RAG 응답의 일관성 문제
- 동일 질문에 대해 때때로 관련 없는 스니펫을 인용해 답변 품질이 떨어짐
4) 해결 방안
- 색인 샤딩 & 캐시 도입
- FAISS 인덱스를 4개 샤드로 분할 후 멀티스레드 검색
- 빈번히 조회되는 상위 10개 쿼리 결과를 Redis에 캐싱
→ 검색 평균 응답 시간 1.2s → 350ms로 개선
- Adaptive OCR 해상도 조절
- 이미지 메타데이터(파일 크기, DPI)에 따라 저해상도/고해상도 모드 자동 전환
- 병렬 처리 워커 풀(pool) 구성해 동시 8개 작업 처리
→ OCR 처리 평균 시간 1.4s → 0.9s 단축, 정확도 90% 유지
- RAG 답변 필터링 레이어
- 유사도 0.7 이하 스니펫 자동 제외
- 사용자별 피드백(“관련 없음” 플래그) 수집해 Fine-tuning 데이터로 활용
→ 응답 연관도(정확도) 75% → 85%로 향상
5) 정량적 지표 & 성공 사례
- 검색 응답 시간 70% 감소
- 배포 전 평균 2.5s → 배포 후 0.75s
- 자연어 질의응답 정확도 85%
- 내부 평가 100문제 기준, 정답 문서 스니펫 근거 답변 비율
- 문서 중앙화율 60% 상승
- 개인 PC 보관 문서 12,000건 → 중앙 저장소 이전 7,200건
- OCR 검색 정확도 90%
- 스캔 문서 5,000건 테스트, 4,500건 이상 정확 검색
- 사용자 만족도 4.5/5
- 사내 시범 운영 후 50명 대상 설문 결과

Vector Database 예시