1. 교무실과 행정실의 고질적 탐색 지옥: "파일명은 기억 안 나고 본문 내용만 떠오릅니다"
학교 공용 드라이브(NAS)와 교원 PC 하드디스크에는 수년간 누적된 수만 개의 파일이 저장되어 있습니다:
- 의미 없는 파일명들의 난립:
새문서 (3).hwp,수정본_최종_진짜최종.docx,2025_예산안_수정.xlsx처럼 파일명만으로는 도저히 내용을 유추할 수 없는 문서가 태반입니다. - 특정 본문 키워드만 기억나는 상황: "작년에 결재 올렸던 공문 중에 '생태전환교육 실천주간'이라는 문구가 들어있던 파일이 뭐였더라?"
- 전수 조사의 현실적 불가능: 수백 개의 폴더를 일일이 열어 파일을 하나씩 실행하고
Ctrl + F를 누르는 것은 하루 근무 시간을 통째로 날려버리는 끔찍한 비효율입니다.
2. Windows Search 인덱서의 치명적 결함: 디스크 I/O 100%와 학교 PC 비활성화
많은 운영체제 전문가들이 윈도우의 기본 기능인 '색인(Windows Search)'을 권하지만, 학교와 군부대 현장에서 Windows Search는 기피 대상 1호입니다:
- 거대한 인덱스 데이터베이스(Windows.edb): 파일 색인을 유지하기 위해 수십 GB에 달하는 인덱스 DB를 C: 드라이브에 생성하여 SSD 수명을 단축시키고 스토리지를 잠식합니다.
- 백그라운드 디스크 I/O 100% 유발: 수업 중이거나 업무 중에 색인 서비스(SearchIndexer.exe)가 멋대로 돌며 컴퓨터 전체를 멈추게(Freezing) 만듭니다.
- 전산실 일괄 비활성화: 이로 인해 전국의 교육청 유지보수 업체와 학교 정보부장 교사들은 PC 세팅 시 Windows Search 서비스를 '사용 안 함'으로 강제 종료해 둡니다.
반면 빠른 파일 검색으로 유명한 Everything은 NTFS의 MFT(Master File Table)만 읽기 때문에 파일 본문(Content) 속 단어를 검색하는 것은 불가능하거나 극도로 느립니다.
3. ZeliFind의 무인덱스 병렬 스트리밍 엔진: Parallel.ForEach와 코어 × 2 파이프라인
ZeliDesk의 `ZeliFind`는 사전 인덱스 DB를 일체 만들지 않습니다. 대신 최신 멀티코어 CPU의 병렬 처리 능력을 극한까지 끌어올려, 파일 시스템을 실시간으로 직접 훑어내는 무인덱스(Indexing-Free) 병렬 스트리밍 아키텍처를 구축했습니다:
// 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
- 배치 플러시 (Batch Dispatch): 병렬 작업자 스레드들은 결과를 락-프리(Lock-Free)
ConcurrentQueue에 밀어 넣기만 하고 즉시 다음 파일로 넘어갑니다. - 50ms 인터벌 렌더링: 타이머가 50밀리초마다 큐에 쌓인 결과를 배치(Batch)로 꺼내어 UI ListView에 한 번에 갱신합니다.
- 체감 지연 제로: 사용자는 검색 버튼을 누르자마자 0.05초 만에 화면에 매칭된 첫 번째 문서들이 물 흐르듯 쏟아져 나오는 초반응형 인터랙션을 경험합니다.
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 엔지니어링의 자부심입니다.