Skip to content

시스템 아키텍처 설계

Lertaro는 밀리초 단위의 초고속 검색과 광범위한 데스크톱 통합을 달성하는 동시에 최상의 시스템 안정성과 보안을 보장하기 위해 다중 프로세스 격리 아키텍처를 채택하고 있습니다.

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)를 호스팅하여 lff CLI 도구가 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 프로세스에도 추가 로드되어 실행됩니다.