피드로 돌아가기
Dev.toBackend
원문 읽기
notify-rs 기반 500ms Debounce 설계로 PDF 자동화 파이프라인 구현
Watching a Folder in Rust with notify-rs — Hot Folder for PDF Automation
AI 요약
Context
파일 시스템의 생성 및 수정 이벤트를 실시간으로 감지하여 PDF 프로세싱을 자동화하는 Hot Folder 기능 구현 필요. 단순 이벤트 리스닝 시 파일 쓰기 완료 전 프로세싱이 시작되어 데이터 무결성이 깨지는 Race Condition 발생 가능성 존재.
Technical Solution
- macOS FSEvents 활용 RecommendedWatcher 도입을 통한 시스템 오버헤드 최소화 및 즉각적인 이벤트 감지 구조 설계
- mpsc channel을 이용한 Watcher 스레드와 이벤트 핸들러 간의 비동기 메시지 전달 체계 구축
- notify-debouncer-mini 라이브러리를 적용하여 마지막 Write 이벤트 발생 후 500ms 대기하는 Debounce 로직 구현으로 파일 쓰기 완료 보장
- Event Kind 필터링과 확장자 검증 로직을 통한 PDF 파일 전용 파이프라인 트리거 조건 설정
- tokio::spawn 기반의 비동기 태스크 할당으로 파일 프로세싱 중에도 감시 루프의 Non-blocking 상태 유지
- Tauri Managed State에 Watcher 인스턴스를 저장하여 앱 라이프사이클과 동기화된 리소스 관리 및 WatcherCommand를 통한 동적 폴더 제어
실천 포인트
1. 파일 시스템 감시 시 Create 이벤트만으로는 파일 쓰기 완료를 보장할 수 없으므로 반드시 Debounce 전략 검토
2. OS별 네이티브 API(예: macOS FSEvents)를 활용하는 라이브러리를 선택하여 CPU 리소스 낭비 방지
3. 무거운 I/O 작업은 별도의 비동기 런타임(tokio)으로 분리하여 이벤트 수신 루프의 지연 방지
4. 라이프사이클 관리가 필요한 외부 리소스는 애플리케이션 상태 관리 시스템(Tauri State 등)에 바인딩