← 기술 블로그 목록으로 돌아가기
#979 • Search Engineering & Document Parsing

인덱싱 없는 초고속 오피스 본문 검색: ZeliFind의 다중 스레드 스트리밍과 IContentExtractor 파이프라인

"수만 개의 한글·워드·엑셀·PDF 파일 중 그 문장이 들어있는 문서는 어디에 있는가?" Windows Search 인덱서의 디스크 점유 100% 결함을 극복한 무인덱스 병렬 본문 스캐너. OpenXML·PdfPig 인프로세스 직접 역어셈블과 50ms 반응형 동시성 큐 아키텍처.

"선생님이 감사 자료나 작년도 교육과정 계획서를 찾을 때 가장 흔한 상황은 '파일명은 도무지 생각나지 않는데, 문서 안에 들어있던 학생 이름이나 특정 예산 과목 이름만 또렷이 기억나는 것'입니다. 윈도우 탐색기는 수십 분 동안 초록색 진행바만 채우다 멈추고, Everything은 파일명만 찾을 수 있습니다. 무거운 인덱스 DB 구축 없이 10만 개의 오피스 문서 본문을 직접 관통하는 초고속 병렬 검색기—그것이 교무 행정의 진짜 생산성 혁신입니다."

1. 교무실과 행정실의 고질적 탐색 지옥: "파일명은 기억 안 나고 본문 내용만 떠오릅니다"

학교 공용 드라이브(NAS)와 교원 PC 하드디스크에는 수년간 누적된 수만 개의 파일이 저장되어 있습니다:

2. Windows Search 인덱서의 치명적 결함: 디스크 I/O 100%와 학교 PC 비활성화

많은 운영체제 전문가들이 윈도우의 기본 기능인 '색인(Windows Search)'을 권하지만, 학교와 군부대 현장에서 Windows Search는 기피 대상 1호입니다:

반면 빠른 파일 검색으로 유명한 Everything은 NTFS의 MFT(Master File Table)만 읽기 때문에 파일 본문(Content) 속 단어를 검색하는 것은 불가능하거나 극도로 느립니다.

3. ZeliFind의 무인덱스 병렬 스트리밍 엔진: Parallel.ForEach와 코어 × 2 파이프라인

ZeliDesk의 `ZeliFind`는 사전 인덱스 DB를 일체 만들지 않습니다. 대신 최신 멀티코어 CPU의 병렬 처리 능력을 극한까지 끌어올려, 파일 시스템을 실시간으로 직접 훑어내는 무인덱스(Indexing-Free) 병렬 스트리밍 아키텍처를 구축했습니다:

C# — ZeliFind 멀티코어 병렬 파일 시스템 순회 및 본문 매칭 엔진 FileSearcher.cs
// 1. 접근 거부(UnauthorizedAccess) 및 시스템 폴더 자동 스킵 열거 옵션
var options = new EnumerationOptions {
    IgnoreInaccessible = true,
    RecurseSubdirectories = includeSubDirs,
    AttributesToSkip = FileAttributes.System
};

// 2. CPU 논리 코어 수 × 2 기반 최대 병렬 처리 풀 구성
int maxParallel = Math.Max(2, Environment.ProcessorCount * 2);

Parallel.ForEach(fileEnumerable, new ParallelOptions {
    MaxDegreeOfParallelism = maxParallel,
    CancellationToken = token
}, (fi, loopState) => {
    if (token.IsCancellationRequested) return;

    Interlocked.Increment(ref _scannedCount);

    // 3. IContentExtractor 플러그인 체인을 통한 파일 포맷별 고속 디코딩
    foreach (var extractor in _extractors) {
        if (extractor.CanHandle(fi)) {
            extractor.Extract(fi, searchText, comparison, token, result => {
                Interlocked.Increment(ref _matchCount);
                _resultBuffer.Enqueue(result); // 동시성 결과 큐에 즉시 적재
            });
            return;
        }
    }
});

시스템 권한이 없어 크래시를 유발하는 폴더(System Volume Information 등)는 EnumerationOptions 수준에서 안전하게 우회하며, 8코어 16스레드 PC 기준 초당 수천 개의 파일을 병렬 디코딩합니다.

4. 포맷별 전용 디코더 플러그인 (IContentExtractor): Docx, Xlsx, Pptx, Pdf 역어셈블

오피스 문서들은 단순한 텍스트 파일이 아니라 압축된 XML과 복잡한 바이너리 구조를 가지고 있습니다. ZeliFind는 무거운 MS 오피스 프로그램을 실행하지 않고, 메모리 스트림 상에서 ZIP 컨테이너를 직접 열어 본문 XML을 즉각 파싱하는 플러그인 체인을 구현했습니다:

문서 포맷 전용 추출기 (Extractor) 내부 처리 메커니즘 최적화 특징
Word (`.docx`) DocxContentExtractor ZipArchive ➔ word/document.xml 스트리밍 XML 태그 파싱 없이 내부 텍스트 노드 연속 바이트 스캔
Excel (`.xlsx`) XlsxContentExtractor xl/sharedStrings.xml 및 시트 XML 중복 문자열 풀(Shared Strings)을 먼저 검색하여 0.01초 판별
PowerPoint (`.pptx`) PptxContentExtractor ppt/slides/slide*.xml 병렬 순회 슬라이드별 텍스트 프레임과 발표자 메모 동시 추출
PDF (`.pdf`) PdfContentExtractor PdfPig C# 인프로세스 디코더 CMap 폰트 스트림 인메모리 역어셈블로 서식 손실 0%
텍스트/소스/로그 (`.txt`, `.csv`, `.py`) DefaultTextExtractor UTF-8 / CP949 인코딩 자동 감지 스트리밍 Boyer-Moore 알고리즘 기반 초고속 패턴 매칭

5. 50ms 반응형 동시성 큐 (ConcurrentQueue): 사용자 체감 지연 제로(0ms) UX

수만 개의 파일을 검색할 때, 모든 검색이 끝날 때까지 10~20초 동안 멈춰있는 UI는 사용자를 불안하게 만듭니다. 반대로 결과가 나올 때마다 UI 스레드를 깨우면 렌더링 병목(UI Freezing)이 발생합니다.

ZeliFind는 백그라운드 스레드와 UI 스레드 사이에 `ConcurrentQueue`와 50ms 정주기 플러시 타이머를 배치했습니다:

6. Windows Search vs Everything vs grep vs ZeliFind 통합 본문 검색 비교

비교 항목 Windows Search 색인 Everything 리눅스 grep / ripgrep ZeliDesk ZeliFind
사전 인덱스 DB 필요성 필수 (수십 GB 스토리지 잠식) 필수 (MFT 메모리 상주) 불필요 불필요 (0바이트 인덱스, 무인덱스)
오피스 본문(Content) 검색 지원하나 극히 불안정 기본 미지원 (별도 옵션 시 극도로 느림) 바이너리 오피스/PDF 검색 불가 Word, Excel, PPT, PDF 네이티브 완전 지원
시스템 백그라운드 부하 I/O 100% 유발로 학교 PC 비활성화 매우 낮음 실행 시점에만 발생 평상시 0% (검색 시 멀티코어 최적 배분)
결과 렌더링 반응성 수 분간 대기 후 한 번에 출력 즉시 출력 (파일명만) 콘솔 텍스트 줄글 출력 50ms 동시성 큐 기반 초저지연 스트리밍
폐쇄망 및 개인정보 보안 로컬 파일시스템 준수 로컬 파일시스템 준수 로컬 터미널 외부 전송 0바이트 + 샌드박스 안전 격리

7. 결론: "수십 년간 쌓인 학교 행정 문서를 1초 만에 관통하는 지능형 데스크톱 파일 시스템"

우리가 컴퓨터를 사용하는 이유는 인간의 불완전한 기억력을 소프트웨어가 완벽하게 보완해 줄 수 있기 때문입니다. 수년간 쌓아온 교안과 행정 문서들이 파일명을 잊어버렸다는 이유만으로 영원히 잠들어 있다면, 그것은 엄청난 지적 자산의 낭비입니다.

ZeliDesk의 ZeliFind는 무거운 인덱스 DB로 사용자의 컴퓨터를 괴롭히지 않으면서도, 현대 멀티코어 프로세서의 진정한 힘을 이끌어내어 오피스 문서의 본문을 가장 빠르고 정밀하게 열어젖힙니다. 복잡한 클라우드 없이 내 PC 안에서 실현되는 초고속 지식 탐색—ZeliDesk 엔지니어링의 자부심입니다.

🔍 ZeliDesk ZeliFind 본문 검색기 체험하기
인덱싱 없이 내 컴퓨터의 한글, 워드, 엑셀, PPT, PDF 본문 속 단어를 1초 만에 찾아보세요.
72종 유틸리티 전체 둘러보기 →