시스템 아키텍처 설계
Lertaro는 밀리초 단위의 초고속 검색과 광범위한 데스크톱 통합을 달성하는 동시에 최상의 시스템 안정성과 보안을 보장하기 위해 다중 프로세스 격리 아키텍처를 채택하고 있습니다.
1. 3 프로세스 격리 모델
단일 컴포넌트의 오류가 전체 시스템 충돌로 이어지는 것을 방지하고 관리자 권한 범위를 최소화하기 위해 런타임이 세 개의 독립된 프로세스로 분리되어 있습니다.
1. 백그라운드 인덱싱 서비스 (Lertaro.Service)
- 실행 권한: Windows 시스템의
LocalSystem계정으로 상주하는 Windows 서비스. - 주요 역할: 전체 디스크 파일 인덱싱 및 증분 변경 추적. NTFS / ReFS 디스크의 USN 변경 저널 및 $MFT 테이블을 직접 파싱하고, FAT32 / exFAT 변경 이벤트를 실시간 감지하며, SMB / NAS 네트워크 공유를 주기적으로 스캔하여 캐싱합니다.
- 보안 및 성능: SYSTEM 권한으로 실행되어 UAC 팝업 없이 원시 볼륨 메타데이터를 직접 읽을 수 있으며, 고속 명명된 파이프를 통해 사용자 모드 App으로 검색 결과를 전달하므로 UI 프로세스에 불필요한 관리자 권한을 부여하지 않습니다.
2. 사용자 상호작용 메인 프로세스 (Lertaro.App)
- 실행 권한: 표준 사용자 모드 세션 격리 WPF 데스크톱 애플리케이션.
- 주요 역할: 퀵 검색창, 메인 검색 윈도우, 설정 센터, 전역 단축키 처리, 액션 메뉴(
Ctrl+O), QuickLook 파일 즉시 미리보기를 담당합니다. - IPC 통신 및 CLI 호스팅: 양방향 명명된 파이프(
Core.Services.SearchService)를 통해 백그라운드 서비스와 통신합니다. 또한 사용자 전용 파이프(AppSearchPipeService)를 호스팅하여lffCLI 도구가 App의 초기화된 메모리 별칭 테이블과 플러그인을 중복 초기화 없이 그대로 활용할 수 있도록 지원합니다.
3. 전역 키보드 후크 및 창 어댑터 프로세스 (Lertaro.Service --hook)
- 실행 권한: 백그라운드 서비스에서 필요에 따라 실행하는 전용 권한 보조 프로세스.
- 주요 역할: 저수준 전역 키보드 후크 및 마우스 이벤트 감지.
- UIPI 권한 우회 및 충돌 격리: Windows UIPI(사용자 인터페이스 권한 격리) 규칙에 따라 일반 권한 프로세스는 관리자 권한으로 실행된 창에 메시지를 보낼 수 없습니다. 이 특권 Hook 프로세스에서 창 통합 어댑터(
IActivePathCollector,IFileDialogAdapter,IInlineSearchAdapter)를 실행함으로써 관리자 권한의 탐색기 및 대화상자에도 완벽하게 내장됩니다. 또한 후크 오류가 발생해도 메인 App의 동작은 안전하게 유지됩니다.
2. 공유 코어 라이브러리 (Lertaro.Core)
Lertaro.Core는 Service, App, Hook 프로세스에서 공통 참조하는 핵심 라이브러리입니다.
- 자체 개발 fzf 퍼지 매칭 엔진 (
Core/SearchIndex/Fzf/*):fzf알고리즘 기반의 문자 점프 일치, 점수 산정 및 하이라이트 마스크 계산 구현. - 컬럼형 메모리 인덱스 (
Core/IndexV2/*): 메모리 맵 컬럼형 스냅샷과 델타 오버레이를 결합하여 수억 건의 파일에 대해 서브밀리초 검색 달성. - 바이너리 IPC 프로토콜:
SearchRequestMessage등의 직렬화 구조를 통해 프로세스 간 제로카피 고속 통신 지원. - 통합 로깅 시스템 (
Logger):service.log,app.log,hook.log로 분리 기록되며 설정 창의 로그 뷰어를 통해 통합 조회 가능.
3. 플러그인 시스템의 아키텍처 위치
모든 플러그인은 Lertaro.PluginSdk를 기반으로 빌드되며 Lertaro.App 실행 시 동적으로 로드됩니다.
- 표준 플러그인: 검색 소스, 액션, UI 확장은 App 프로세스 내부에서만 동작하며 서비스와 직접 통신하지 않습니다(폴더 인덱싱 요청은
DirectoryIndexerService프록시를 통해 전달). - 특권 어댑터 이중 로드: 창 통합 어댑터(
IActivePathCollector등)는 관리자 권한 창과의 상호작용을 위해 Hook 프로세스에도 추가 로드되어 실행됩니다.